From 436ebf36a14f8b52a952df20f719633ee4699231 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Thu, 20 Aug 2026 15:23:23 +0200 Subject: [PATCH] Added local storage service --- .../Services/BrowserLocalStorageService.cs | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 PostFundManagement.Domain/Services/BrowserLocalStorageService.cs diff --git a/PostFundManagement.Domain/Services/BrowserLocalStorageService.cs b/PostFundManagement.Domain/Services/BrowserLocalStorageService.cs new file mode 100644 index 0000000..4ba6015 --- /dev/null +++ b/PostFundManagement.Domain/Services/BrowserLocalStorageService.cs @@ -0,0 +1,78 @@ +namespace PostFundManagement.Domain.Services; + +public sealed class BrowserLocalStorageService(ProtectedLocalStorage storage) +{ + public async ValueTask DeleteAsync(string key) + { + try + { + await storage.DeleteAsync(key); + + return Result.Ok(); + } + catch (Exception ex) + { + return Result.Fail(new Error(ex.Message).CausedBy(ex)); + } + } + + public async ValueTask SaveAsync(string key, string value) + { + try + { + await storage.SetAsync(key, value); + + return Result.Ok(); + } + catch (Exception ex) + { + return Result.Fail(new Error(ex.Message).CausedBy(ex)); + } + } + + public async ValueTask SaveAsync(string key, TValue value) where TValue : class + { + try + { + await storage.SetAsync(key, value); + + return Result.Ok(); + } + catch (Exception ex) + { + return Result.Fail(new Error(ex.Message).CausedBy(ex)); + } + } + + public async ValueTask> GetAsync(string key) + { + try + { + var retrieval = await storage.GetAsync(key); + + return retrieval.Success && !string.IsNullOrWhiteSpace(retrieval.Value) + ? Result.Ok(retrieval.Value) + : Result.Fail($"Could not find object by key {key}"); + } + catch (Exception ex) + { + return Result.Fail(new Error(ex.Message).CausedBy(ex)); + } + } + + public async ValueTask> GetAsync(string key) where TValue : class + { + try + { + var retrieval = await storage.GetAsync(key); + + return retrieval.Success && retrieval.Value is not null + ? Result.Ok(retrieval.Value) + : Result.Fail($"Could not find object by key {key}"); + } + catch (Exception ex) + { + return Result.Fail(new Error(ex.Message).CausedBy(ex)); + } + } +} \ No newline at end of file