CourseWorkElectronicsShop/ElectronicsShop/ElectronicsShopRestAPI/Controllers/EmployeeController.cs

228 lines
6.0 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using ElectronicsShopBusinessLogic.MailWorker;
using ElectronicsShopContracts.BindingModels;
using ElectronicsShopContracts.BusinessLogicContracts;
using ElectronicsShopContracts.SearchModels;
using ElectronicsShopContracts.ViewModels;
using ElectronicsShopDataBaseImplement.Models;
using Microsoft.AspNetCore.Mvc;
namespace ElectronicsShopRestAPI.Controllers {
[Route("api/[controller]/[action]")]
[ApiController]
public class EmployeeController : Controller {
private readonly ILogger _logger;
private readonly IEmployeeLogic _logic;
private readonly ICostItemLogic _costItem;
private readonly IProductLogic _productLogic;
private readonly IReportEmployeeLogic _reportEmployeeLogic;
private readonly AbstractMailWorker _mailWorker;
public EmployeeController(ILogger<EmployeeController> logger, IEmployeeLogic logic, ICostItemLogic costItem, IProductLogic productLogic,
IReportEmployeeLogic reportEmployeeLogic, AbstractMailWorker mailWorker) {
_logger = logger;
_logic = logic;
_costItem = costItem;
_productLogic = productLogic;
_reportEmployeeLogic = reportEmployeeLogic;
_mailWorker = mailWorker;
}
[HttpGet]
public EmployeeViewModel? Login(string login, string password) {
try {
return _logic.ReadElement(new EmployeeSearchModel {
Email = login,
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;
}
}
[HttpPost]
public void CreateCostItem(CostItemBindingModel model) {
try {
_costItem.Create(model);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка создания статьи");
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;
}
}
[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;
}
}
[HttpPost]
public void CreateProduct(ProductBindingModel model) {
try {
_productLogic.Create(model);
}
catch(Exception ex) {
_logger.LogError(ex, "Ошибка создания товара");
throw;
}
}
[HttpPost]
public void EditProduct(ProductBindingModel model) {
try {
_productLogic.Update(model);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка обновления товара");
throw;
}
}
[HttpPost]
public void DeleteProduct(ProductBindingModel model) {
try {
_productLogic.Delete(model);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка удаления товара");
throw;
}
}
[HttpGet]
public byte[]? CreateDocxReport(string _ids) {
try {
List<ProductViewModel> _products = new();
foreach (char i in _ids) {
if (int.TryParse(i.ToString(), out int id)) {
var product = _productLogic.ReadElement(new ProductSearchModel { ID = id }) ?? throw new Exception("Ошибка получения данных");
_products.Add(product);
}
}
var document = _reportEmployeeLogic.SaveProductsToWordFile(_products);
return document;
}
catch (Exception ex) {
_logger.LogError(ex, $"Ошибка создания файла");
throw;
}
}
[HttpGet]
public byte[]? CreateXlsxReport(string _ids) {
try {
List<ProductViewModel> _products = new();
foreach (char i in _ids) {
if (int.TryParse(i.ToString(), out int id)) {
var product = _productLogic.ReadElement(new ProductSearchModel { ID = id }) ?? throw new Exception("Ошибка получения данных");
_products.Add(product);
}
}
var document = _reportEmployeeLogic.SaveProductsToExcelFile(_products);
return document;
}
catch (Exception ex){
_logger.LogError(ex, $"Ошибка создания файла");
throw;
}
}
[HttpPost]
public void SendReportMail(ReportBindingModel model) {
try {
var document = _reportEmployeeLogic.SaveProductsToPdfFile(new ReportProductBindingModel {
DateFrom = model.DateFrom,
DateTo = model.DateTo,
});
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
});
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка создания файла");
throw;
}
}
}
}