using FoodsharingSiegen.Server.Data; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration.Json; namespace FoodsharingSiegen.Server { public static class Extensions { #region Public Method AddDatabaseContext /// /// Configures the application's data access layer by setting up and registering a database context using SQLite. /// Ensures the database file is stored within the application's base directory under a "data" folder. /// /// An instance of used to configure the application's services and resources. public static void AddDatabaseContext(this WebApplicationBuilder builder) { var dataDirectory = Path.Combine(AppContext.BaseDirectory, "data"); if (!Directory.Exists(dataDirectory)) Directory.CreateDirectory(dataDirectory); var dbPath = Path.Combine(dataDirectory, "app.db"); var connectionString = $"Data Source={dbPath}"; builder.Services.AddDbContextFactory(options => options.UseSqlite(connectionString)); } #endregion #region Public Method LoadAppSettings /// /// Loads application settings from JSON configuration files located in a designated "config" directory. /// Clears existing JSON configuration files and ensures settings from the specified files are applied. /// /// An instance of used to configure and load application settings. public static void LoadAppSettings(this WebApplicationBuilder builder) { // Clear loaded json files foreach (var configurationSource in builder.Configuration.Sources.Where(x => x is JsonConfigurationSource).ToList()) builder.Configuration.Sources.Remove(configurationSource); // Define the directory where your appsettings files reside var configDir = Path.Combine(builder.Environment.ContentRootPath, "config"); // Check if the directory exists if (Directory.Exists(configDir)) { // Get all JSON files that start with "appsettings" in the directory and its subdirectories var configFiles = Directory.EnumerateFiles(configDir, "appsettings*.json", SearchOption.AllDirectories); // Add each file to the configuration foreach (var file in configFiles) builder.Configuration.AddJsonFile(file, true, true); } } #endregion } }