73 lines
2.6 KiB
C#
73 lines
2.6 KiB
C#
using back.Options;
|
|
|
|
namespace back.ServicesExtensions;
|
|
|
|
public static partial class ServicesExtensions
|
|
{
|
|
private static IConfiguration ConfigureOptions(this IServiceCollection services)
|
|
{
|
|
IConfiguration config = services.BuildServiceProvider().GetRequiredService<IConfiguration>();
|
|
string? baseDirectory = null;
|
|
|
|
services.Configure<Databases>(config.GetSection(nameof(Databases)));
|
|
services.Configure<DatabaseConfig>(DatabaseConfig.DataStorage, config.GetSection(DatabaseConfig.DataStorage));
|
|
services.Configure<DatabaseConfig>(DatabaseConfig.BlobStorage, config.GetSection(DatabaseConfig.BlobStorage));
|
|
|
|
services.PostConfigure<Databases>(databases =>
|
|
{
|
|
if (databases.BaseDirectory != null && !Directory.Exists(databases.BaseDirectory))
|
|
{
|
|
try
|
|
{
|
|
Directory.CreateDirectory(databases.BaseDirectory);
|
|
Console.WriteLine($"Base directory created at: {databases.BaseDirectory}");
|
|
baseDirectory = databases.BaseDirectory;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new InvalidOperationException(
|
|
$"Failed to create base directory at {databases.BaseDirectory}. " +
|
|
"Please ensure the path is valid and accessible.", ex
|
|
);
|
|
}
|
|
}
|
|
});
|
|
|
|
services.PostConfigure<DatabaseConfig>(DatabaseConfig.DataStorage, config =>
|
|
{
|
|
PostConfigureDatabaseConfig(config, baseDirectory);
|
|
});
|
|
|
|
services.PostConfigure<DatabaseConfig>(DatabaseConfig.BlobStorage, config =>
|
|
{
|
|
PostConfigureDatabaseConfig(config, baseDirectory);
|
|
});
|
|
|
|
return config;
|
|
}
|
|
|
|
private static void PostConfigureDatabaseConfig(DatabaseConfig config, string? baseDirectory)
|
|
{
|
|
if (!string.IsNullOrEmpty(config.SystemContainer))
|
|
{
|
|
var path = config.SystemContainer;
|
|
if (!string.IsNullOrEmpty(baseDirectory))
|
|
{
|
|
path = Path.Combine(baseDirectory, path);
|
|
}
|
|
try
|
|
{
|
|
Directory.CreateDirectory(path);
|
|
Console.WriteLine($"System container for {config.Provider} created at: {path}");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new InvalidOperationException(
|
|
$"Failed to create system container at {path}. " +
|
|
"Please ensure the path is valid and accessible.", ex
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|