using Distribution.Data; using Microsoft.EntityFrameworkCore; namespace Distribution.Features.RecurringExpense; public class RecurringExpenseRepository(AppDBContext context) : IRecurringExpenseRepository { private IQueryable Base() => context.RecurringExpenseTemplates .Include(t => t.Category) .Include(t => t.Warehouse) .Include(t => t.Vendor); public async Task GetByIdAsync(Guid id) => await Base().FirstOrDefaultAsync(t => t.Id == id); public async Task> ListAsync(int page, int pageSize) => await Base() .Where(t => t.IsActive) .OrderBy(t => t.IsPaused).ThenBy(t => t.NextRunDate) .Skip((page - 1) * pageSize) .Take(pageSize) .ToListAsync(); public async Task CountAsync() => await context.RecurringExpenseTemplates.CountAsync(t => t.IsActive); public async Task> ListDueAsync(DateTime asOf) => await Base() .Where(t => t.IsActive && !t.IsPaused && t.NextRunDate <= asOf && (t.EndDate == null || t.EndDate >= asOf)) .ToListAsync(); public async Task AddAsync(Models.RecurringExpenseTemplate entity) => await context.RecurringExpenseTemplates.AddAsync(entity); public void Update(Models.RecurringExpenseTemplate entity) => context.RecurringExpenseTemplates.Update(entity); }