250 lines
8.6 KiB
C#
Raw Normal View History

2024-08-19 17:49:44 +04:00
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Routing;
using ServiceStationBusinessLogic.MailKitWorker;
using ServiceStationContracts.BindingModels;
using ServiceStationContracts.BusinessLogic;
using ServiceStationContracts.SearchModels;
2024-08-20 10:37:39 +04:00
using ServiceStationContracts.StorageContracts;
2024-08-19 17:49:44 +04:00
using ServiceStationContracts.ViewModels;
namespace ServiceStationRestAPI.Controllers {
[Route("api/[controller]/[action]")]
[ApiController]
public class MainController : Controller {
private readonly ILogger _logger;
private readonly IClientLogic _clientLogic;
private readonly IExecutorLogic _executorLogic;
private readonly IReportLogic _reportLogic;
private readonly ITaskLogic _taskLogic;
private readonly IWorkLogic _workLogic;
2024-08-20 10:37:39 +04:00
private readonly IWorkClientLogic _workClientLogic;
2024-08-19 17:49:44 +04:00
private readonly AbstractMailWorker _mailWorker;
public MainController(ILogger<MainController> logger, IClientLogic clientLogic, IExecutorLogic executorLogic,
2024-08-20 10:37:39 +04:00
IReportLogic reportLogic, ITaskLogic taskLogic, IWorkLogic workLogic, IWorkClientLogic workClientLogic,
AbstractMailWorker mailWorker) {
2024-08-19 17:49:44 +04:00
_logger = logger;
_clientLogic = clientLogic;
_executorLogic = executorLogic;
_reportLogic = reportLogic;
_taskLogic = taskLogic;
_workLogic = workLogic;
2024-08-20 10:37:39 +04:00
_workClientLogic = workClientLogic;
2024-08-19 17:49:44 +04:00
_mailWorker = mailWorker;
}
[HttpPost]
public void Register(ExecutorBindingModel model) {
try {
_executorLogic.Create(model);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка регистрации");
throw;
}
}
[HttpGet]
public ExecutorViewModel? Login(string email, string password) {
try {
return _executorLogic.ReadElement(new ExecutorSearchModel {
Email = email,
Password = password
});
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка входа в систему");
throw;
}
}
[HttpPost]
public void UpdateData(ExecutorBindingModel model) {
try {
_executorLogic.Update(model);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка обновления данных");
throw;
}
}
2024-08-19 18:27:54 +04:00
[ApiExplorerSettings(IgnoreApi = true)]
2024-08-19 17:49:44 +04:00
public WorkBindingModel Make_New_Record_Work(WorkFromWebBindingModel model) {
var record = new WorkBindingModel {
Id = model.Id,
Date = model.Date,
Price = model.Price,
ExecutorId = model.ExecutorId,
TaskId = model.TaskId,
ClientList = new()
};
foreach (char id in model.client_ids) {
if (int.TryParse(id.ToString(), out int _id)) {
var client = _clientLogic.ReadElement(new ClientSearchModel { Id = _id }) ?? throw new Exception("Ошибка получения данных");
record.ClientList.Add(client.Id, (client));
}
}
return record;
}
[HttpPost]
public void CreateWork(WorkFromWebBindingModel model) {
var record = Make_New_Record_Work(model);
try {
_workLogic.Create(record);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка создания работы");
throw;
}
}
[HttpPost]
public void UpdateWork(WorkFromWebBindingModel model) {
var record = Make_New_Record_Work(model);
try {
_workLogic.Update(record);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка обновления работы");
}
}
[HttpPost]
public void DeleteWork(WorkBindingModel model) {
try {
_workLogic.Delete(model);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка удаления работы");
throw;
}
}
[HttpGet]
public List<WorkViewModel>? GetWorks(int _executorId) {
try {
return _workLogic.ReadList(new WorkSearchModel {
ExecutorId = _executorId
});
}
catch (Exception ex) {
_logger.LogError(ex, $"Ошибка получения работ исполнителя || id = {_executorId}");
throw;
}
}
[HttpGet]
public WorkViewModel? GetWork(int _workId) {
try {
return _workLogic.ReadElement(new WorkSearchModel { Id = _workId });
}
catch (Exception ex) {
_logger.LogError(ex, $"Ошибка получения работы || work_id = {_workId}");
throw;
}
}
[HttpGet]
public List<TaskViewModel>? GetTasks() {
try {
return _taskLogic.ReadList();
}
catch (Exception ex) {
_logger.LogError(ex, $"Ошибка получения задач");
throw;
}
}
[HttpGet]
public List<ClientViewModel>? GetClients() {
try {
return _clientLogic.ReadList();
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка получения клиентов");
throw;
}
}
2024-08-20 10:37:39 +04:00
[HttpPost]
public void AddClientPoints(WorkClientBindingModel model) {
try {
_workClientLogic.Add_Points(model);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка добавления баллов");
throw;
}
}
2024-08-19 17:49:44 +04:00
2024-08-19 18:27:54 +04:00
[ApiExplorerSettings(IgnoreApi = true)]
2024-08-19 17:49:44 +04:00
public List<int> Make_Report_Ids(string _ids) {
var ids = new List<int>();
foreach (char id in _ids) {
if (int.TryParse(id.ToString(), out int _id)) {
ids.Add(_id);
}
}
return ids;
}
[HttpGet]
public byte[]? CreateWordReport(string _ids) {
var ids_list = Make_Report_Ids(_ids);
try {
var document = _reportLogic.SaveToWordFile(new ReportBindeingModel {
ids = ids_list
});
return document;
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка создания документа");
throw;
}
}
[HttpGet]
public byte[]? CreateXlsxReport(string _ids) {
var ids_list = Make_Report_Ids(_ids);
try {
var document = _reportLogic.SaveToExcelFile(new ReportBindeingModel {
ids = ids_list
});
return document;
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка создания документа");
throw;
}
}
[HttpPost]
public void SendReportPdfMail(ReportBindeingModel model) {
try {
var _document = _reportLogic.SaveToPdfFile(model);
MemoryStream stream = new();
_document.Save(stream, true);
byte[] data = stream.ToArray();
_mailWorker.MailSendAsync(new() {
MailAddress = model.EmailAddress,
Subject = "Отчет",
Text = $"Отчет по работам с указания назначенных заданий за период с {model.DateFrom.ToLongDateString()} по " +
$"{model.DateTo.ToShortDateString()}",
document = data
});
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка создания/отправки отчета на почту");
throw;
}
}
}
}