using AutoMapper; using FluentValidation; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using PARR.API.Contracts.V1; using PARR.API.Contracts.V1.Requests; using PARR.API.Contracts.V1.Responses; using PARR.API.Contracts.V1.Responses.Base; using PARR.API.Controllers.V1.Base; using PARR.API.Services.Interfaces; using PARR.Constants; using PARR.DAL.Services.Interfaces; namespace PARR.API.Controllers.V1 { /// /// Контроллер по управлению ScheduleEsppId у шаблона /// [Authorize(Roles = ParrRoles.EsppRobot.RoleOrAdmin)] public class TemplateScheduleEspp : BaseApiController { private readonly ITemplateService templateService; private readonly IMapper mapper; private readonly IValidator validator; private readonly IUriService uriService; public TemplateScheduleEspp( ITemplateService templateService, IMapper mapper, IValidator validator, IUriService uriService ) { this.templateService = templateService; this.mapper = mapper; this.validator = validator; this.uriService = uriService; } /// /// Получить ИД расписания ЕСПП по ИД шаблона /// /// /// [HttpGet(ApiRoutes.TemplateScheduleEspp.Get)] public async Task Get([FromRoute] Guid templateId) { var template = await templateService.GetAsync(templateId); if (template == null) return BadRequest(new Response(false, new List { new ErrorModel { Message = $"Не найден шаблон с id: {templateId}" } })); return Ok(new Response(mapper.Map(template), true)); } /// /// Задать ИД расписания ЕСПП шаблону с ИД /// /// /// [HttpPost(ApiRoutes.TemplateScheduleEspp.Create)] public async Task SetEsppId([FromRoute] Guid templateId, [FromBody] TemplateScheduleEsppIdRequest request) { var resultValidate = await validator.ValidateAsync(request); if (!resultValidate.IsValid) return BadRequest(new Response(resultValidate.Errors)); var template = await templateService.GetAsync(templateId); if (template == null) return BadRequest(new Response(false, new List { new ErrorModel { Message = $"Не найден шаблон с id: {templateId}" } })); template.ScheduleEsppId = request.ScheduleEsppId; if (!await templateService.CommitAsync()) return BadRequest(new Response(false, new List { new ErrorModel { Message = "Ошибка при сохранении шаблона." } })); var createdUri = uriService.GetUri(ApiRoutes.TemplateScheduleEspp.Get, ApiRoutes.TemplateScheduleEspp.templateId, templateId); return Created(createdUri, new Response(mapper.Map(template), true)); } } }