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>();
|
2022-07-25 17:59:32 +00:00
|
|
|
|
services.AddTransient<FileStoreFactory>();
|
2023-01-30 18:35:36 +00:00
|
|
|
|
services.AddTransient<CompressContent>();
|
2023-05-09 13:56:57 +00:00
|
|
|
|
|
2022-03-01 16:48:42 +00:00
|
|
|
|
if (settings.CloudStorage != default)
|
|
|
|
|
{
|
2022-07-25 17:59:32 +00:00
|
|
|
|
// S3 storage
|
|
|
|
|
foreach (var s3 in settings.CloudStorage.S3 ?? Array.Empty<S3BlobConfig>())
|
2022-03-02 12:09:57 +00:00
|
|
|
|
{
|
2022-07-25 17:59:32 +00:00
|
|
|
|
if (settings.MetadataStore == s3.Name)
|
|
|
|
|
{
|
|
|
|
|
services.AddSingleton<IFileMetadataStore>((svc) =>
|
|
|
|
|
new S3FileMetadataStore(s3, svc.GetRequiredService<ILogger<S3FileMetadataStore>>()));
|
|
|
|
|
}
|
2023-05-09 13:56:57 +00:00
|
|
|
|
|
|
|
|
|
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-07-25 17:59:32 +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")
|
2022-07-25 17:59:32 +00:00
|
|
|
|
{
|
2023-05-09 13:56:57 +00:00
|
|
|
|
services.AddTransient<IFileMetadataStore, PostgresFileMetadataStore>();
|
2022-07-25 17:59:32 +00:00
|
|
|
|
}
|
2022-06-06 21:51:25 +00:00
|
|
|
|
}
|
2022-03-01 16:48:42 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
2022-06-13 15:11:58 +00:00
|
|
|
|
services.AddTransient<IUserUploadsStore, CacheUserUploadStore>();
|
2022-03-01 16:48:42 +00:00
|
|
|
|
services.AddTransient<IFileStore, LocalDiskFileStore>();
|
2022-07-25 17:59:32 +00:00
|
|
|
|
if (settings.MetadataStore == "local-disk")
|
|
|
|
|
{
|
|
|
|
|
services.AddSingleton<IFileMetadataStore, LocalDiskFileMetadataStore>();
|
|
|
|
|
}
|
2022-03-01 16:48:42 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2022-07-25 17:59:32 +00:00
|
|
|
|
}
|