From 6bce085fef51fb9515b8a68c33f7e36110b6d436 Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Wed, 4 Feb 2026 09:50:30 +1000 Subject: [PATCH] =?UTF-8?q?feat(api):=20templateResponse=20-=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B8=D0=BD?= =?UTF-8?q?=D1=84=D0=B0=20=D0=BE=20=D1=87=D0=B0=D1=81=D0=BE=D0=B2=D0=BE?= =?UTF-8?q?=D0=BC=20=D0=BF=D0=BE=D1=8F=D1=81=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ScheduleResponseAreaTimeOffsetResponse.cs | 11 +++++++++ .../V1/Responses/TemplateResponse.cs | 8 ++++--- PARR.API/Controllers/V1/TemplateController.cs | 24 +++++++++++++++---- .../DomainToResponseProfile.cs | 5 ++++ 4 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 PARR.API/Contracts/V1/Responses/ScheduleResponseAreaTimeOffsetResponse.cs diff --git a/PARR.API/Contracts/V1/Responses/ScheduleResponseAreaTimeOffsetResponse.cs b/PARR.API/Contracts/V1/Responses/ScheduleResponseAreaTimeOffsetResponse.cs new file mode 100644 index 00000000..8626c502 --- /dev/null +++ b/PARR.API/Contracts/V1/Responses/ScheduleResponseAreaTimeOffsetResponse.cs @@ -0,0 +1,11 @@ +namespace PARR.API.Contracts.V1.Responses +{ + public class ScheduleResponseAreaTimeOffsetResponse + { + public required string ResponseArea { get; set; } + + public required string EsppValue { get; set; } + + public TimeSpan UtcTimeOffset { get; set; } + } +} diff --git a/PARR.API/Contracts/V1/Responses/TemplateResponse.cs b/PARR.API/Contracts/V1/Responses/TemplateResponse.cs index 415e8892..f210efc2 100644 --- a/PARR.API/Contracts/V1/Responses/TemplateResponse.cs +++ b/PARR.API/Contracts/V1/Responses/TemplateResponse.cs @@ -17,7 +17,7 @@ public DateTimeOffset NextRun { get; set; } /// - /// NextRun с учетом ЗО + /// NextRun с учетом ЗО (локальное время по ЗО, не UTC) /// public DateTimeOffset? NextRunResponseAreaInLocal { get; set; } @@ -26,12 +26,12 @@ /// /// Рабочая группа (формируется из шорткода) /// - public string? WorkGroup { get; set; } + public string? WorkGroup { get; set; } /// /// ЗО, формируется из шорткода /// - public string? ResponseArea { get; set; } + public string? ResponseArea { get; set; } public UnitWithAttributesResponse? Unit { get; set; } @@ -44,6 +44,8 @@ public int OrderCount { get; set; } public bool IsAutoDistributionEnabled { get; set; } + + public ScheduleResponseAreaTimeOffsetResponse? Timezone { get; set; } } diff --git a/PARR.API/Controllers/V1/TemplateController.cs b/PARR.API/Controllers/V1/TemplateController.cs index 885037e4..51f0ee71 100644 --- a/PARR.API/Controllers/V1/TemplateController.cs +++ b/PARR.API/Controllers/V1/TemplateController.cs @@ -19,6 +19,7 @@ using PARR.DAL.DomainServices.Shortcodes; using PARR.DAL.Models; using PARR.DAL.NextRunServices; using PARR.DAL.Services.Interfaces; +using PARR.DAL.Services.Interfaces.Schedule; namespace PARR.API.Controllers.V1 { @@ -36,6 +37,8 @@ namespace PARR.API.Controllers.V1 private readonly IShortcodesService shortcodesService; private readonly IOrderService orderService; private readonly INextRunService nextRunService; + private readonly SettingsFromDb settingsFromDb; + private readonly IScheduleResponseAreaTimeOffsetService scheduleResponseAreaTimeOffsetService; public TemplateController( IMapper mapper, @@ -45,7 +48,9 @@ namespace PARR.API.Controllers.V1 ILogger logger, IShortcodesService shortcodesService, IOrderService orderService, - INextRunService nextRunService + INextRunService nextRunService, + SettingsFromDb settingsFromDb, + IScheduleResponseAreaTimeOffsetService scheduleResponseAreaTimeOffsetService ) { this.mapper = mapper; @@ -56,6 +61,8 @@ namespace PARR.API.Controllers.V1 this.shortcodesService = shortcodesService; this.orderService = orderService; this.nextRunService = nextRunService; + this.settingsFromDb = settingsFromDb; + this.scheduleResponseAreaTimeOffsetService = scheduleResponseAreaTimeOffsetService; } @@ -337,9 +344,18 @@ namespace PARR.API.Controllers.V1 /// private void FillNextRunWithResponseAreaInLocal(TemplateBaseResponse response) { - response.NextRunResponseAreaInLocal = response.IsResponseAreaTimezone && !string.IsNullOrEmpty(response.ResponseArea) - ? nextRunService.GetNextRunWithResponseAreaOffset(response.NextRun, response.ResponseArea) - : response.NextRun; + var responseArea = response.IsResponseAreaTimezone && !string.IsNullOrEmpty(response.ResponseArea) + ? response.ResponseArea + : settingsFromDb.DefaultResponseAreaToTimeOffset; + + //response.NextRunResponseAreaInLocal = response.IsResponseAreaTimezone && !string.IsNullOrEmpty(response.ResponseArea) + // ? nextRunService.GetNextRunWithResponseAreaOffset(response.NextRun, response.ResponseArea) + // // возвращаем в дефолтной зоне + // : nextRunService.GetNextRunWithResponseAreaOffset(response.NextRun, settingsFromDb.DefaultResponseAreaToTimeOffset); + + response.NextRunResponseAreaInLocal = nextRunService.GetNextRunWithResponseAreaOffset(response.NextRun, responseArea); + + response.Timezone = mapper.Map(scheduleResponseAreaTimeOffsetService.GetByResponseAreaOrDefault(responseArea)); } } diff --git a/PARR.API/MappingProfiles/DomainToResponseProfile.cs b/PARR.API/MappingProfiles/DomainToResponseProfile.cs index 3dc51be0..96111074 100644 --- a/PARR.API/MappingProfiles/DomainToResponseProfile.cs +++ b/PARR.API/MappingProfiles/DomainToResponseProfile.cs @@ -71,6 +71,11 @@ namespace PARR.API.MappingProfiles CreateMap(); + #region ScheduleResponseAreaTimeOffsetResponse + + CreateMap(); + + #endregion #region StatusTypeResponse