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/Services/System/DefaultResourceService.cs | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 code/api/Services/System/DefaultResourceService.cs (limited to 'code/api/Services/System/DefaultResourceService.cs') 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 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 metadata, CancellationToken cancellationToken = default) { + await File.OpenWrite(EnsureCreatedAndReturnBasedPath(id) + SystemConstants.MetadataFileExtension).WriteAsync(JsonSerializer.SerializeToUtf8Bytes(metadata), cancellationToken); + } + + public async Task> GetBlobMetadataAsync(StorageBlobId id, CancellationToken cancellationToken = default) { + return JsonSerializer.Deserialize>(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 -- cgit v1.3