From 84c6c45a0b181c7c97fad59aaa78863302364aa7 Mon Sep 17 00:00:00 2001 From: Elias Jansson Date: Wed, 4 Jun 2025 11:51:08 +0200 Subject: [PATCH] Another attempt --- Aberwyn/Controllers/AdminController.cs | 4 ++-- Aberwyn/Data/ApplicationDbContextFactory.cs | 19 ++++++------------- Aberwyn/Data/MenuService.cs | 11 ++++++++++- Aberwyn/Data/SetupService.cs | 18 ++++++++++++++++++ 4 files changed, 36 insertions(+), 16 deletions(-) diff --git a/Aberwyn/Controllers/AdminController.cs b/Aberwyn/Controllers/AdminController.cs index bbc109c..95f92da 100644 --- a/Aberwyn/Controllers/AdminController.cs +++ b/Aberwyn/Controllers/AdminController.cs @@ -104,7 +104,7 @@ namespace Aberwyn.Controllers [Authorize(Roles = "Admin")] public IActionResult ImportMealsFromProd() { - var prodService = MenuService.CreateWithConfig(_configuration, _env, useProdDb: true); + var prodService = MenuService.CreateWithSetup(_env); var devService = new MenuService(_context); // injicerad context används var prodMeals = prodService.GetMealsDetailed(); @@ -184,7 +184,7 @@ namespace Aberwyn.Controllers public IActionResult ImportBudgetFromProd() { // Hämta connection till produktion - using var prodContext = ApplicationDbContextFactory.CreateWithConfig(_configuration, _env, useProdDb: true); + using var prodContext = ApplicationDbContextFactory.CreateWithConfig(_env, true); // Importera definitioner först var prodCategoryDefs = prodContext.BudgetCategoryDefinitions.ToList(); diff --git a/Aberwyn/Data/ApplicationDbContextFactory.cs b/Aberwyn/Data/ApplicationDbContextFactory.cs index 284459f..7122120 100644 --- a/Aberwyn/Data/ApplicationDbContextFactory.cs +++ b/Aberwyn/Data/ApplicationDbContextFactory.cs @@ -5,6 +5,7 @@ using Microsoft.Extensions.Configuration; using System; using System.IO; using System.Text.Json; +using static Aberwyn.Data.SetupService; namespace Aberwyn.Data { @@ -30,26 +31,18 @@ namespace Aberwyn.Data return new ApplicationDbContext(optionsBuilder.Options); } - public static ApplicationDbContext CreateWithConfig(IConfiguration config, IHostEnvironment env, bool useProdDb = false) + public static ApplicationDbContext CreateWithConfig(IHostEnvironment env, bool useProdDb = false) { - var setup = LoadSetup(); - - var csBuilder = new MySqlConnector.MySqlConnectionStringBuilder - { - Server = setup.DbHost, - Port = (uint)setup.DbPort, - Database = setup.DbName, - UserID = setup.DbUser, - Password = setup.DbPassword, - AllowUserVariables = true - }; + var setup = SetupLoader.Load(env); + var connStr = SetupLoader.GetConnectionString(setup); var optionsBuilder = new DbContextOptionsBuilder(); - optionsBuilder.UseMySql(csBuilder.ConnectionString, new MySqlServerVersion(new Version(8, 0, 36))); + optionsBuilder.UseMySql(connStr, new MySqlServerVersion(new Version(8, 0, 36))); return new ApplicationDbContext(optionsBuilder.Options); } + private static SetupSettings LoadSetup() { var basePath = Directory.GetCurrentDirectory(); diff --git a/Aberwyn/Data/MenuService.cs b/Aberwyn/Data/MenuService.cs index 334bfd0..dbecfd2 100644 --- a/Aberwyn/Data/MenuService.cs +++ b/Aberwyn/Data/MenuService.cs @@ -2,7 +2,7 @@ using Aberwyn.Models; using Microsoft.EntityFrameworkCore; using System.Globalization; - +using static Aberwyn.Data.SetupService; namespace Aberwyn.Data { @@ -47,6 +47,15 @@ public class MenuService var context = new ApplicationDbContext(builder.Options); return new MenuService(context); } + public static MenuService CreateWithSetup(IHostEnvironment env) + { + var setup = SetupLoader.Load(env); + var connStr = SetupLoader.GetConnectionString(setup); + var builder = new DbContextOptionsBuilder(); + builder.UseMySql(connStr, ServerVersion.AutoDetect(connStr)); + var context = new ApplicationDbContext(builder.Options); + return new MenuService(context); + } public void UpdateWeeklyMenu(MenuViewModel model) { diff --git a/Aberwyn/Data/SetupService.cs b/Aberwyn/Data/SetupService.cs index 0166182..282e4f5 100644 --- a/Aberwyn/Data/SetupService.cs +++ b/Aberwyn/Data/SetupService.cs @@ -3,6 +3,9 @@ using System.Text.Json; using Microsoft.Extensions.DependencyInjection; using Microsoft.EntityFrameworkCore; using Microsoft.AspNetCore.Identity; +using System.IO; +using System.Text.Json; +using Microsoft.Extensions.Hosting; namespace Aberwyn.Data { @@ -50,6 +53,21 @@ namespace Aberwyn.Data return services.BuildServiceProvider(); } + public static class SetupLoader + { + public static SetupSettings Load(IHostEnvironment env) + { + var path = Path.Combine(env.ContentRootPath, "infrastructure", "setup.json"); + var json = File.ReadAllText(path); + return JsonSerializer.Deserialize(json)!; + } + + public static string GetConnectionString(SetupSettings setup) + { + return $"server={setup.DbHost};port={setup.DbPort};database={setup.DbName};user={setup.DbUser};password={setup.DbPassword}"; + } + } + } }