переход на fluentValidation

This commit is contained in:
gorbenko.pavel
2026-07-23 16:58:18 +05:00
parent 7cce18e67b
commit 253fafa575
14 changed files with 150 additions and 64 deletions
@@ -37,9 +37,9 @@ public sealed class TemplateRouteStepService(ApprovalRouteDbContext db)
if (route is null)
return Result.Fail<TemplateRouteStepDto>(new NotFoundError("Маршрут", routeId));
var fieldsError = ValidateFields(r.ExecutorEmail, r.Position, r.ProjectRole, route.ByProject);
if (fieldsError is not null)
return Result.Fail<TemplateRouteStepDto>(fieldsError);
if (!route.ByProject && r.ProjectRole != ProjectRole.None)
return Result.Fail<TemplateRouteStepDto>(new ValidationError(
"Роль в проекте недопустима для шага маршрута, который не учитывает проект (by_project = false)."));
var entity = new TemplateRouteStep
{
@@ -70,9 +70,9 @@ public sealed class TemplateRouteStepService(ApprovalRouteDbContext db)
if (entity is null)
return Result.Fail<TemplateRouteStepDto>(new NotFoundError("Шаг маршрута", id));
var fieldsError = ValidateFields(r.ExecutorEmail, r.Position, r.ProjectRole, route.ByProject);
if (fieldsError is not null)
return Result.Fail<TemplateRouteStepDto>(fieldsError);
if (!route.ByProject && r.ProjectRole != ProjectRole.None)
return Result.Fail<TemplateRouteStepDto>(new ValidationError(
"Роль в проекте недопустима для шага маршрута, который не учитывает проект (by_project = false)."));
entity.OrderNo = r.OrderNo;
entity.ExecutorEmail = r.ExecutorEmail;
@@ -99,17 +99,6 @@ public sealed class TemplateRouteStepService(ApprovalRouteDbContext db)
return Result.Ok();
}
private static IError? ValidateFields(string executorEmail, string position, ProjectRole projectRole, bool routeByProject)
{
if (string.IsNullOrWhiteSpace(executorEmail) && string.IsNullOrWhiteSpace(position) && projectRole == ProjectRole.None)
return new ValidationError("Исполнитель, должность и роль в проекте не могут быть пустыми одновременно.");
if (!routeByProject && projectRole != ProjectRole.None)
return new ValidationError("Роль в проекте недопустима для шага маршрута, который не учитывает проект (by_project = false).");
return null;
}
private async Task<Result<TemplateRouteStepDto>> AppendMissingProjectRoleWarningAsync(
TemplateRoute route, Result<TemplateRouteStepDto> result, CancellationToken cancellationToken)
{
@@ -0,0 +1,24 @@
using FluentValidation;
using Tnsu.ApprovalRoute.Domain.Enums;
namespace Tnsu.ApprovalRoute.Application.TemplateRouteSteps;
public sealed class CreateTemplateRouteStepRequestValidator : AbstractValidator<CreateTemplateRouteStepRequest>
{
public CreateTemplateRouteStepRequestValidator()
{
RuleFor(x => x)
.Must(x => !(string.IsNullOrWhiteSpace(x.ExecutorEmail) && string.IsNullOrWhiteSpace(x.Position) && x.ProjectRole == ProjectRole.None))
.WithMessage("Исполнитель, должность и роль в проекте не могут быть пустыми одновременно.");
}
}
public sealed class UpdateTemplateRouteStepRequestValidator : AbstractValidator<UpdateTemplateRouteStepRequest>
{
public UpdateTemplateRouteStepRequestValidator()
{
RuleFor(x => x)
.Must(x => !(string.IsNullOrWhiteSpace(x.ExecutorEmail) && string.IsNullOrWhiteSpace(x.Position) && x.ProjectRole == ProjectRole.None))
.WithMessage("Исполнитель, должность и роль в проекте не могут быть пустыми одновременно.");
}
}