From 76bfc5aa16e3a7c57fc3e1169d1251c1d70d464e Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Tue, 2 Apr 2024 14:20:11 +1000 Subject: [PATCH] =?UTF-8?q?feat(api):=20=D0=B2=20ApplicationInWorkResponse?= =?UTF-8?q?=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20=D0=BE=20=D1=80=D0=B0?= =?UTF-8?q?=D1=81=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../V1/Responses/ApplicationInWorkResponse.cs | 15 ++++++ .../V1/ApplicationInWorkController.cs | 2 + .../DomainToResponseProfile.cs | 4 +- .../ApplicationInWorkScheduleResolver.cs | 49 +++++++++++++++++++ 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 PARR.API/MappingProfiles/Resolvers/ApplicationInWorkScheduleResolver.cs diff --git a/PARR.API/Contracts/V1/Responses/ApplicationInWorkResponse.cs b/PARR.API/Contracts/V1/Responses/ApplicationInWorkResponse.cs index 5b54af99..3a829494 100644 --- a/PARR.API/Contracts/V1/Responses/ApplicationInWorkResponse.cs +++ b/PARR.API/Contracts/V1/Responses/ApplicationInWorkResponse.cs @@ -27,5 +27,20 @@ public WorkResponse? Work { get; set; } public ApplicationResponse? Application { get; set; } + + public int TemplatesCount { get; set; } + + public ApplicationInWorkScheduleResponse? Schedule { get; set; } } + + + public class ApplicationInWorkScheduleResponse + { + public string Timezone { get; set; } = string.Empty; + + public EsppScheduleTypeScheduleResponse? TypeSchedule { get; set; } + + public List? Values { get; set; } + } + } diff --git a/PARR.API/Controllers/V1/ApplicationInWorkController.cs b/PARR.API/Controllers/V1/ApplicationInWorkController.cs index b3197da1..9b301f67 100644 --- a/PARR.API/Controllers/V1/ApplicationInWorkController.cs +++ b/PARR.API/Controllers/V1/ApplicationInWorkController.cs @@ -116,6 +116,7 @@ namespace PARR.API.Controllers.V1 IQueryable query = applicationsInWorkService.Get() .Include(t => t.Application).ThenInclude(t=>t!.ApplicationType) .Include(t => t.Work) + .Include(t => t.Templates) .OrderBy(t => t.ShortDescription); if (!string.IsNullOrEmpty(filter.ShortDescription)) @@ -144,6 +145,7 @@ namespace PARR.API.Controllers.V1 var applicationInWork = await applicationsInWorkService.Get() .Include(t => t.Application).ThenInclude(t => t!.ApplicationType) .Include(t => t.Work) + .Include(t=>t.Templates) .FirstOrDefaultAsync(t => t.Id == id); if (applicationInWork == null) diff --git a/PARR.API/MappingProfiles/DomainToResponseProfile.cs b/PARR.API/MappingProfiles/DomainToResponseProfile.cs index 395dfa4c..e7077c9b 100644 --- a/PARR.API/MappingProfiles/DomainToResponseProfile.cs +++ b/PARR.API/MappingProfiles/DomainToResponseProfile.cs @@ -214,7 +214,9 @@ namespace PARR.API.MappingProfiles CreateMap() .ForMember(d => d.Work, o => o.MapFrom(s => s.Work)) - .ForMember(d => d.Application, o => o.MapFrom(s => s.Application)); + .ForMember(d => d.Application, o => o.MapFrom(s => s.Application)) + .ForMember(d => d.TemplatesCount, o => o.MapFrom(s => s.Templates.Count())) + .ForMember(d => d.Schedule, o => o.MapFrom()); CreateMap(); diff --git a/PARR.API/MappingProfiles/Resolvers/ApplicationInWorkScheduleResolver.cs b/PARR.API/MappingProfiles/Resolvers/ApplicationInWorkScheduleResolver.cs new file mode 100644 index 00000000..6abd3d85 --- /dev/null +++ b/PARR.API/MappingProfiles/Resolvers/ApplicationInWorkScheduleResolver.cs @@ -0,0 +1,49 @@ +using AutoMapper; +using PARR.API.Contracts.V1.Responses; +using PARR.DAL.Contracts; +using PARR.DAL.Models; +using PARR.DAL.Services.Interfaces; + +namespace PARR.API.MappingProfiles.Resolvers +{ + public class ApplicationInWorkScheduleResolver : IValueResolver + { + private readonly IEsppSchTypeConfigService esppConfigService; + private readonly ILogger logger; + private readonly IMapper mapper; + private readonly SettingsFromDb settingsFromDb; + + public ApplicationInWorkScheduleResolver( + IEsppSchTypeConfigService esppConfigService, + ILogger logger, + IMapper mapper, + SettingsFromDb settingsFromDb + ) + { + this.esppConfigService = esppConfigService; + this.logger = logger; + this.mapper = mapper; + this.settingsFromDb = settingsFromDb; + } + + public ApplicationInWorkScheduleResponse? Resolve(ApplicationsInWork source, ApplicationInWorkResponse destination, ApplicationInWorkScheduleResponse? destMember, ResolutionContext context) + { + var schedule = esppConfigService.GetEsppScheduleDto(source.Id); + + if (schedule == null) + { + logger.LogError($"ApplicationInWorkScheduleResolver: Не смог замапить расписание, так как оно null. appInWorksId: {source.Id}"); + return null; + } + + var response = new ApplicationInWorkScheduleResponse + { + Timezone = settingsFromDb.ScheduleTimezone, + TypeSchedule = mapper.Map(schedule.TypeSchedule), + Values = mapper.Map>(schedule.Values).OrderBy(t => t.Order).ToList() + }; + + return response; + } + } +}