feat(api,core,jobAutoControl): Валидация при получении запроса на синхронизацию групп, работ. JobAutoControlWorker - изменена логика, может обрабатывать группы и работы.

This commit is contained in:
Mikhail Trubnikov
2026-06-30 16:12:52 +10:00
parent 4a8a67247d
commit 16f97904eb
7 changed files with 135 additions and 46 deletions

View 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 => "Объект не найден или данные работы нельзя отправить на синхронизацию.",
_ => "Не найден объект с переданным ИД."
});
}
}
}