using back.Options; namespace back.ServicesExtensions; public static partial class ServicesExtensions { private static IConfiguration ConfigureOptions(this IServiceCollection services) { IConfiguration config = services.BuildServiceProvider().GetRequiredService(); string? baseDirectory = null; services.Configure(config.GetSection(nameof(Databases))); services.Configure(DatabaseConfig.DataStorage, config.GetSection(DatabaseConfig.DataStorage)); services.Configure(DatabaseConfig.BlobStorage, config.GetSection(DatabaseConfig.BlobStorage)); services.PostConfigure(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.DataStorage, config => { PostConfigureDatabaseConfig(config, baseDirectory); }); services.PostConfigure(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 ); } } } }