From a92bbf189968f7c9c31c5d0d0e9d9df82e9537b7 Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Wed, 3 Apr 2024 14:12:59 +1000 Subject: [PATCH] =?UTF-8?q?feat(api):=20=D1=80=D0=B0=D1=81=D1=88=D0=B8?= =?UTF-8?q?=D1=80=D0=B5=D0=BD=20=D1=80=D0=B5=D1=81=D0=BF=D0=BE=D0=BD=D1=81?= =?UTF-8?q?=20WorkResponse=20=D0=B4=D0=BE=20WorkWithTnkResponse,=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D0=BD=D0=B0=D1=8F=20=D0=B8=D0=B5=D1=80=D0=B0=D1=80=D1=85?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=82=D0=BD=D0=BA.=20=D0=92=20Work.GetAll=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BF=D0=B0?= =?UTF-8?q?=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8=20=D1=81=20?= =?UTF-8?q?=D0=B8=D0=B5=D1=80=D0=B0=D1=80=D1=85=D0=B8=D0=B5=D0=B9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../V1/Requests/Queries/WorkGetAllQuery.cs | 10 ++++++ .../V1/Responses/SubprocessResponse.cs | 5 +++ .../Contracts/V1/Responses/TnkResponse.cs | 5 +++ .../Contracts/V1/Responses/WorkResponse.cs | 5 +++ PARR.API/Controllers/V1/WorkController.cs | 15 +++++++- .../DomainToResponseProfile.cs | 34 +++++++++++++++---- 6 files changed, 67 insertions(+), 7 deletions(-) create mode 100644 PARR.API/Contracts/V1/Requests/Queries/WorkGetAllQuery.cs diff --git a/PARR.API/Contracts/V1/Requests/Queries/WorkGetAllQuery.cs b/PARR.API/Contracts/V1/Requests/Queries/WorkGetAllQuery.cs new file mode 100644 index 00000000..57f1fd1b --- /dev/null +++ b/PARR.API/Contracts/V1/Requests/Queries/WorkGetAllQuery.cs @@ -0,0 +1,10 @@ +namespace PARR.API.Contracts.V1.Requests.Queries +{ + public class WorkGetAllQuery + { + /// + /// С иерархией до процесса + /// + public bool AllParents { get; set; } = false; + } +} diff --git a/PARR.API/Contracts/V1/Responses/SubprocessResponse.cs b/PARR.API/Contracts/V1/Responses/SubprocessResponse.cs index 95a53dd6..1696d8c0 100644 --- a/PARR.API/Contracts/V1/Responses/SubprocessResponse.cs +++ b/PARR.API/Contracts/V1/Responses/SubprocessResponse.cs @@ -10,4 +10,9 @@ public Guid ProcessId { get; set; } } + + public class SubprocessWithProcessResponse : SubprocessResponse + { + public ProcessResponse? Process { get; set; } + } } diff --git a/PARR.API/Contracts/V1/Responses/TnkResponse.cs b/PARR.API/Contracts/V1/Responses/TnkResponse.cs index c1138162..6ef21633 100644 --- a/PARR.API/Contracts/V1/Responses/TnkResponse.cs +++ b/PARR.API/Contracts/V1/Responses/TnkResponse.cs @@ -10,4 +10,9 @@ public Guid SubprocessId { get; set; } } + + public class TnkWithSubprocessResponse : TnkResponse + { + public SubprocessWithProcessResponse? Subprocess { get; set; } + } } diff --git a/PARR.API/Contracts/V1/Responses/WorkResponse.cs b/PARR.API/Contracts/V1/Responses/WorkResponse.cs index 58909148..3decfc03 100644 --- a/PARR.API/Contracts/V1/Responses/WorkResponse.cs +++ b/PARR.API/Contracts/V1/Responses/WorkResponse.cs @@ -10,4 +10,9 @@ public Guid TnkId { get; set; } } + + public class WorkWithTnkResponse : WorkResponse + { + public TnkWithSubprocessResponse? Tnk { get; set; } + } } diff --git a/PARR.API/Controllers/V1/WorkController.cs b/PARR.API/Controllers/V1/WorkController.cs index b1c6cfdd..01e3e724 100644 --- a/PARR.API/Controllers/V1/WorkController.cs +++ b/PARR.API/Controllers/V1/WorkController.cs @@ -52,18 +52,31 @@ namespace PARR.API.Controllers.V1 /// /// [HttpGet(ApiRoutes.Work.GetAll)] - public async Task GetAll([FromQuery] PaginationQuery paginationQuery) + public async Task GetAll([FromQuery] PaginationQuery paginationQuery, [FromQuery] WorkGetAllQuery requestQuery) { var paginationFilter = mapper.Map(paginationQuery); IQueryable query = workService.Get() .OrderBy(t => t.Name); + if (requestQuery.AllParents) + query = query.Include(t => t.Tnk).ThenInclude(s => s.Subprocess).ThenInclude(p => p.Process); + var works = await workService.GetPage(query, paginationFilter).ToListAsync(); if (!works.Any()) return NoContent(); + if (requestQuery.AllParents) + { + //todo: тут бесконечность в маппинге + // респонс с иерархией вверх до процесса + var allResponse = mapper.Map>(works); + var paginationAllResponse = new PagedResponse(allResponse, true).GetPaginatedProps(paginationFilter, query); + + return Ok(paginationAllResponse); + } + var workResponse = mapper.Map>(works); var paginationResponse = new PagedResponse(workResponse, true).GetPaginatedProps(paginationFilter, query); diff --git a/PARR.API/MappingProfiles/DomainToResponseProfile.cs b/PARR.API/MappingProfiles/DomainToResponseProfile.cs index e7077c9b..9d503e86 100644 --- a/PARR.API/MappingProfiles/DomainToResponseProfile.cs +++ b/PARR.API/MappingProfiles/DomainToResponseProfile.cs @@ -37,10 +37,11 @@ namespace PARR.API.MappingProfiles .ForMember(d => d.LastRun, o => o.MapFrom(s => s.ApplicationsInWork!.LastRun)); // === Template === - #endregion CreateMap(); + #endregion + CreateMap() .ForMember(d => d.IsAgent, o => o.MapFrom(s => s.IsAgent)) .ForMember(d => d.Name, o => o.MapFrom(s => s.AgentName)) @@ -50,10 +51,28 @@ namespace PARR.API.MappingProfiles CreateMap(); + #region Tnk + CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); + + CreateMap() + .Include(); + + CreateMap(); + + + CreateMap() + .Include(); + + CreateMap(); + + + CreateMap() + .Include(); + + CreateMap(); + + #endregion CreateMap() @@ -161,7 +180,7 @@ namespace PARR.API.MappingProfiles .ForMember(d => d.RobotStatus, o => o.MapFrom(s => s.RobotStatus)); - // --- EsppSch --- + #region EsppSch CreateMap(); CreateMap(); @@ -172,7 +191,7 @@ namespace PARR.API.MappingProfiles .ForMember(d => d.Order, o => o.MapFrom(s => s.Order)) .ForMember(d => d.Value, o => o.MapFrom(s => s.Value)) .ForMember(d => d.Type, o => o.MapFrom(s => s.Type)); - // === EsppSch === + #endregion EsppSch CreateMap(); @@ -211,6 +230,7 @@ namespace PARR.API.MappingProfiles #endregion + #region ApplicationInWork CreateMap() .ForMember(d => d.Work, o => o.MapFrom(s => s.Work)) @@ -218,6 +238,8 @@ namespace PARR.API.MappingProfiles .ForMember(d => d.TemplatesCount, o => o.MapFrom(s => s.Templates.Count())) .ForMember(d => d.Schedule, o => o.MapFrom()); + #endregion + CreateMap(); }