aboutsummaryrefslogtreecommitdiffstats
path: root/code/api/Services/System/StorageService.cs
blob: 328be2c0ee189b05e7ceae533f0bf4e082cf705a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
namespace I2R.Storage.Api.Services.System;

public class StorageService
{
    private readonly AppDatabase _database;
    private readonly ILogger<StorageService> _logger;

    public StorageService(AppDatabase database, ILogger<StorageService> logger) {
        _database = database;
        _logger = logger;
    }

    public async Task<List<FileSystemEntry>> GetFileSystemEntriesAsync(Guid parent = default) {
        var fileSystemEntriesContext = _database.Folders
            .Include(c => c.Files)
            .ConditionalWhere(() => parent != default, folder => folder.ParentId == parent)
            .Select(p => new FileSystemEntry() {
                Id = p.Id,
                Name = p.Name,
                MimeType = SystemConstants.FolderMimeType,
                SizeInBytes = -1,
                Files = p.Files.Select(c => new FileSystemEntry() {
                    Id = c.Id,
                    Name = c.Name,
                    MimeType = c.MimeType,
                    SizeInBytes = c.SizeInBytes
                }).ToList()
            })
            .KeysetPaginate(builder => { builder.Ascending(entry => entry.Name); });
        var fileSystemEntries = await fileSystemEntriesContext.Query.ToListAsync();
        fileSystemEntriesContext.EnsureCorrectOrder(fileSystemEntries);
        return fileSystemEntries;
    }

    public async Task<FileSystemEntry> GetFileSystemEntryAsync(Guid folder) {
        return _database.Folders.Include(c => c.Files).Select(c => new FileSystemEntry() {
            Id = c.Id,
            SizeInBytes = -1,
            MimeType = SystemConstants.FolderMimeType,
            Files = c.Files.Select(p => new FileSystemEntry() {
                SizeInBytes = p.SizeInBytes,
                MimeType = p.MimeType,
                Id = p.Id,
                Name = p.Name
            }).ToList()
        }).FirstOrDefault(c => c.Id == folder);
    }
}