void.cat/VoidCat/Services/Files/FileStorageStartup.cs

51 lines
1.8 KiB
C#
Raw Normal View History

2022-03-01 16:48:42 +00:00
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<IFileInfoManager, FileInfoManager>();
services.AddTransient<FileStoreFactory>();
2022-03-01 16:48:42 +00:00
if (settings.CloudStorage != default)
{
// S3 storage
foreach (var s3 in settings.CloudStorage.S3 ?? Array.Empty<S3BlobConfig>())
2022-03-02 12:09:57 +00:00
{
services.AddTransient<IFileStore>((svc) =>
new S3FileStore(s3, svc.GetRequiredService<IAggregateStatsCollector>(),
svc.GetRequiredService<IFileInfoManager>()));
if (settings.MetadataStore == s3.Name)
{
services.AddSingleton<IFileMetadataStore>((svc) =>
new S3FileMetadataStore(s3, svc.GetRequiredService<ILogger<S3FileMetadataStore>>()));
}
2022-03-02 12:09:57 +00:00
}
2022-03-01 16:48:42 +00:00
}
if (!string.IsNullOrEmpty(settings.Postgres))
2022-06-06 21:51:25 +00:00
{
services.AddTransient<IUserUploadsStore, PostgresUserUploadStore>();
services.AddTransient<IFileStore, LocalDiskFileStore>();
if (settings.MetadataStore == "postgres")
{
services.AddSingleton<IFileMetadataStore, PostgresFileMetadataStore>();
}
2022-06-06 21:51:25 +00:00
}
2022-03-01 16:48:42 +00:00
else
{
services.AddTransient<IUserUploadsStore, CacheUserUploadStore>();
2022-03-01 16:48:42 +00:00
services.AddTransient<IFileStore, LocalDiskFileStore>();
if (settings.MetadataStore == "local-disk")
{
services.AddSingleton<IFileMetadataStore, LocalDiskFileMetadataStore>();
}
2022-03-01 16:48:42 +00:00
}
}
}