50 lines
1.7 KiB
C#
50 lines
1.7 KiB
C#
using PostFundManagement.Domain.Errors;
|
|
|
|
namespace PostFundManagement.Application.Services.Shared;
|
|
|
|
public sealed class BrowserLocalStorageService(ProtectedLocalStorage storage)
|
|
{
|
|
public async Task<Result> DeleteAsync(string key) =>
|
|
await Result.Try((Func<Task<Result>>)(async () =>
|
|
{
|
|
await storage.DeleteAsync(key);
|
|
|
|
return Result.Ok();
|
|
}));
|
|
|
|
public async Task<Result> SaveAsync(string key, string value) =>
|
|
await Result.Try((Func<Task<Result>>)(async () =>
|
|
{
|
|
await storage.SetAsync(key, value);
|
|
|
|
return Result.Ok();
|
|
}));
|
|
|
|
public async Task<Result> SaveAsync<TValue>(string key, TValue value) where TValue : class =>
|
|
await Result.Try((Func<Task<Result>>)(async () =>
|
|
{
|
|
await storage.SetAsync(key, value);
|
|
|
|
return Result.Ok();
|
|
}));
|
|
|
|
public async Task<Result<string>> GetAsync(string key) =>
|
|
await Result.Try((Func<Task<Result<string>>>)(async () =>
|
|
{
|
|
var retrieval = await storage.GetAsync<string>(key);
|
|
|
|
return Result.FailIf(!retrieval.Success && string.IsNullOrWhiteSpace(retrieval.Value),
|
|
NotFoundError.Create($"Could not find object by key {key}"))
|
|
.ToResult(retrieval.Value!);
|
|
}));
|
|
|
|
public async Task<Result<TValue>> GetAsync<TValue>(string key) where TValue : class =>
|
|
await Result.Try((Func<Task<Result<TValue>>>)(async () =>
|
|
{
|
|
var retrieval = await storage.GetAsync<TValue>(key);
|
|
|
|
return Result.FailIf(!retrieval.Success && retrieval.Value is null,
|
|
NotFoundError.Create($"Could not find object by key {key}"))
|
|
.ToResult(retrieval.Value!);
|
|
}));
|
|
} |