using AircraftPlantContracts.BindingModels; using AircraftPlantContracts.BusinessLogicsContracts; using AircraftPlantContracts.SearchModels; using AircraftPlantContracts.ViewModels; using AircraftPlantDataModels.Enums; using Microsoft.AspNetCore.Mvc; namespace AircraftPlantRestApi.Controllers { /// /// Контроллер для работы с исполнителями /// [Route("api/[controller]/[action]")] [ApiController] public class ImplementerController : Controller { /// /// Логгер /// private readonly ILogger _logger; /// /// Бизнес-логика для заказов /// private readonly IOrderLogic _orderLogic; /// /// Бизнес-логика для исполнителей /// private readonly IImplementerLogic _implementerLogic; /// /// Конструктор /// /// /// /// public ImplementerController(IOrderLogic orderLogic, IImplementerLogic implementerLogic, ILogger logger) { _logger = logger; _orderLogic = orderLogic; _implementerLogic = implementerLogic; } /// /// Авторизация исполнителя /// /// /// /// [HttpGet] public ImplementerViewModel? Login(string login, string password) { try { return _implementerLogic.ReadElement(new ImplementerSearchModel { ImplementerFIO = login, Password = password }); } catch (Exception ex) { _logger.LogError(ex, "Ошибка входа сотрудника"); throw; } } /// /// Получение новых заказов /// /// [HttpGet] public List? GetNewOrders() { try { return _orderLogic.ReadList(new OrderSearchModel { Status = OrderStatus.Принят }); } catch (Exception ex) { _logger.LogError(ex, "Ошибка получения новых заказов"); throw; } } /// /// Получение текущего заказа исполнителя /// /// /// [HttpGet] public OrderViewModel? GetImplementerOrder(int implementerId) { try { return _orderLogic.ReadElement(new OrderSearchModel { ImplementerId = implementerId }); } catch (Exception ex) { _logger.LogError(ex, "Ошибка получения текущего заказа исполнителя"); throw; } } /// /// Смена статуса заказа (Выполняется) /// /// [HttpPost] public void TakeOrderInWork(OrderBindingModel model) { try { _orderLogic.TakeOrderInWork(model); } catch (Exception ex) { _logger.LogError(ex, "Ошибка перевода заказа с №{Id} в работу", model.Id); throw; } } /// /// Смена статуса заказа (Выдан) /// /// [HttpPost] public void FinishOrder(OrderBindingModel model) { try { _orderLogic.FinishOrder(model); } catch (Exception ex) { _logger.LogError(ex, "Ошибка отметки о готовности заказа с №{Id}", model.Id); throw; } } } }