feat(api): в Works добавлена маска динамической генерации имени шаблона; добавлены Shortcodes; актализированы валидация, запросы,ответы; миграция БД - запрет приёма нулевых значений в маску

This commit is contained in:
Mikhail Kuznetsov
2025-04-17 16:38:35 +10:00
parent ecd3bdac9b
commit a89e7f7b86
14 changed files with 3375 additions and 8 deletions

View File

@@ -3,6 +3,7 @@
public class WorkRequest
{
public required string Name { get; set; }
public required string TemplateNameMask { get; set; }
public string? TemplateSuffix { get;set; }
public int EsppId { get; set; }
public Guid TnkId { get; set; }

View File

@@ -6,6 +6,8 @@
public required string Name { get; set; }
public required string TemplateNameMask { get; set; }
public string? TemplateSuffix { get; set; }
public int EsppId { get; set; }

View File

@@ -137,6 +137,7 @@ namespace PARR.API.Controllers.V1
{
Id = Guid.NewGuid(),
Name = request.Name.Trim(),
TemplateNameMask = request.TemplateNameMask,
EsppId = request.EsppId,
TnkId = request.TnkId,
TemplateSuffix = request.TemplateSuffix
@@ -179,6 +180,7 @@ namespace PARR.API.Controllers.V1
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = $"Ошибка при изменении вида работ. Не найдена работа Id: {id}" } }));
orig.Name = request.Name.Trim();
orig.TemplateNameMask = request.TemplateNameMask.Trim();
orig.EsppId = request.EsppId;
orig.TnkId = request.TnkId;
orig.DateModified = DateTimeOffset.UtcNow;

View File

@@ -1,5 +1,7 @@
using FluentValidation;
using PARR.API.Contracts.V1.Requests;
using PARR.BLL.Services.Interfaces;
using PARR.Constants.Shortcodes;
using PARR.DAL.Services.Interfaces;
namespace PARR.API.Validators
@@ -11,13 +13,27 @@ namespace PARR.API.Validators
private bool? isValid = null;
public WorkRequestValidator(
ITnkService tnkService
ITnkService tnkService,
ITemplateMaskValidator templateMaskValidator
)
{
this.tnkService = tnkService;
RuleFor(t => t.Name).NotEmpty().NotNull();
RuleFor(t => t.TemplateNameMask)
.NotEmpty()
.NotNull();
RuleFor(t => t.TemplateNameMask)
.Must((entity, value, c) => templateMaskValidator
.IsValid(entity.TemplateNameMask))
.WithMessage($"Неверно указана маска имени шаблонов. Обязательными условиями являются" +
$" наличие кодового слова \"ПАРР\" и обязательное использование динамической составляющей" +
$" %ЭК%. Доступные значения динамических составляющих:" +
$" {string.Join(", ", Shortcodes.GetAll().Select(sc => sc.Name + " - " + sc.Description))}"
);
RuleFor(t => t.EsppId).NotEmpty().NotNull().WithMessage("EsppId не может быть пустым");
RuleFor(t => t.TnkId).NotEmpty().NotNull();