2026-01-30 10:40:55 +10:00
using Microsoft.EntityFrameworkCore ;
2026-02-12 16:15:36 +10:00
using Microsoft.Extensions.Logging ;
2026-04-30 10:35:31 +10:00
using PARR.Core.Repositories.Interfaces.Schedule ;
2026-01-30 10:40:55 +10:00
using PARR.DAL.Context ;
2026-04-30 10:35:31 +10:00
using PARR.Domain.Entities.Schedule ;
2026-05-04 11:55:07 +10:00
using PARR.Domain.Settings ;
2026-01-30 10:40:55 +10:00
2026-04-30 10:35:31 +10:00
namespace PARR.DAL.Repositories.Schedule
2026-01-30 10:40:55 +10:00
{
2026-04-30 10:35:31 +10:00
internal sealed class ScheduleResponseAreaTimeOffsetRepository : IScheduleResponseAreaTimeOffsetRepository
2026-01-30 10:40:55 +10:00
{
2026-02-03 16:15:19 +10:00
private readonly IReadOnlyDictionary < string , ScheduleResponseAreaTimeOffset > offsetList ;
2026-04-14 09:56:31 +10:00
2026-02-03 16:15:19 +10:00
/// <summary>
/// З О по умолчанию
/// </summary>
private readonly string defaultResponseArea ;
2026-04-14 09:56:31 +10:00
2026-02-03 16:15:19 +10:00
/// <summary>
/// Настройки, если не нашли в offsetList
/// </summary>
private readonly ScheduleResponseAreaTimeOffset defaultOffset ;
2026-04-30 10:35:31 +10:00
private readonly ILogger < ScheduleResponseAreaTimeOffsetRepository > logger ;
2026-01-30 10:40:55 +10:00
2026-04-30 10:35:31 +10:00
public ScheduleResponseAreaTimeOffsetRepository ( DataContext dataContext , SettingsFromDb settingsFromDb , ILogger < ScheduleResponseAreaTimeOffsetRepository > logger )
2026-01-30 10:40:55 +10:00
{
2026-02-03 16:15:19 +10:00
offsetList = dataContext . ScheduleResponseAreaTimeOffsets
. AsNoTracking ( )
. ToDictionary ( t = > t . ResponseArea , t = > t , StringComparer . OrdinalIgnoreCase ) ;
if ( string . IsNullOrEmpty ( settingsFromDb . DefaultResponseAreaToTimeOffset ) )
defaultResponseArea = "17-М С К " ;
else
defaultResponseArea = settingsFromDb . DefaultResponseAreaToTimeOffset ;
defaultOffset = new ScheduleResponseAreaTimeOffset
{
ResponseArea = "17-М С К " ,
EsppValue = "" ,
UtcTimeOffset = new TimeSpan ( 3 , 0 , 0 )
} ;
2026-02-12 16:15:36 +10:00
this . logger = logger ;
2026-01-30 10:40:55 +10:00
}
2026-02-03 16:15:19 +10:00
public IReadOnlyDictionary < string , ScheduleResponseAreaTimeOffset > GetAll = > offsetList ;
public ScheduleResponseAreaTimeOffset GetDefault = > GetByResponseAreaOrDefault ( defaultResponseArea ) ;
public ScheduleResponseAreaTimeOffset GetByResponseAreaOrDefault ( string responseArea )
2026-01-30 10:40:55 +10:00
{
2026-02-12 16:15:36 +10:00
offsetList . TryGetValue ( responseArea , out var value ) ;
if ( value ! = null )
{
logger . LogDebug ( "Получил часовой пояс по З О '{responseArea}', esppValue: {EsppValue}, utcTimeOffset: {utcTimeOffset}" , responseArea , value . EsppValue , value . UtcTimeOffset ) ;
return value ;
}
else
{
logger . LogWarning ( "Н е смог получить часовой пояс по З О '{responseArea}', вернул часово пояс по умолчанию: name: {name}, esppValue: {EsppValue}, utcTimeOffset: {utcTimeOffset}" ,
responseArea , defaultOffset . ResponseArea , defaultOffset . EsppValue , defaultOffset . UtcTimeOffset ) ;
return defaultOffset ;
}
//return offsetList.TryGetValue(responseArea, out var value) ? value : defaultOffset;
2026-01-30 10:40:55 +10:00
}
2026-02-03 16:15:19 +10:00
//public IQueryable<ScheduleResponseAreaTimeOffset> Get()
//{
// return dataContext.ScheduleResponseAreaTimeOffsets;
//}
//public async Task<string?> GetTimeOffsetByResponseAreaAsync(string responseArea)
//{
// var result = await dataContext.ScheduleResponseAreaTimeOffsets.FirstOrDefaultAsync(t => t.ResponseArea == responseArea);
// return result != null ? result.TimeOffset : null;
//}
2026-01-30 10:40:55 +10:00
}
}