using System.Text.Json; using ArcaneLibs.Extensions; using LibMatrix.Interfaces.Services; namespace LibMatrix.Utilities.Bot; public class FileStorageProvider : IStorageProvider { public string TargetPath { get; } /// /// Creates a new instance of . /// /// public FileStorageProvider(string targetPath) { Console.WriteLine($"Initialised FileStorageProvider with path {targetPath}"); TargetPath = targetPath; if (!Directory.Exists(targetPath)) Directory.CreateDirectory(targetPath); } public async Task SaveObjectAsync(string key, T value) => await File.WriteAllTextAsync(Path.Join(TargetPath, key), value?.ToJson()); public async Task LoadObjectAsync(string key) => JsonSerializer.Deserialize(await File.ReadAllTextAsync(Path.Join(TargetPath, key))); public Task ObjectExistsAsync(string key) => Task.FromResult(File.Exists(Path.Join(TargetPath, key))); public Task> GetAllKeysAsync() => Task.FromResult(Directory.GetFiles(TargetPath).Select(Path.GetFileName).ToList()); public Task DeleteObjectAsync(string key) { File.Delete(Path.Join(TargetPath, key)); return Task.CompletedTask; } }