Adding
This commit is contained in:
+83
@@ -0,0 +1,83 @@
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user