Files
FoodsharingOnboarding/FoodsharingSiegen.Server/Extensions.cs
Andre Beging 48db8db8ae net9 Update
2025-03-27 05:48:39 +01:00

59 lines
2.7 KiB
C#

using FoodsharingSiegen.Server.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration.Json;
namespace FoodsharingSiegen.Server
{
public static class Extensions
{
#region Public Method AddDatabaseContext
/// <summary>
/// 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.
/// </summary>
/// <param name="builder">An instance of <see cref="WebApplicationBuilder" /> used to configure the application's services and resources.</param>
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<FsContext>(options =>
options.UseSqlite(connectionString));
}
#endregion
#region Public Method LoadAppSettings
/// <summary>
/// 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.
/// </summary>
/// <param name="builder">An instance of <see cref="WebApplicationBuilder" /> used to configure and load application settings.</param>
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
}
}