84 lines
4.2 KiB
C#
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);
|
|
}
|