using VoidCat.Model; using VoidCat.Services.Abstractions; using VoidCat.Services.Users; namespace VoidCat.Services.Files; public static class FileStorageStartup { public static void AddStorage(this IServiceCollection services, VoidSettings settings) { services.AddTransient(); services.AddTransient(); services.AddTransient(); if (settings.CloudStorage != default) { // S3 storage foreach (var s3 in settings.CloudStorage.S3 ?? Array.Empty()) { if (settings.MetadataStore == s3.Name) { services.AddSingleton((svc) => new S3FileMetadataStore(s3, svc.GetRequiredService>())); } services.AddTransient((svc) => new S3FileStore(s3, svc.GetRequiredService(), svc.GetRequiredService(), svc.GetRequiredService())); } } if (settings.HasPostgres()) { services.AddTransient(); services.AddTransient(); if (settings.MetadataStore is "postgres" or "local-disk") { services.AddTransient(); } } else { services.AddTransient(); services.AddTransient(); if (settings.MetadataStore == "local-disk") { services.AddSingleton(); } } } }