From 3c188c2949af9d0e08db74a850f8a87dad52de49 Mon Sep 17 00:00:00 2001 From: ivarlovlie Date: Fri, 30 Dec 2022 20:22:55 +0100 Subject: feat: Yes --- code/api/Endpoints/Storage/TreeEndpoint.cs | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'code/api/Endpoints/Storage/TreeEndpoint.cs') 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 Handle(Guid parent = default) { - return Ok(); + public async Task>> 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 -- cgit v1.3