feat(api, dal): в SettingsFromDb добавлен параметр WeekendCacheTtl - время кэша для выходных. Доработан сервис WeekendDayService с учетом кэша. В апи добавлен контроллер по управлению выходными днями WeekendController

This commit is contained in:
Mikhail Trubnikov
2024-09-17 11:55:55 +10:00
parent 251e3a20b0
commit 2a1c4ac4a8
16 changed files with 3348 additions and 24 deletions

View File

@@ -2,10 +2,10 @@
using Microsoft.Extensions.Logging;
using PARR.DAL.CacheServices;
using PARR.DAL.Context;
using PARR.DAL.Contracts;
using PARR.DAL.Models;
using PARR.DAL.Services.Abstracts;
using PARR.DAL.Services.Interfaces;
using PARR.DAL.Settings;
namespace PARR.DAL.Services.Implementations
{
@@ -14,7 +14,7 @@ namespace PARR.DAL.Services.Implementations
private readonly DataContext dataContext;
private readonly ILogger<WeekendDayService> logger;
private readonly IRedisCacheService redisCacheService;
private readonly WeekendCacheSettings weekendCacheSettings;
private readonly SettingsFromDb settings;
protected override DbSet<WeekendDay> EntitySet => dataContext.WeekendDays;
@@ -24,13 +24,13 @@ namespace PARR.DAL.Services.Implementations
DataContext dataContext,
ILogger<WeekendDayService> logger,
IRedisCacheService redisCacheService,
WeekendCacheSettings weekendCacheSettings
SettingsFromDb settings
) : base(logger)
{
this.dataContext = dataContext;
this.logger = logger;
this.redisCacheService = redisCacheService;
this.weekendCacheSettings = weekendCacheSettings;
this.settings = settings;
}
@@ -40,7 +40,6 @@ namespace PARR.DAL.Services.Implementations
}
public async Task<bool> IsWorkDayAsync(DateOnly date, bool useCache = false)
{
if (useCache)
@@ -62,13 +61,45 @@ namespace PARR.DAL.Services.Implementations
//сохраняем всегда в КЭШ значение выходного и рабочего дня
var cacheKey = isWorkday ? GetWorkDayKey(date) : GetWeekendKey(date);
//TODO:!!! Тут настройки вынести в DB settings
await redisCacheService.SetCachedDataAsync(cacheKey, date, weekendCacheSettings.WeekendTtl);
await redisCacheService.SetCachedDataAsync(cacheKey, date, settings.WeekendCacheTtl);
return isWorkday;
}
public override async Task<bool> CreateAsync(WeekendDay obj)
{
// При создании выходного дня, смотрим, был ли он в кэше, если был, удаляем
await redisCacheService.DeleteCachedDataAsync(GetWeekendKey(obj.Date));
await redisCacheService.DeleteCachedDataAsync(GetWorkDayKey(obj.Date));
return await base.CreateAsync(obj);
}
public override bool Delete(WeekendDay obj)
{
// При создании выходного дня, смотрим, был ли он в кэше, если был, удаляем
redisCacheService.DeleteCachedData(GetWeekendKey(obj.Date));
redisCacheService.DeleteCachedData(GetWorkDayKey(obj.Date));
return base.Delete(obj);
}
public override async Task<bool> DeleteAsync(Guid id)
{
var exist = await GetAsync(id);
if (exist == null)
{
logger.LogError($"Ошибка при удалении из БД. Не найдена запись в БД с id: {id}");
return false;
}
return Delete(exist);
}
private string GetWeekendKey(DateOnly day)
{
return $"weekend_{day.ToString("yyyy-MM-dd")}";