aboutsummaryrefslogtreecommitdiffstats
path: root/code/api/Endpoints/Storage/TreeEndpoint.cs
diff options
context:
space:
mode:
Diffstat (limited to 'code/api/Endpoints/Storage/TreeEndpoint.cs')
-rw-r--r--code/api/Endpoints/Storage/TreeEndpoint.cs28
1 files changed, 26 insertions, 2 deletions
diff --git a/code/api/Endpoints/Storage/TreeEndpoint.cs b/code/api/Endpoints/Storage/TreeEndpoint.cs
index 857a570..f832034 100644
--- a/code/api/Endpoints/Storage/TreeEndpoint.cs
+++ b/code/api/Endpoints/Storage/TreeEndpoint.cs
@@ -2,8 +2,32 @@ namespace I2R.Storage.Api.Endpoints.Storage;
public class TreeEndpoint : EndpointBase
{
+ private readonly AppDatabase _database;
+ private readonly IPaginationService _pagination;
+
+ public TreeEndpoint(AppDatabase database, IPaginationService pagination) {
+ _database = database;
+ _pagination = pagination;
+ }
+
[HttpGet("~/storage/tree")]
- public async Task<ActionResult> Handle(Guid parent = default) {
- return Ok();
+ public async Task<ActionResult<KeysetPaginationResult<FileSystemEntry>>> Handle(Guid parent = default) {
+ return Ok(await _pagination.KeysetPaginateAsync(
+ _database.Folders.Include(c => c.Files).ConditionalWhere(() => parent != default, folder => folder.ParentId == parent),
+ b => b.Descending(a => a.Name),
+ async id => await _database.Folders.FirstOrDefaultAsync(c => c.Id == id.AsGuid()),
+ query => query.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()
+ })
+ ));
}
} \ No newline at end of file