using ComputerShopBusinessLogic.MailWorker; using ComputerShopContracts.BindingModels; using ComputerShopContracts.BusinessLogicContracts; using ComputerShopContracts.SearchModels; using ComputerShopContracts.ViewModels; using Microsoft.AspNetCore.Mvc; namespace ComputerShopRestApi.Controllers { [Route("api/[controller]/[action]")] [ApiController] public class ComponentController : Controller { private readonly ILogger _logger; private readonly IComponentLogic _componentLogic; private readonly IReportGuarantorLogic _reportLogic; private readonly AbstractMailWorker _mailWorker; public ComponentController(IComponentLogic Logic, ILogger Logger, IReportGuarantorLogic ReportLogic, AbstractMailWorker MailWorker) { _logger = Logger; _componentLogic = Logic; _reportLogic = ReportLogic; _mailWorker = MailWorker; } [HttpGet] public ComponentViewModel? GetComponent(int Id) { try { return _componentLogic.ReadElement(new ComponentSearchModel { Id = Id }); } catch (Exception ex) { _logger.LogError(ex, "Ошибка получения комплектующей"); throw; } } [HttpGet] public List? GetComponents(int? UserId) { try { return _componentLogic.ReadList(new ComponentSearchModel { UserId = UserId }); } catch (Exception ex) { _logger.LogError(ex, "Ошибка получения списка комплектующих пользователя с Id = {Id}", UserId); throw; } } [HttpPost] public void CreateComponent(ComponentBindingModel Model) { try { _componentLogic.Create(Model); } catch (Exception ex) { _logger.LogError(ex, "Ошибка создания комплектующей"); throw; } } [HttpPost] public void UpdateComponent(ComponentBindingModel Model) { try { _componentLogic.Update(Model); } catch (Exception ex) { _logger.LogError(ex, "Ошибка обновления комплектующей"); throw; } } [HttpPost] public void DeleteComponent(ComponentBindingModel Model) { try { _componentLogic.Delete(Model); } catch (Exception ex) { _logger.LogError(ex, "Ошибка удаления комплектующей"); throw; } } [HttpPost] public void CreateReportToWordFile(ReportBindingModel Model) { try { _reportLogic.SaveReportToWordFile(Model); } catch (Exception ex) { _logger.LogError(ex, "Ошибка создания отчета"); throw; } } [HttpPost] public void CreateReportToExcelFile(ReportBindingModel Model) { try { _reportLogic.SaveReportToExcelFile(Model); } catch (Exception ex) { _logger.LogError(ex, "Ошибка создания отчета"); throw; } } [HttpPost] public void CreateReportToPdfFile(ReportBindingModel Model) { try { System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); _reportLogic.SaveReportComponentsByRequestDateToPdfFile(Model); } catch (Exception ex) { _logger.LogError(ex, "Ошибка создания отчета"); throw; } } [HttpPost] public void SendPdfToMail(MailSendInfoBindingModel Model) { try { _mailWorker.MailSendAsync(Model); } catch (Exception ex) { _logger.LogError(ex, "Ошибка отправки письма"); throw; } } } }