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

54 lines
1.9 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)
{
2022-09-06 21:32:22 +00:00
services.AddTransient<FileInfoManager>();
services.AddTransient<FileStoreFactory>();
2023-01-30 18:35:36 +00:00
services.AddTransient<CompressContent>();
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
{
if (settings.MetadataStore == s3.Name)
{
services.AddSingleton<IFileMetadataStore>((svc) =>
new S3FileMetadataStore(s3, svc.GetRequiredService<ILogger<S3FileMetadataStore>>()));
}
services.AddTransient<IFileStore>((svc) =>
new S3FileStore(s3,
svc.GetRequiredService<IAggregateStatsCollector>(),
svc.GetRequiredService<IFileMetadataStore>(),
svc.GetRequiredService<ICache>()));
2022-03-02 12:09:57 +00:00
}
2022-03-01 16:48:42 +00:00
}
2022-08-28 12:15:50 +00:00
if (settings.HasPostgres())
2022-06-06 21:51:25 +00:00
{
services.AddTransient<IUserUploadsStore, PostgresUserUploadStore>();
services.AddTransient<IFileStore, LocalDiskFileStore>();
2022-08-28 12:15:50 +00:00
if (settings.MetadataStore is "postgres" or "local-disk")
{
services.AddTransient<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
}
}
}