diff --git a/PARR.API/Contracts/V1/ApiRoutes.cs b/PARR.API/Contracts/V1/ApiRoutes.cs
index e3b408cd..b08c7295 100644
--- a/PARR.API/Contracts/V1/ApiRoutes.cs
+++ b/PARR.API/Contracts/V1/ApiRoutes.cs
@@ -374,8 +374,6 @@
public const string Create = Base + "/jobs/";
public const string Update = Base + "/jobs/" + getParam;
- public const string Preview = Base + "/jobs/units/preview";
-
public const string getParam = "{id}";
}
@@ -401,7 +399,13 @@
public const string appInWorkId = "{applicationInWorkId}";
}
-
+ ///
+ /// Предпросмотр затрагиваемых ЭК для фильтров создаваемой или обновляемой работы
+ ///
+ public static class JobUnitPreview
+ {
+ public const string Preview = Base + "/jobs/units/preview";
+ }
///
/// Активатор/деактиватор шаблонов/расписаний
///
@@ -436,7 +440,7 @@
{
public const string GetAll = Base + "/unit-fields/";
public const string Get = Base + "/unit-fields/" + getParam;
- public const string GetAllValues = Base + "/unit-fields/" + getParam+"/values";
+ public const string GetAllValues = Base + "/unit-fields/" + getParam + "/values";
public const string getParam = "{id}";
}
diff --git a/PARR.API/Contracts/V1/Requests/JobRequest.cs b/PARR.API/Contracts/V1/Requests/JobRequest.cs
index c688e996..981d23d0 100644
--- a/PARR.API/Contracts/V1/Requests/JobRequest.cs
+++ b/PARR.API/Contracts/V1/Requests/JobRequest.cs
@@ -27,10 +27,10 @@
public class UnitFilterRequest
{
- ///
- /// Id = null в методе Create, в Update обязателен
- ///
- public Guid? Id { get; set; }
+ /////
+ ///// Id = null в методе Create, в Update обязателен
+ /////
+ //public Guid? Id { get; set; }
public required string UnitFilterMask { get; set; }
diff --git a/PARR.API/Controllers/V1/JobController.cs b/PARR.API/Controllers/V1/JobController.cs
index 2a024dc0..2e74961e 100644
--- a/PARR.API/Controllers/V1/JobController.cs
+++ b/PARR.API/Controllers/V1/JobController.cs
@@ -125,10 +125,10 @@ namespace PARR.API.Controllers.V1
.Include(t => t.Tnk)
.Include(t => t.Group)
.Include(t => t.UnitFilters)
- .ThenInclude(t => t.FieldFilters.OrderBy(o=>o.UnitField!.AihitName))
+ .ThenInclude(t => t.FieldFilters)
.ThenInclude(t => t.UnitField)
.Include(t => t.UnitFilters)
- .ThenInclude(t => t.RelationshipFilters.OrderBy(o => o.UnitField!.AihitName))
+ .ThenInclude(t => t.RelationshipFilters)
.ThenInclude(t => t.UnitField)
.FirstOrDefaultAsync(t => t.Id == id);
@@ -354,8 +354,8 @@ namespace PARR.API.Controllers.V1
orig.UnitFilters.Add(newUnitFilter);
}
-
- /*//Сразу удаляем UnitFilter которых нет
+ /* Писал полноценный апдейт, но Миша сказал что нахрен это - просто все удаляем, а потом создаём заново
+ //Сразу удаляем UnitFilter которых нет
var toDelete = orig.UnitFilters.Where(t => !mappedRequest.UnitFilters.Any(e => e.Id == t.Id));
foreach (var item in toDelete)
orig.UnitFilters.Remove(item);
@@ -529,38 +529,6 @@ namespace PARR.API.Controllers.V1
return NoContent();
}
- ///
- /// Получить список ЭК для которых будут созданы шаблоны
- ///
- ///
- ///
- [HttpPost(ApiRoutes.Job.Preview)]
- public async Task Preview([FromBody] JobRequest request)
- {
- #region Валидация
- var jobValidateResult = await jobValidator.ValidateAsync(request);//Валидация параметров самого задания
-
- if (!jobValidateResult.IsValid)
- return BadRequest(new Response(jobValidateResult.Errors));
- #endregion
-
- var job = mapper.Map(request);
-
- var group = await jobGroupService.GetAsync(request.GroupId);
-
- job.Group = group;
-
- var unitIds = await unitFilterService.GetUnitsIdByJobFilterAsync(job);
-
- if (unitIds == null)
- return NotFound();
-
- var units = await unitService.Get().Where(t => unitIds.Any(a => a == t.Id)).Take(1000).ToListAsync();
-
- var response = mapper.Map>(units);
-
- return Ok(response);
- }
///
/// Загрузка статистики
@@ -599,6 +567,7 @@ namespace PARR.API.Controllers.V1
}
+
public class JobStatModel
{
public required TemplateStats TemplateStatistics { get; set; }
diff --git a/PARR.API/Controllers/V1/JobUnitPreviewController.cs b/PARR.API/Controllers/V1/JobUnitPreviewController.cs
new file mode 100644
index 00000000..bd164fcf
--- /dev/null
+++ b/PARR.API/Controllers/V1/JobUnitPreviewController.cs
@@ -0,0 +1,76 @@
+using AutoMapper;
+using FluentValidation;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using PARR.API.Contracts.V1;
+using PARR.API.Contracts.V1.Requests;
+using PARR.API.Contracts.V1.Responses;
+using PARR.API.Contracts.V1.Responses.Base;
+using PARR.API.Controllers.V1.Base;
+using PARR.Constants;
+using PARR.DAL.DomainServices.Interfaces;
+using PARR.DAL.Models.Job;
+using PARR.DAL.Services.Interfaces.Unit;
+
+namespace PARR.API.Controllers.V1
+{
+ ///
+ /// Получение предварительной информации о работах
+ ///
+ [Authorize(Roles = ParrRoles.Administrator.Role)]
+ public class JobUnitPreviewController : BaseApiController
+ {
+ private readonly ILogger logger;
+ private readonly IUnitFilterService unitFilterService;
+ private readonly IValidator jobValidator;
+ private readonly IUnitService unitService;
+ private readonly IMapper mapper;
+
+ public JobUnitPreviewController(
+ ILogger logger,
+ IUnitFilterService unitFilterService,
+ IValidator jobValidator,
+ IUnitService unitService,
+ IMapper mapper
+ )
+ {
+ this.logger = logger;
+ this.unitFilterService = unitFilterService;
+ this.jobValidator = jobValidator;
+ this.unitService = unitService;
+ this.mapper = mapper;
+ }
+
+ ///
+ /// Получить список ЭК по предполагаемой работе перед сохранением
+ ///
+ ///
+ ///
+ [HttpPost(ApiRoutes.JobUnitPreview.Preview)]
+ public async Task Preview([FromBody] JobRequest request)
+ {
+ #region Валидация
+ var jobValidateResult = await jobValidator.ValidateAsync(request);//Валидация параметров самого задания
+
+ if (!jobValidateResult.IsValid)
+ return BadRequest(new Response(jobValidateResult.Errors));
+ #endregion
+
+ var job = mapper.Map(request);
+
+ var unitIds = await unitFilterService.GetUnitsIdByJobFilterAsync(job, 100);
+
+ if (unitIds == null || !unitIds.Any())
+ return NoContent();
+
+ var query = unitService.Get().Where(t => unitIds.Any(x => x == t.Id)).OrderBy(o => o.Name);
+
+ var units = await query.ToListAsync();
+
+ var unitResponse = mapper.Map>(units);
+
+ return Ok(new Response>(unitResponse, true));
+ }
+ }
+}
diff --git a/PARR.API/Controllers/V1/TestController.cs b/PARR.API/Controllers/V1/TestController.cs
index 769039a6..2d7fc0ab 100644
--- a/PARR.API/Controllers/V1/TestController.cs
+++ b/PARR.API/Controllers/V1/TestController.cs
@@ -1,10 +1,17 @@
-using Microsoft.AspNetCore.Authorization;
+using AutoMapper;
+using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
using PARR.API.Contracts.V1;
+using PARR.API.Contracts.V1.Requests.Queries;
+using PARR.API.Contracts.V1.Responses;
using PARR.API.Contracts.V1.Responses.Base;
using PARR.API.Controllers.V1.Base;
+using PARR.API.Extensions;
using PARR.API.Services.Interfaces;
using PARR.DAL.CacheServices;
+using PARR.DAL.DomainModels;
+using PARR.DAL.DomainServices.Interfaces;
using PARR.DAL.Models.Job;
using PARR.DAL.Services.Interfaces;
using PARR.DAL.Services.Interfaces.Job;
@@ -24,6 +31,8 @@ namespace PARR.API.Controllers.V1
private readonly IFieldFilterService fieldFilterService;
private readonly IJobService jobService;
private readonly IJobUnitFilterService jobUnitFilterService;
+ private readonly IUnitFilterService unitFilterService;
+ private readonly IMapper mapper;
public TestController(
IClientService clientService,
@@ -33,7 +42,9 @@ namespace PARR.API.Controllers.V1
IUnitService unitService,
IFieldFilterService fieldFilterService,
IJobService jobService,
- IJobUnitFilterService jobUnitFilterService
+ IJobUnitFilterService jobUnitFilterService,
+ IUnitFilterService unitFilterService,
+ IMapper mapper
)
{
this.clientService = clientService;
@@ -44,6 +55,8 @@ namespace PARR.API.Controllers.V1
this.fieldFilterService = fieldFilterService;
this.jobService = jobService;
this.jobUnitFilterService = jobUnitFilterService;
+ this.unitFilterService = unitFilterService;
+ this.mapper = mapper;
}
@@ -174,8 +187,6 @@ namespace PARR.API.Controllers.V1
// return Ok(result);
//}
-
-
}
public class CaheRequestTest
diff --git a/PARR.API/MappingProfiles/DomainToResponseProfile.cs b/PARR.API/MappingProfiles/DomainToResponseProfile.cs
index b00ce527..45644069 100644
--- a/PARR.API/MappingProfiles/DomainToResponseProfile.cs
+++ b/PARR.API/MappingProfiles/DomainToResponseProfile.cs
@@ -105,6 +105,8 @@ namespace PARR.API.MappingProfiles
#region Unit
+ CreateMap();
+
CreateMap()
.ForMember(d => d.Name, o => o.MapFrom(s => (string.IsNullOrEmpty(s.DisplayName)) ? s.AihitName : s.DisplayName));
@@ -314,7 +316,9 @@ namespace PARR.API.MappingProfiles
CreateMap();
CreateMap()
- .ForMember(d => d.UnitFilterMask, o => o.MapFrom(d => d.UnitFilter));
+ .ForMember(d => d.UnitFilterMask, o => o.MapFrom(s => s.UnitFilter))
+ .ForMember(d => d.FieldFilters, o => o.MapFrom(s => s.FieldFilters.OrderBy(o => o.UnitField.AihitName)))
+ .ForMember(d => d.RelationshipFilters, o => o.MapFrom(s => s.RelationshipFilters.OrderBy(o => o.UnitField.AihitName)));
CreateMap();
diff --git a/PARR.API/MappingProfiles/RequestToDomainProfile.cs b/PARR.API/MappingProfiles/RequestToDomainProfile.cs
index ffa540de..8d8abe44 100644
--- a/PARR.API/MappingProfiles/RequestToDomainProfile.cs
+++ b/PARR.API/MappingProfiles/RequestToDomainProfile.cs
@@ -24,7 +24,6 @@ namespace PARR.API.MappingProfiles
});
CreateMap()
- .ForMember(d => d.Id, o => o.MapFrom(s => (s.Id == null) ? Guid.NewGuid() : s.Id))
.ForMember(d => d.DateCreated, o => o.MapFrom(s => DateTimeOffset.UtcNow))
.ForMember(d => d.UnitFilter, o => o.MapFrom(s => s.UnitFilterMask))
.AfterMap((s, d) =>
diff --git a/PARR.DAL/DomainServices/Implementations/UnitFilterService.cs b/PARR.DAL/DomainServices/Implementations/UnitFilterService.cs
index 91019cb5..5a237d16 100644
--- a/PARR.DAL/DomainServices/Implementations/UnitFilterService.cs
+++ b/PARR.DAL/DomainServices/Implementations/UnitFilterService.cs
@@ -30,7 +30,7 @@ namespace PARR.DAL.DomainServices.Implementations
}
- public async Task?> GetUnitsIdByJobFilterAsync(Guid jobId)
+ public async Task?> GetUnitsIdByJobFilterAsync(Guid jobId, int? takeCount = null)
{
var job = await jobService
@@ -45,11 +45,11 @@ namespace PARR.DAL.DomainServices.Implementations
if (job == null)
return null;
- return await GetUnitsIdByJobFilterAsync(job);
+ return await GetUnitsIdByJobFilterAsync(job, takeCount);
}
- public async Task?> GetUnitsIdByJobFilterAsync(Job job)
+ public async Task?> GetUnitsIdByJobFilterAsync(Job job, int? takeCount = null)
{
var result = new List();
@@ -112,6 +112,10 @@ namespace PARR.DAL.DomainServices.Implementations
else
query = query.Where(t => t.ChildUnits.Count() >= job.MinValueRelationships && t.ChildUnits.Count() <= job.MaxValueRelationships);
}
+
+ if (takeCount.HasValue)
+ query = query.Take(takeCount.Value);
+
var newUnits = await query.Select(t => t.Id).ToListAsync();
result.AddRange(newUnits);
}
@@ -121,9 +125,9 @@ namespace PARR.DAL.DomainServices.Implementations
- public async Task?> GetUnitsIdForExistTemplatesByJobFilterAsync(Guid jobId)
+ public async Task?> GetUnitsIdForExistTemplatesByJobFilterAsync(Guid jobId, int? takeCount = null)
{
- var unitIdsMustBeCreated = await GetUnitsIdByJobFilterAsync(jobId);
+ var unitIdsMustBeCreated = await GetUnitsIdByJobFilterAsync(jobId, takeCount);
if (unitIdsMustBeCreated == null || !unitIdsMustBeCreated.Any())
return null;
@@ -133,9 +137,9 @@ namespace PARR.DAL.DomainServices.Implementations
return unitWithTemplates;
}
- public async Task?> GetUnitsIdForNotExistTemplatesByJobFilterAsync(Guid jobId)
+ public async Task?> GetUnitsIdForNotExistTemplatesByJobFilterAsync(Guid jobId, int? takeCount = null)
{
- var unitIdsMustBeCreated = await GetUnitsIdByJobFilterAsync(jobId);
+ var unitIdsMustBeCreated = await GetUnitsIdByJobFilterAsync(jobId, takeCount);
if (unitIdsMustBeCreated == null || !unitIdsMustBeCreated.Any())
return null;
diff --git a/PARR.DAL/DomainServices/Interfaces/IUnitFilterService.cs b/PARR.DAL/DomainServices/Interfaces/IUnitFilterService.cs
index 2cb30582..049a23e0 100644
--- a/PARR.DAL/DomainServices/Interfaces/IUnitFilterService.cs
+++ b/PARR.DAL/DomainServices/Interfaces/IUnitFilterService.cs
@@ -9,23 +9,24 @@ namespace PARR.DAL.DomainServices.Interfaces
///
/// Id работы
///
- Task?> GetUnitsIdByJobFilterAsync(Guid jobId);
+ Task?> GetUnitsIdByJobFilterAsync(Guid jobId, int? takeCount = null);
- Task?> GetUnitsIdByJobFilterAsync(Job job);
+ Task?> GetUnitsIdByJobFilterAsync(Job job, int? takeCount = null);
///
/// Получить все Unit.Id, для которых не были созданы Template
///
/// Id работы
///
- Task?> GetUnitsIdForNotExistTemplatesByJobFilterAsync(Guid jobId);
+ Task?> GetUnitsIdForNotExistTemplatesByJobFilterAsync(Guid jobId, int? takeCount = null);
///
/// Получить все Unit.Id, для которых были созданы Template
///
/// Id работы
///
- Task?> GetUnitsIdForExistTemplatesByJobFilterAsync(Guid jobId);
-
+ Task?> GetUnitsIdForExistTemplatesByJobFilterAsync(Guid jobId, int? takeCount = null);
+
+
}
}