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();
}
}