Files
IBKRTrader/Core/Budget/BudgetService.cs
T
RichardandClaude Opus 4.8 ebeb035e92 Initial commit: IBKRTrader
.NET WinForms-Anwendung (Core, Modules/CongressTrading, UI).
Enthaelt .gitignore und settings.example.json als Konfigurationsvorlage.
Echte settings.json mit Zugangsdaten ist bewusst ausgeschlossen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-26 18:19:47 +02:00

49 lines
1.4 KiB
C#

using IBKRTrader.Core.Database;
using IBKRTrader.Core.Logging;
namespace IBKRTrader.Core.Budget;
/// <summary>
/// Verwaltet das Budget pro Modul.
/// Liest/schreibt core_budget.
/// </summary>
public class BudgetService
{
private readonly DatabaseService _db;
private readonly LoggingService _logger;
public BudgetService(DatabaseService db, LoggingService logger)
{
_db = db;
_logger = logger;
}
public async Task<decimal> GetAvailableBudgetAsync(string module)
{
var row = await _db.QueryFirstOrDefaultAsync<dynamic>(
"SELECT total_budget, used_budget FROM `core_budget` WHERE module = @module",
new { module });
if (row == null) return 0;
return (decimal)row.total_budget - (decimal)row.used_budget;
}
public async Task ReserveBudgetAsync(string module, decimal amount)
{
await _db.ExecuteAsync(
@"INSERT INTO `core_budget` (module, used_budget)
VALUES (@module, @amount)
ON DUPLICATE KEY UPDATE used_budget = used_budget + @amount",
new { module, amount });
}
public async Task ReleaseBudgetAsync(string module, decimal amount)
{
await _db.ExecuteAsync(
@"UPDATE `core_budget`
SET used_budget = GREATEST(0, used_budget - @amount)
WHERE module = @module",
new { module, amount });
}
}