aboutsummaryrefslogtreecommitdiffstats
path: root/code/api/Endpoints/Storage/TreeEndpoint.cs
diff options
context:
space:
mode:
authorivarlovlie <git@ivarlovlie.no>2022-12-30 20:22:55 +0100
committerivarlovlie <git@ivarlovlie.no>2022-12-30 20:22:55 +0100
commit3c188c2949af9d0e08db74a850f8a87dad52de49 (patch)
tree5dba85786aa9a5a72d91328092a017f16318b8c0 /code/api/Endpoints/Storage/TreeEndpoint.cs
parentf5374b0b3543b0bd7d280f71ed8bf5175bad3834 (diff)
downloadstorage-3c188c2949af9d0e08db74a850f8a87dad52de49.tar.xz
storage-3c188c2949af9d0e08db74a850f8a87dad52de49.zip
feat: Yes
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