CourseWorkElectronicsShop/ElectronicsShop/ElectronicsShopRestAPI/Controllers/EmployeeController.cs

214 lines
5.5 KiB
C#
Raw Normal View History

2024-08-03 22:10:14 +04:00
using ElectronicsShopBusinessLogic.MailWorker;
using ElectronicsShopContracts.BindingModels;
2024-05-27 14:57:41 +04:00
using ElectronicsShopContracts.BusinessLogicContracts;
using ElectronicsShopContracts.SearchModels;
using ElectronicsShopContracts.ViewModels;
2024-05-28 12:50:24 +04:00
using ElectronicsShopDataBaseImplement.Models;
2024-05-27 14:57:41 +04:00
using Microsoft.AspNetCore.Mvc;
namespace ElectronicsShopRestAPI.Controllers {
[Route("api/[controller]/[action]")]
[ApiController]
public class EmployeeController : Controller {
private readonly ILogger _logger;
private readonly IEmployeeLogic _logic;
2024-05-28 12:50:24 +04:00
private readonly ICostItemLogic _costItem;
private readonly IProductLogic _productLogic;
2024-07-29 21:12:31 +04:00
private readonly IReportEmployeeLogic _reportEmployeeLogic;
2024-08-03 22:10:14 +04:00
private readonly AbstractMailWorker _mailWorker;
2024-05-27 14:57:41 +04:00
2024-07-29 21:12:31 +04:00
public EmployeeController(ILogger<EmployeeController> logger, IEmployeeLogic logic, ICostItemLogic costItem, IProductLogic productLogic,
2024-08-03 22:10:14 +04:00
IReportEmployeeLogic reportEmployeeLogic, AbstractMailWorker mailWorker) {
2024-05-27 14:57:41 +04:00
_logger = logger;
_logic = logic;
2024-05-28 12:50:24 +04:00
_costItem = costItem;
_productLogic = productLogic;
2024-07-29 21:12:31 +04:00
_reportEmployeeLogic = reportEmployeeLogic;
2024-08-03 22:10:14 +04:00
_mailWorker = mailWorker;
2024-05-27 14:57:41 +04:00
}
[HttpGet]
public EmployeeViewModel? Login(string login, string password) {
try {
2024-05-27 17:35:14 +04:00
return _logic.ReadElement(new EmployeeSearchModel {
2024-08-03 23:12:04 +04:00
Email = login,
2024-05-27 14:57:41 +04:00
Password = password
});
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка входа в систему");
throw;
}
}
[HttpPost]
public void Register(EmployeeBindingModel model) {
try {
_logic.Create(model);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка регистрации");
throw;
}
}
[HttpPost]
public void UpdateData(EmployeeBindingModel model) {
try {
_logic.Update(model);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка обновления данных");
throw;
}
}
2024-05-28 12:50:24 +04:00
[HttpPost]
public void CreateCostItem(CostItemBindingModel model) {
try {
_costItem.Create(model);
}
catch (Exception ex) {
2024-05-30 23:49:53 +04:00
_logger.LogError(ex, "Ошибка создания статьи");
2024-05-28 12:50:24 +04:00
throw;
}
}
[HttpGet]
public List<CostItemViewModel>? GetCostItems(int _employeeID) {
try {
return _costItem.ReadList(new CostItemSearchModel { EmployeeID = _employeeID });
}
catch (Exception ex) {
_logger.LogError(ex, $"Ошибка получения данных списка заказов сотрудника ID ={_employeeID}");
throw;
}
}
[HttpGet]
public CostItemViewModel? GetCostItem(int _costItemID) {
try {
return _costItem.ReadElement(new CostItemSearchModel { ID = _costItemID });
}
catch (Exception ex) {
_logger.LogError(ex, $"Ошибка получения статьи затрат ID={_costItemID}");
throw;
}
}
2024-05-30 13:08:24 +04:00
[HttpPost]
public void EditCostItem(CostItemBindingModel model) {
try {
_costItem.Update(model);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка обновления данных");
throw;
}
}
[HttpPost]
public void DeleteCostItem(CostItemBindingModel model) {
try {
_costItem.Delete(model);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка удаления статьи затрат");
throw;
}
}
2024-05-28 12:50:24 +04:00
[HttpPost]
public void CreateProduct(ProductBindingModel model) {
try {
_productLogic.Create(model);
}
catch(Exception ex) {
2024-05-29 21:21:17 +04:00
_logger.LogError(ex, "Ошибка создания товара");
throw;
}
}
[HttpPost]
public void EditProduct(ProductBindingModel model) {
try {
_productLogic.Update(model);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка обновления товара");
2024-05-28 12:50:24 +04:00
throw;
}
}
2024-05-29 21:45:37 +04:00
[HttpPost]
public void DeleteProduct(ProductBindingModel model) {
try {
_productLogic.Delete(model);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка удаления товара");
throw;
}
}
2024-07-29 21:12:31 +04:00
[HttpGet]
public byte[]? CreateDocxReport(string from, string to) {
try {
var document = _reportEmployeeLogic.SaveProductsToWordFile(new ReportProductBindingModel {
DateFrom = DateTime.Parse(from),
DateTo = DateTime.Parse(to)
});
return document;
}
catch (Exception ex) {
_logger.LogError(ex, $"Ошибка создания файла");
throw;
}
}
2024-07-30 15:36:42 +04:00
[HttpGet]
public byte[]? CreateXlsxReport(string from, string to) {
try {
var document = _reportEmployeeLogic.SaveProductsToExcelFile(new ReportProductBindingModel {
DateFrom = DateTime.Parse(from),
DateTo = DateTime.Parse(to)
});
return document;
}
catch (Exception ex){
_logger.LogError(ex, $"Ошибка создания файла");
throw;
}
}
2024-08-01 15:04:29 +04:00
2024-08-03 22:10:14 +04:00
[HttpPost]
public void SendReportMail(ReportBindingModel model) {
2024-08-01 15:04:29 +04:00
try {
var document = _reportEmployeeLogic.SaveProductsToPdfFile(new ReportProductBindingModel {
2024-08-03 22:10:14 +04:00
DateFrom = model.DateFrom,
DateTo = model.DateTo,
2024-08-01 15:04:29 +04:00
});
2024-08-03 22:10:14 +04:00
MemoryStream stream = new MemoryStream();
document.Save(stream, true);
byte[] data = stream.ToArray();
_mailWorker.MailSendAsync(new() {
MailAddress = model.ClientEmail,
Subject = "Отчет",
Text = $"Отчет по товарам с указанием оплат с {model.DateFrom.ToShortDateString()} по {model.DateTo.ToShortDateString()}",
document = data
});
2024-08-01 15:04:29 +04:00
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка создания файла");
throw;
}
}
2024-05-27 14:57:41 +04:00
}
}