feat(api): В ТНК добавлено поле продолжительность минут.

This commit is contained in:
Mikhail Trubnikov
2026-09-15 11:40:50 +10:00
parent 2befb6b0c3
commit f3a3a0cf8c
8 changed files with 4210 additions and 27 deletions

View File

@@ -1,10 +1,11 @@
namespace PARR.API.Contracts.V1.Requests
{
public class TnkRequest
public record TnkRequest
{
public required string Name { get; set; }
public string? ShortName { get; set; }
public int? EsppId { get; set; }
public Guid SubprocessId { get; set; }
public required string Name { get; init; }
public string? ShortName { get; init; }
public int? EsppId { get; init; }
public int? DurationMinutes { get; init; }
public Guid SubprocessId { get; init; }
}
}

View File

@@ -10,6 +10,8 @@
public int? EsppId { get; set; }
public int? DurationMinutes { get; set; }
public Guid SubprocessId { get; set; }
}

View File

@@ -27,21 +27,18 @@ namespace PARR.API.Controllers.V1
private readonly ILogger<TnkController> logger;
private readonly IMapper mapper;
private readonly ITnkRepository tnkService;
//private readonly IValidator<TnkRequest> validator;
private readonly IUriService uriService;
public TnkController(
ILogger<TnkController> logger,
IMapper mapper,
ITnkRepository tnkService,
//IValidator<TnkRequest> validator,
IUriService uriService
)
{
this.logger = logger;
this.mapper = mapper;
this.tnkService = tnkService;
//this.validator = validator;
this.uriService = uriService;
}
@@ -127,23 +124,16 @@ namespace PARR.API.Controllers.V1
[HttpPost(ApiRoutes.Tnk.Create)]
public async Task<IActionResult> Create([FromBody] TnkRequest request)
{
//var resultValidate = await validator.ValidateAsync(request);
//if (!resultValidate.IsValid)
// return BadRequest(new Response(resultValidate.Errors));
var existName = await tnkService.Get().FirstOrDefaultAsync(t => t.Name.ToLower() == request.Name.Trim().ToLower());
if (existName != null)
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { FieldName = nameof(request.Name), Message = $"Вид работы с именем \"{request.Name}\" уже существует." } }));
//var existEsppId = await tnkService.Get().FirstOrDefaultAsync(t => t.EsppId == request.EsppId);
//if (existEsppId != null)
// return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { FieldName = nameof(request.EsppId), Message = $"ТНК с EsppId: {request.EsppId} уже существует." } }));
var tnk = new Tnk
{
Id = Guid.NewGuid(),
Name = request.Name.Trim(),
EsppId = request.EsppId,
DurationMinutes = request.DurationMinutes,
ShortName = request.ShortName?.Trim(),
SubprocessId = request.SubprocessId
};
@@ -168,15 +158,6 @@ namespace PARR.API.Controllers.V1
[HttpPut(ApiRoutes.Tnk.Update)]
public async Task<IActionResult> Update([FromRoute] Guid id, [FromBody] TnkRequest request)
{
//var resultValidate = await validator.ValidateAsync(request);
//if (!resultValidate.IsValid)
// return BadRequest(new Response(resultValidate.Errors));
////проверка на уникальность esppId
//var existEsppId = await tnkService.Get().FirstOrDefaultAsync(t => t.Id != id && t.EsppId == request.EsppId);
//if (existEsppId != null)
// return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { FieldName = nameof(request.EsppId), Message = $"Уже есть ТНК с EsppId: {request.EsppId}" } }));
var orig = await tnkService.Get()
.FirstOrDefaultAsync(t => t.Id == id);
@@ -186,6 +167,7 @@ namespace PARR.API.Controllers.V1
orig.Name = request.Name.Trim();
orig.EsppId = request.EsppId;
orig.SubprocessId = request.SubprocessId;
orig.DurationMinutes = request.DurationMinutes;
orig.ShortName = request.ShortName?.Trim();
orig.DateModified = DateTimeOffset.UtcNow;

View File

@@ -19,6 +19,11 @@ namespace PARR.API.Validators
//RuleFor(t => t.EsppId).NotEmpty().NotNull().WithMessage("EsppId не может быть пустым");
RuleFor(t => t.DurationMinutes)
.GreaterThanOrEqualTo(0)
.When(t => t.DurationMinutes.HasValue)
.WithMessage("Значение не может быть отрицательным");
RuleFor(t => t.SubprocessId).NotEmpty().NotNull();
RuleFor(t => t.SubprocessId)