using AutoMapper; using FluentValidation; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; 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.DAL.Contracts; using PARR.DAL.Models; using PARR.DAL.Services.Interfaces; namespace PARR.API.Controllers.V1 { public class TemplateRobotStatusController : BaseApiController { private readonly IMapper mapper; private readonly ITemplateService templateService; private readonly IValidator validator; public TemplateRobotStatusController( IMapper mapper, ITemplateService templateService, IValidator validator ) { this.mapper = mapper; this.templateService = templateService; this.validator = validator; } /// /// Получить статус робота по Id шаблона /// /// /// [HttpGet(ApiRoutes.TemplateRobotStatus.Get)] public async Task Get([FromRoute] Guid templateId) { var template = await templateService.Get() .Include(t => t.RobotStatus) .FirstOrDefaultAsync(t => t.Id == templateId); if (template == null) return BadRequest(new Response(false, new List { new ErrorModel { Message = $"Не найден шаблон с id: {templateId}" } })); var response = mapper.Map(template); return Ok(new Response(response, true)); } /// /// Обновить статус робота по Id шаблона /// /// /// [HttpPut(ApiRoutes.TemplateRobotStatus.Update)] public async Task UpdateStatus([FromRoute] Guid templateId, [FromBody] TemplateRobotStatusRequest request) { var resultValidate = await validator.ValidateAsync(request); if (!resultValidate.IsValid) return BadRequest(new Response(resultValidate.Errors)); var template = await templateService.Get() .FirstOrDefaultAsync(t => t.Id == templateId); if (template == null) return BadRequest(new Response(false, new List { new ErrorModel { Message = $"Не найден шаблон с id: {templateId}" } })); var enumStatus = (RobotStatusEnum)request.Code; // изменение статуса templateService.ChangeRobotStatus(enumStatus, ref template); if (!await templateService.CommitAsync()) return BadRequest(new Response(false, new List { new ErrorModel { Message = $"Ошибка при изменении статуса шаблону {templateId}" } })); var templateToResponse = await templateService.Get() .Include(t => t.RobotStatus) .FirstOrDefaultAsync(t => t.Id == templateId); var response = mapper.Map(templateToResponse); return Ok(new Response(response, true)); } } }