feat(api,core,jobAutoControl): Валидация при получении запроса на синхронизацию групп, работ. JobAutoControlWorker - изменена логика, может обрабатывать группы и работы.
This commit is contained in:
@@ -48,9 +48,6 @@ namespace PARR.API.Controllers.V1
|
||||
[HttpPost(ApiRoutes.SyncTask.MatchTemplates)]
|
||||
public async Task<IActionResult> MatchTemplatesForJob([FromBody] MatchTemplatesRequest request)
|
||||
{
|
||||
//todo: Валидатор! Валидатор то забыли!!!
|
||||
|
||||
|
||||
// проверяем, если уже идет синхронизация по этому объекту, то ахтунг, ошибка
|
||||
var matchingStatus = await matchingStatusService.GetStatusAsync(request.ObjectId, request.EntityType);
|
||||
if (matchingStatus.IsMatchingObject)
|
||||
|
||||
@@ -21,6 +21,7 @@ namespace PARR.API.MappingProfiles
|
||||
.ForMember(d => d.MaxValueRelationships, o => o.MapFrom(s => s.Relationships != null ? s.Relationships.MaxValueRelationships : (int?)null))
|
||||
.ForMember(d => d.MinValueRelationships, o => o.MapFrom(s => s.Relationships != null ? s.Relationships.MinValueRelationships : (int?)null))
|
||||
.ForMember(d => d.DateCreated, o => o.MapFrom(s => DateTimeOffset.UtcNow))
|
||||
.ForMember(d => d.AutoControl, o => o.Ignore())
|
||||
.AfterMap((s, d) =>
|
||||
{
|
||||
if (d.UnitFilters != null)
|
||||
|
||||
50
PARR.API/Validators/MatchTemplatesRequestValidator.cs
Normal file
50
PARR.API/Validators/MatchTemplatesRequestValidator.cs
Normal file
@@ -0,0 +1,50 @@
|
||||
using FluentValidation;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using PARR.API.Contracts.V1.Requests;
|
||||
using PARR.Core.Repositories.Interfaces;
|
||||
using PARR.Core.Repositories.Interfaces.Job;
|
||||
using PARR.Domain.Enums;
|
||||
|
||||
namespace PARR.API.Validators
|
||||
{
|
||||
public class MatchTemplatesRequestValidator : AbstractValidator<MatchTemplatesRequest>
|
||||
{
|
||||
public MatchTemplatesRequestValidator(
|
||||
IJobGroupRepository jobGroupRepository,
|
||||
IJobRepository jobRepository,
|
||||
ITemplateRepository templateRepository
|
||||
)
|
||||
{
|
||||
RuleFor(t => t.ObjectId)
|
||||
.NotNull()
|
||||
.NotEmpty()
|
||||
.WithMessage("Идентификатор объекта не может быть пустым.");
|
||||
|
||||
RuleFor(t => t)
|
||||
.MustAsync(async (request, cancellation) =>
|
||||
{
|
||||
return request.EntityType switch
|
||||
{
|
||||
SyncTaskEntityTypeEnum.JobGroup =>
|
||||
await jobGroupRepository.Get().AsNoTracking().AnyAsync(t => t.Id == request.ObjectId, cancellation),
|
||||
|
||||
SyncTaskEntityTypeEnum.Job =>
|
||||
await jobRepository.Get().AsNoTracking().AnyAsync(t => t.Id == request.ObjectId && t.Group!.GroupType!.IsJobGroupAutoControl == false, cancellation),
|
||||
|
||||
SyncTaskEntityTypeEnum.Template =>
|
||||
false, // TODO: Синхронизировать шаблоны нельзя
|
||||
|
||||
_ => false
|
||||
};
|
||||
})
|
||||
.WithMessage(request => request.EntityType switch
|
||||
{
|
||||
SyncTaskEntityTypeEnum.Template => "Синхронизация шаблонов пока не поддерживается.",
|
||||
SyncTaskEntityTypeEnum.Job => "Объект не найден или данные работы нельзя отправить на синхронизацию.",
|
||||
_ => "Не найден объект с переданным ИД."
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user