Files
monorepo/LCU.API.Internal.LoanRate/LCU.API.Internal.LoanRateLib/Repositories/RateSheetRepository.cs
T
2026-04-07 14:21:04 -05:00

84 lines
4.2 KiB
C#

using LCU.API.Internal.LoanRateLib.Configurations;
using LCU.API.Internal.LoanRateLib.Extensions.Queryables;
using LCU.API.Internal.LoanRateLib.Persistence;
using LCU.Library.Internal.LcuCaching.Services;
using LCU.Library.Internal.LcuClassPatterns.Crud.Repositories;
using LCU.Library.Internal.LoanRateModels.Enums;
using Microsoft.EntityFrameworkCore;
namespace LCU.API.Internal.LoanRateLib.Repositories;
public class RateSheetRepository : CrudRepository<RateSheet>, IRateSheetRepository
{
private readonly AppDbContext _context;
private readonly RateSheetCacheConfiguration _rateSheetCacheConfiguration;
private readonly ICacheService _cacheService;
public RateSheetRepository(AppDbContext context,
RateSheetCacheConfiguration rateSheetCacheConfiguration,
ICacheService cacheService) : base(context)
{
_context = context;
_rateSheetCacheConfiguration = rateSheetCacheConfiguration;
_cacheService = cacheService;
}
public async Task<IEnumerable<RateSheet>> FindIncludeAllAsync()
{
return await _context.RateSheets.IncludeAll().ToListAsync();
}
public async Task<IEnumerable<RateSheet>> FindIncludeRateSheetCellsAsync()
{
return await _context.RateSheets.Include(rateSheet => rateSheet.RateSheetCells).ToListAsync();
}
public async Task<IEnumerable<Rate>?> FindRatesByDateAndRateType(DateTime date, RateTypes rateType)
{
return (await FindCacheAsync()).FirstOrDefault(rateSheet => rateSheet.RateType == rateType)?
.Rates.Where(rate =>
date >= rate.RateStartDate
&& (rate.RateEndDate == null || date < rate.RateEndDate));
}
public async Task<RateSheet?> FindByDateAndRateType(DateTime date, RateTypes rateType)
{
return await _context.RateSheets.Include(rateSheet => rateSheet.Rates)
.Include(rateSheet => rateSheet.RateSheetCells)
.Where(rateSheet => rateSheet.RateType == rateType)
.Select(rateSheet =>
new RateSheet
{
RateSheetId = rateSheet.RateSheetId,
RateType = rateSheet.RateType,
RateSheetCells = rateSheet.RateSheetCells,
Rates = _context.Rates.Where(rate => rate.RateSheetId == rateSheet.RateSheetId
&& date >= rate.RateStartDate
&& (rate.RateEndDate == null || date < rate.RateEndDate)).ToList(),
CreatedBy = rateSheet.CreatedBy,
TimeCreated = rateSheet.TimeCreated
})
.FirstOrDefaultAsync();
}
public async Task<IEnumerable<Rate>?> FindRatesByRateType(RateTypes rateType)
{
return (await FindCacheAsync()).FirstOrDefault(rateSheet => rateSheet.RateType == rateType)?.Rates;
}
public async Task<IEnumerable<int>?> FindRateSheetIdsByRateType(RateTypes rateType)
{
return await _context.RateSheets.Where(rateSheet => rateSheet.RateType == rateType)
.Select(rateSheet => rateSheet.RateSheetId)
.ToListAsync();
}
public async Task<IEnumerable<RateSheet>> FindCacheAsync()
{
return await _cacheService.FindCacheAsync(FindIncludeAllAsync,
_rateSheetCacheConfiguration.CacheName,
_rateSheetCacheConfiguration.ExpirationMinutes);
}
public void ClearCache() => _cacheService.ClearCache(_rateSheetCacheConfiguration.CacheName);
}