aboutsummaryrefslogtreecommitdiffstats
path: root/code/api/Services/System/DefaultResourceService.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/Services/System/DefaultResourceService.cs
parentf5374b0b3543b0bd7d280f71ed8bf5175bad3834 (diff)
downloadstorage-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.cs40
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