using Microsoft.EntityFrameworkCore; using LCU.API.Internal.LoanRateLib.Persistence; using LCU.Library.Internal.LoanRateModels.Enums; namespace LCU.API.Internal.LoanRateLib.Repositories; public class RateEvaluationRepository : BaseRepository, IRateEvaluationRepository { public IRateRepository _rateRepository; public RateEvaluationRepository(AppDbContext context, IRateRepository rateRepository) : base(context) { _rateRepository = rateRepository; } public async Task?> FindAsync() { return await _context.RateEvaluations.ToListAsync(); } public async Task FindByIdAsync(int id) { return await _context.RateEvaluations.FirstOrDefaultAsync(rateEvaluation => rateEvaluation.RateEvaluationId == id); } public async Task?> FindRangeByIdAsync(List ids) { return await _context.RateEvaluations .Where(rateEvaluation => ids.Contains(rateEvaluation.RateEvaluationId)) .ToListAsync(); } public async Task?> FindRangeByEvaluationDetailIdAsync(int evaluationDetailId) { return await _context.RateEvaluations .Where(rateEvaluation => rateEvaluation.EvaluationDetailId == evaluationDetailId) .ToListAsync(); } public async Task?> FindByRateSheetIdsAsync(List rateSheetIds) { return (await _rateRepository.FindCacheAsync()) .Where(rate => rateSheetIds.Contains(rate.RateSheetId)) .SelectMany(rate => rate.RateEvaluations); } public async Task AddAsync(RateEvaluation rateEvaluation) { return (await _context.RateEvaluations.AddAsync(rateEvaluation)).Entity; } public async Task AddRangeAsync(IEnumerable rateEvaluations) { await _context.RateEvaluations.AddRangeAsync(rateEvaluations); } public void UpdateRange(IEnumerable rateEvaluations) { _context.RateEvaluations.UpdateRange(rateEvaluations); } public void Remove(RateEvaluation rateEvaluation) { _context.RateEvaluations.Remove(rateEvaluation); } public void RemoveRange(IEnumerable rateEvaluations) { _context.RateEvaluations.RemoveRange(rateEvaluations); } public async Task CountByEvaluationDetailIdAsync(int evaluationDetailId) { return await _context.RateEvaluations .Where(rateEvaluation => rateEvaluation.EvaluationDetailId == evaluationDetailId) .Select(rateEvaluation => rateEvaluation.RateId) .Distinct() .CountAsync(); } }