using IBKRTrader.Core.Logging; using IBKRTrader.Core.Persistence.Ef; using IBKRTrader.Core.Persistence.Entities; using Microsoft.EntityFrameworkCore; namespace IBKRTrader.Core.Budget; /// /// Verwaltet das Budget pro Modul (Tabelle core_budget) via EF Core. /// public class BudgetService { private readonly IDbContextFactory _dbf; private readonly LoggingService _logger; public BudgetService(IDbContextFactory dbf, LoggingService logger) { _dbf = dbf; _logger = logger; } public async Task ReserveBudgetAsync(string module, decimal amount) { await using var db = await _dbf.CreateDbContextAsync(); var b = await db.Budgets.FindAsync(module); if (b is null) { db.Budgets.Add(new CoreBudget { Module = module, UsedBudget = amount, UpdatedAt = DateTime.UtcNow }); } else { b.UsedBudget += amount; b.UpdatedAt = DateTime.UtcNow; } await db.SaveChangesAsync(); } public async Task ReleaseBudgetAsync(string module, decimal amount) { await using var db = await _dbf.CreateDbContextAsync(); var b = await db.Budgets.FindAsync(module); if (b is null) return; b.UsedBudget = Math.Max(0m, b.UsedBudget - amount); b.UpdatedAt = DateTime.UtcNow; await db.SaveChangesAsync(); } }