using AircraftPlantContracts.BindingModels;
using AircraftPlantContracts.BusinessLogicsContracts;
using AircraftPlantContracts.SearchModels;
using AircraftPlantContracts.ViewModels;
using Microsoft.AspNetCore.Mvc;
namespace AircraftPlantRestApi.Controllers
{
///
/// Контроллер для работы с заказами
///
[Route("api/[controller]/[action]")]
[ApiController]
public class MainController : Controller
{
///
/// Логгер
///
private readonly ILogger _logger;
///
/// Бизнес-логика для заказов
///
private readonly IOrderLogic _orderLogic;
///
/// Бизнес-логика для изделий
///
private readonly IPlaneLogic _planeLogic;
///
/// Конструктор
///
///
///
///
public MainController(ILogger logger, IOrderLogic orderLogic, IPlaneLogic planeLogic)
{
_logger = logger;
_orderLogic = orderLogic;
_planeLogic = planeLogic;
}
///
/// Получение списка изделий
///
///
[HttpGet]
public List? GetPlaneList()
{
try
{
return _planeLogic.ReadList(null);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка получения списка изделий");
throw;
}
}
///
/// Получение изделия
///
///
///
[HttpGet]
public PlaneViewModel? GetPlane(int planeId)
{
try
{
return _planeLogic.ReadElement(new PlaneSearchModel { Id = planeId });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка получения изделия с Id: {Id}", planeId);
throw;
}
}
///
/// Получение списка заказов клиента
///
///
///
[HttpGet]
public List? GetOrders(int clientId)
{
try
{
return _orderLogic.ReadList(new OrderSearchModel { ClientId = clientId });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка получения списка заказов клиента с Id: {Id}", clientId);
throw;
}
}
///
/// Создание заказа
///
///
[HttpPost]
public void CreateOrder(OrderBindingModel model)
{
try
{
_orderLogic.CreateOrder(model);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка создания заказа");
throw;
}
}
}
}