77 lines
2.9 KiB
C#
77 lines
2.9 KiB
C#
using back.healthchecks.Options;
|
|
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.Configure<MailServerOptions>(config.GetSection(nameof(MailServerOptions)));
|
|
|
|
services.Configure<HealthChecksConfigs>(HealthChecksConfigs.Sqlite, config.GetSection(HealthChecksConfigs.Sqlite));
|
|
|
|
services.PostConfigure<Databases>(databases =>
|
|
{
|
|
if (!string.IsNullOrEmpty(databases.BaseDirectory) && !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
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|