65 lines
2.4 KiB
C#
65 lines
2.4 KiB
C#
using Microsoft.EntityFrameworkCore;
|
||
using PARR.DAL.Context;
|
||
using PARR.DAL.Contracts;
|
||
using PARR.DAL.Models.Schedule;
|
||
using PARR.DAL.Services.Interfaces.Schedule;
|
||
|
||
namespace PARR.DAL.Services.Implementations.Schedule
|
||
{
|
||
internal sealed class ScheduleResponseAreaTimeOffsetService : IScheduleResponseAreaTimeOffsetService
|
||
{
|
||
private readonly IReadOnlyDictionary<string, ScheduleResponseAreaTimeOffset> offsetList;
|
||
/// <summary>
|
||
/// ЗО по умолчанию
|
||
/// </summary>
|
||
private readonly string defaultResponseArea;
|
||
/// <summary>
|
||
/// Настройки, если не нашли в offsetList
|
||
/// </summary>
|
||
private readonly ScheduleResponseAreaTimeOffset defaultOffset;
|
||
|
||
public ScheduleResponseAreaTimeOffsetService(DataContext dataContext, SettingsFromDb settingsFromDb)
|
||
{
|
||
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)
|
||
};
|
||
}
|
||
|
||
|
||
public IReadOnlyDictionary<string, ScheduleResponseAreaTimeOffset> GetAll => offsetList;
|
||
|
||
public ScheduleResponseAreaTimeOffset GetDefault => GetByResponseAreaOrDefault(defaultResponseArea);
|
||
|
||
public ScheduleResponseAreaTimeOffset GetByResponseAreaOrDefault(string responseArea)
|
||
{
|
||
return offsetList.TryGetValue(responseArea, out var value) ? value : defaultOffset;
|
||
}
|
||
|
||
|
||
//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;
|
||
//}
|
||
}
|
||
}
|