aboutsummaryrefslogtreecommitdiffstats
path: root/code/api/Services/System/StorageService.cs
blob: 9c6e0ac52e509c45fd2977462a6ab9689142688e (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
namespace Quality.Storage.Api.Services.System;

public class StorageService(AppDatabase database)
{
	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 Task<FileSystemEntry> GetFileSystemEntryAsync(Guid folderId) {
		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()
						})
						.FirstOrDefaultAsync(c => c.Id == folderId);
	}
}