namespace Repository; public interface IBudgetRepository : IBaseRepository { Task GetCurrentAmountAsync(BudgetRecord budget, DateTime startDate, DateTime endDate); } public class BudgetRepository(IFreeSql freeSql) : BaseRepository(freeSql), IBudgetRepository { public async Task GetCurrentAmountAsync(BudgetRecord budget, DateTime startDate, DateTime endDate) { var query = FreeSql.Select() .Where(t => t.OccurredAt >= startDate && t.OccurredAt <= endDate); if (!string.IsNullOrEmpty(budget.SelectedCategories)) { var categoryList = budget.SelectedCategories.Split(','); query = query.Where(t => categoryList.Contains(t.Classify)); } if (budget.Category == BudgetCategory.Expense) { query = query.Where(t => t.Type == TransactionType.Expense); } else if (budget.Category == BudgetCategory.Income) { query = query.Where(t => t.Type == TransactionType.Income); } else if (budget.Category == BudgetCategory.Savings) { query = query.Where(t => t.Type == TransactionType.None); } return await query.SumAsync(t => t.Amount); } }