feat(api): jobGroup при создании и обновлении принимает поле GroupingUnitFieldId. Валидации. Контроллеры KiiUnitController, RegionalEkPtkGroupController

This commit is contained in:
Mikhail Trubnikov
2025-12-19 10:48:41 +10:00
parent cef0e15077
commit a03b882880
9 changed files with 222 additions and 6 deletions

View File

@@ -1,12 +1,19 @@
using FluentValidation;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json.Linq;
using PARR.API.Contracts.V1.Requests;
using PARR.DAL.Contracts;
using PARR.DAL.Services.Interfaces.Job;
using PARR.DAL.Services.Interfaces.Unit;
namespace PARR.API.Validators
{
public class JobGroupValidator : AbstractValidator<JobGroupRequest>
{
public JobGroupValidator(IJobGroupTypeService jobGroupTypeService)
public JobGroupValidator(
IJobGroupTypeService jobGroupTypeService,
IUnitFieldService unitFieldService
)
{
RuleFor(t => t.Name)
.NotNull().NotEmpty();
@@ -26,6 +33,33 @@ namespace PARR.API.Validators
RuleFor(t => t.GroupTypeId)
.MustAsync(async (entity, value, c) => await jobGroupTypeService.GetAsync(value) != null)
.WithMessage("Указан несуществующий Id типа");
//Проверяем существует ли такой GroupingUnitFieldId в unitField
RuleFor(t => t.GroupingUnitFieldId)
.MustAsync(async (entity, value, c) =>
{
if (!value.HasValue)
{
return true;
}
return await unitFieldService.GetAsync(value.Value) != null;
})
.WithMessage("Указано несуществующий Id поля");
RuleFor(t => t.GroupingUnitFieldId)
.MustAsync(async (entity, value, c) =>
{
var groupingJobType = await jobGroupTypeService.Get().FirstAsync(t => t.Code == JobGroupTypesEnum.Group);
// Если это сгруппированный тип, то у него обязательно должно быть заполнено поле GroupingUnitFieldId
if (entity.GroupTypeId == groupingJobType.Id)
return value.HasValue;
return true;
})
.WithMessage("Не указано поле для группировки");
}
}
}