Files
mmorales.photo/back/ServicesExtensions/Options.cs

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
);
}
}
}
}