diff options
| author | ivarlovlie <git@ivarlovlie.no> | 2022-12-30 20:22:55 +0100 |
|---|---|---|
| committer | ivarlovlie <git@ivarlovlie.no> | 2022-12-30 20:22:55 +0100 |
| commit | 3c188c2949af9d0e08db74a850f8a87dad52de49 (patch) | |
| tree | 5dba85786aa9a5a72d91328092a017f16318b8c0 /code/api/Services/System | |
| parent | f5374b0b3543b0bd7d280f71ed8bf5175bad3834 (diff) | |
| download | storage-3c188c2949af9d0e08db74a850f8a87dad52de49.tar.xz storage-3c188c2949af9d0e08db74a850f8a87dad52de49.zip | |
feat: Yes
Diffstat (limited to 'code/api/Services/System')
| -rw-r--r-- | code/api/Services/System/ChunkUploaderService.cs | 16 | ||||
| -rw-r--r-- | code/api/Services/System/DefaultResourceService.cs | 40 | ||||
| -rw-r--r-- | code/api/Services/System/PermissionService.cs | 19 | ||||
| -rw-r--r-- | code/api/Services/System/ShareService.cs | 6 | ||||
| -rw-r--r-- | code/api/Services/System/StorageService.cs | 39 |
5 files changed, 113 insertions, 7 deletions
diff --git a/code/api/Services/System/ChunkUploaderService.cs b/code/api/Services/System/ChunkUploaderService.cs new file mode 100644 index 0000000..d650fa4 --- /dev/null +++ b/code/api/Services/System/ChunkUploaderService.cs @@ -0,0 +1,16 @@ +namespace I2R.Storage.Api.Services.System; + +public class ChunkUploaderService +{ + private readonly ILogger<ChunkUploaderService> _logger; + private readonly AppDatabase _database; + + public ChunkUploaderService(AppDatabase database, ILogger<ChunkUploaderService> logger) { + _database = database; + _logger = logger; + } + + public async Task<Guid> StartUploadSession() { + return default; + } +}
\ No newline at end of file diff --git a/code/api/Services/System/DefaultResourceService.cs b/code/api/Services/System/DefaultResourceService.cs new file mode 100644 index 0000000..5198432 --- /dev/null +++ b/code/api/Services/System/DefaultResourceService.cs @@ -0,0 +1,40 @@ +using I2R.Storage.Api.Services.Abstractions; +using File = System.IO.File; + +namespace I2R.Storage.Api.Services.System; + +public class DefaultResourceService : IResourceService +{ + private readonly IConfiguration _configuration; + + public DefaultResourceService(IConfiguration configuration) { + _configuration = configuration; + } + + public async Task SetBlobAsync(StorageBlobId id, Stream stream, CancellationToken cancellationToken = default) { + await stream.CopyToAsync(File.OpenWrite(EnsureCreatedAndReturnBasedPath(id)), cancellationToken); + } + + public Task<byte[]> GetBlobAsync(StorageBlobId id, CancellationToken cancellationToken = default) { + return File.ReadAllBytesAsync(EnsureCreatedAndReturnBasedPath(id), cancellationToken); + } + + public Task RemoveBlobAsync(StorageBlobId id, CancellationToken cancellationToken = default) { + File.Delete(EnsureCreatedAndReturnBasedPath(id)); + return Task.CompletedTask; + } + + public async Task SetBlobMetadataAsync(StorageBlobId id, Dictionary<string, string> metadata, CancellationToken cancellationToken = default) { + await File.OpenWrite(EnsureCreatedAndReturnBasedPath(id) + SystemConstants.MetadataFileExtension).WriteAsync(JsonSerializer.SerializeToUtf8Bytes(metadata), cancellationToken); + } + + public async Task<Dictionary<string, string>> GetBlobMetadataAsync(StorageBlobId id, CancellationToken cancellationToken = default) { + return JsonSerializer.Deserialize<Dictionary<string, string>>(await File.ReadAllBytesAsync(EnsureCreatedAndReturnBasedPath(id) + SystemConstants.MetadataFileExtension, cancellationToken)); + } + + private string EnsureCreatedAndReturnBasedPath(StorageBlobId id) { + var withoutId = Path.Combine(Directory.GetCurrentDirectory(), _configuration.GetValue(AppEnvVariables.STORAGE_ROOT, "__FILESYSTEM__"), id.Bucket.ToString()); + Directory.CreateDirectory(withoutId); + return Path.Combine(withoutId, id.Id.ToString()); + } +}
\ No newline at end of file diff --git a/code/api/Services/System/PermissionService.cs b/code/api/Services/System/PermissionService.cs new file mode 100644 index 0000000..f55d8c1 --- /dev/null +++ b/code/api/Services/System/PermissionService.cs @@ -0,0 +1,19 @@ +namespace I2R.Storage.Api.Services.System; + +public class PermissionService +{ + private readonly AppDatabase _database; + private readonly ILogger<PermissionService> _logger; + + public PermissionService(ILogger<PermissionService> logger, AppDatabase database) { + _logger = logger; + _database = database; + } + + public async Task GrantAllOnFile(Guid fileId, Guid userId) { } + public async Task GrantAllOnFolder(Guid fileId, Guid userId) { } + public async Task UserCanReadFile(Guid fileId, Guid userId) { } + public async Task UserCanReadFolder(Guid folderId, Guid userId) { } + public async Task UserCanWriteFile(Guid fileId, Guid userId) { } + public async Task UserCanWriteFolder(Guid folderId, Guid userId) { } +}
\ No newline at end of file diff --git a/code/api/Services/System/ShareService.cs b/code/api/Services/System/ShareService.cs new file mode 100644 index 0000000..047e607 --- /dev/null +++ b/code/api/Services/System/ShareService.cs @@ -0,0 +1,6 @@ +namespace I2R.Storage.Api.Services.System; + +public class ShareService +{ + +}
\ No newline at end of file diff --git a/code/api/Services/System/StorageService.cs b/code/api/Services/System/StorageService.cs index adbb883..328be2c 100644 --- a/code/api/Services/System/StorageService.cs +++ b/code/api/Services/System/StorageService.cs @@ -1,6 +1,3 @@ -using MR.AspNetCore.Pagination; -using MR.EntityFrameworkCore.KeysetPagination; - namespace I2R.Storage.Api.Services.System; public class StorageService @@ -13,11 +10,39 @@ public class StorageService _logger = logger; } - public async Task<KeysetPaginationResult<FileSystemEntry>> GetFileSystemEntriesAsync(Guid parent = default) { - var keysetQuery = _database.Folders + 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() { }); - return default; + .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); } }
\ No newline at end of file |
