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/DefaultResourceService.cs | |
| parent | f5374b0b3543b0bd7d280f71ed8bf5175bad3834 (diff) | |
| download | storage-3c188c2949af9d0e08db74a850f8a87dad52de49.tar.xz storage-3c188c2949af9d0e08db74a850f8a87dad52de49.zip | |
feat: Yes
Diffstat (limited to 'code/api/Services/System/DefaultResourceService.cs')
| -rw-r--r-- | code/api/Services/System/DefaultResourceService.cs | 40 |
1 files changed, 40 insertions, 0 deletions
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 |
