using General_Ledger_Service.Infra; using General_Ledger_Service.Interfaces.Repositories; using General_Ledger_Service.Models; using Microsoft.EntityFrameworkCore; namespace General_Ledger_Service.Repositories { public class BankRepository(AppDBContext context) : IBankRepository { private readonly AppDBContext _context = context; public Task GetByIdAsync(long bankAccountId) => RepositoryHelpers.GetByIdAsync(_context.BankAccounts, bankAccountId); public Task AddAsync(BankAccount bankAccount) => RepositoryHelpers.AddAsync(_context.BankAccounts, bankAccount); public async Task> GetAllAsync() => await _context.BankAccounts.Include(b => b.GlAccount).OrderBy(b => b.AccountName).ToListAsync(); public Task GetStatementLineByIdAsync(long stmtLineId) => RepositoryHelpers.GetByIdAsync(_context.BankStatementLines, stmtLineId); public async Task AddStatementLinesAsync(IEnumerable lines) => await _context.BankStatementLines.AddRangeAsync(lines); public Task AddCashAccountAsync(CashAccount cashAccount) => RepositoryHelpers.AddAsync(_context.CashAccounts, cashAccount); public async Task> GetAllCashAccountsAsync() => await _context.CashAccounts.Include(c => c.CashAccountType).Include(c => c.GlAccount).OrderBy(c => c.AccountName).ToListAsync(); public async Task GetCashAccountByIdAsync(long cashAccountId) => await _context.CashAccounts.Include(c => c.CashAccountType).Include(c => c.GlAccount) .FirstOrDefaultAsync(c => c.CashAccountId == cashAccountId); public async Task AnyDefaultCashAccountAsync() => await _context.CashAccounts.AnyAsync(c => c.IsDefault); public void RemoveCashAccount(CashAccount cashAccount) => _context.CashAccounts.Remove(cashAccount); public async Task CashAccountNumberExistsAsync(string accountNumber) => await _context.CashAccounts.AnyAsync(c => c.AccountNumber == accountNumber); public async Task GetCashAccountTypeByNameAsync(string name) => await _context.CashAccountTypes.FirstOrDefaultAsync(t => t.Name.ToLower() == name.ToLower()); public Task AddCashAccountTypeAsync(CashAccountType cashAccountType) => RepositoryHelpers.AddAsync(_context.CashAccountTypes, cashAccountType); public async Task> GetAllCashAccountTypesAsync() => await _context.CashAccountTypes.OrderBy(t => t.Name).ToListAsync(); } }