From 19a812034d106748c7bc459e07e8d6ef3a5c30b8 Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Fri, 21 Jun 2024 11:51:41 +1000 Subject: [PATCH] =?UTF-8?q?feat(api):=20=D0=BE=D0=BF=D1=82=D0=B8=D0=BC?= =?UTF-8?q?=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B7=D0=B0=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=81=D0=BE=D0=B2=20=D0=B2=20AppInWorks=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BE=D0=B4=D1=81=D1=87=D0=B5=D1=82=D0=B5=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BB-=D0=B2=D0=B0=20=D1=88=D0=B0=D0=B1=D0=BB?= =?UTF-8?q?=D0=BE=D0=BD=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../V1/ApplicationInWorkController.cs | 44 ++++++++++++++----- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/PARR.API/Controllers/V1/ApplicationInWorkController.cs b/PARR.API/Controllers/V1/ApplicationInWorkController.cs index 8f514fa8..3c4d1dca 100644 --- a/PARR.API/Controllers/V1/ApplicationInWorkController.cs +++ b/PARR.API/Controllers/V1/ApplicationInWorkController.cs @@ -26,13 +26,15 @@ namespace PARR.API.Controllers.V1 private readonly IApplicationsInWorkService applicationsInWorkService; private readonly IValidator validator; private readonly IUriService uriService; + private readonly ITemplateService templateService; public ApplicationInWorkController( ILogger logger, IMapper mapper, IApplicationsInWorkService applicationsInWorkService, IValidator validator, - IUriService uriService + IUriService uriService, + ITemplateService templateService ) { this.logger = logger; @@ -40,6 +42,7 @@ namespace PARR.API.Controllers.V1 this.applicationsInWorkService = applicationsInWorkService; this.validator = validator; this.uriService = uriService; + this.templateService = templateService; } @@ -58,7 +61,7 @@ namespace PARR.API.Controllers.V1 { query = query .Include(t => t.Work) - .Include(t => t.Templates) + //.Include(t => t.Templates) - большой запрос, делаем его отдельно .Include(t => t.WorkGroups).ThenInclude(t => t.WorkGroup); } @@ -76,6 +79,16 @@ namespace PARR.API.Controllers.V1 return NoContent(); var response = mapper.Map>(appInWorks); + + if (filter.IsLight != true) + { + //Если запрос не легкий, закгружаем кол-во шаблонов отдельно, это значительно ускоряет запрос + foreach (var item in response) + { + item.TemplatesCount = await templateService.Get().CountAsync(t => t.ApplicationInWorkId == item.Id); + } + } + var paginationResponse = new PagedResponse(response, true).GetPaginatedProps(paginationFilter, query); return Ok(paginationResponse); @@ -93,7 +106,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) + //.Include(t => t.Templates) .Include(t => t.WorkGroups).ThenInclude(t => t.WorkGroup) .FirstOrDefaultAsync(t => t.Id == id); @@ -101,6 +114,7 @@ namespace PARR.API.Controllers.V1 return NotFound(); var response = mapper.Map(applicationInWork); + response.TemplatesCount = await templateService.Get().CountAsync(t => t.ApplicationInWorkId == id); return Ok(new Response(response, true)); } @@ -170,13 +184,17 @@ namespace PARR.API.Controllers.V1 var createdApplicationInWork = await applicationsInWorkService.Get() .Include(t => t.Application).ThenInclude(t => t!.ApplicationType) .Include(t => t.Work) - .Include(t => t.Templates) + //.Include(t => t.Templates) .Include(t => t.WorkGroups).ThenInclude(t => t.WorkGroup) .FirstAsync(t => t.Id == applicationInWork.Id); var locationUri = uriService.GetUri(ApiRoutes.Job.Get, ApiRoutes.Job.getParam, createdApplicationInWork.Id); - return Created(locationUri, new Response(mapper.Map(createdApplicationInWork), true)); + var response = mapper.Map(createdApplicationInWork); + // так как мы только что создали AppInW, то у него нет шаблонов, смело ставим = 0 (ускоряем запрос) + response.TemplatesCount = 0; + + return Created(locationUri, new Response(response, true)); } @@ -255,11 +273,14 @@ namespace PARR.API.Controllers.V1 var updatedApplicationInWork = await applicationsInWorkService.Get() .Include(t => t.Application).ThenInclude(t => t!.ApplicationType) .Include(t => t.Work) - .Include(t => t.Templates) + //.Include(t => t.Templates) .Include(t => t.WorkGroups).ThenInclude(t => t.WorkGroup) .FirstAsync(t => t.Id == orig.Id); - return Ok(new Response(mapper.Map(updatedApplicationInWork), true)); + var response = mapper.Map(updatedApplicationInWork); + response.TemplatesCount = await templateService.Get().CountAsync(t => t.ApplicationInWorkId == id); + + return Ok(new Response(response, true)); } @@ -273,7 +294,7 @@ namespace PARR.API.Controllers.V1 public async Task Delete([FromRoute] Guid id) { var applicationsInWork = await applicationsInWorkService.Get() - .Include(t => t.Templates) + //.Include(t => t.Templates) .FirstOrDefaultAsync(t => t.Id == id); if (applicationsInWork == null) @@ -281,9 +302,12 @@ namespace PARR.API.Controllers.V1 Message = $"Ошибка при удалении задания на выполнение работ. Не найдено задание на выполнение работ Id: {id}" } })); - if (applicationsInWork.Templates.Any()) + var templateCount = await templateService.Get().CountAsync(t => t.ApplicationInWorkId == id); + + //if (applicationsInWork.Templates.Any()) + if (templateCount > 0) return BadRequest(new Response(false, new List { new ErrorModel { - Message = $"Ошибка при удалении задания на выполнение работ. С данным заданием связаны шаблоны: {applicationsInWork.Templates.Count()} шт." + Message = $"Ошибка при удалении задания на выполнение работ. С данным заданием связаны шаблоны: {templateCount} шт." } })); if (!applicationsInWorkService.Delete(applicationsInWork) || !await applicationsInWorkService.CommitAsync())