diff --git a/Pizzeria/PizzeriaClientApp/Controllers/HomeController.cs b/Pizzeria/PizzeriaClientApp/Controllers/HomeController.cs index b14add9..fd3c121 100644 --- a/Pizzeria/PizzeriaClientApp/Controllers/HomeController.cs +++ b/Pizzeria/PizzeriaClientApp/Controllers/HomeController.cs @@ -1,168 +1,147 @@ -using PizzeriaDataModels.Enums; +using Microsoft.AspNetCore.Mvc; +using PizzeriaClientApp.Models; using PizzeriaContracts.BindingModels; -using PizzeriaContracts.BusinessLogicsContracts; -using PizzeriaContracts.SearchModels; -using PizzeriaContracts.StoragesContracts; using PizzeriaContracts.ViewModels; -using PizzeriaBusinessLogic.MailWorker; +using System.Diagnostics; -namespace PizzeriaBusinessLogic.BusinessLogics +namespace PizzeriaClientApp.Controllers { - public class OrderLogic : IOrderLogic + public class HomeController : Controller { - private readonly ILogger _logger; - private readonly IOrderStorage _orderStorage; - private readonly AbstractMailWorker _mailWorker; - static readonly object _locker = new object(); - public OrderLogic(ILogger logger, IOrderStorage orderStorage, AbstractMailWorker mailWorker) + private readonly ILogger _logger; + + public HomeController(ILogger logger) { _logger = logger; - _orderStorage = orderStorage; - _mailWorker = mailWorker; } - public OrderViewModel? ReadElement(OrderSearchModel model) + public IActionResult Index() { - if (model == null) + if (APIClient.Client == null) { - throw new ArgumentNullException(nameof(model)); + return Redirect("~/Home/Enter"); } - _logger.LogInformation("ReadElement. ClientId:{ClientId}.Status:{Status}.ImplementerId:{ImplementerId}.DateFrom:{DateFrom}.DateTo:{DateTo}OrderId:{Id}", - model.ClientId, model.Status, model.ImplementerId, model.DateFrom, model.DateTo, model.Id); - var element = _orderStorage.GetElement(model); - if (element == null) - { - _logger.LogWarning("ReadElement element not found"); - return null; - } - _logger.LogInformation("ReadElement find. Id:{Id}", element.Id); - return element; + return View(APIClient.GetRequest>($"api/main/getorders?clientId={APIClient.Client.Id}")); } - public List? ReadList(OrderSearchModel? model) + [HttpGet] + public IActionResult Privacy() { - _logger.LogInformation("ReadList. ClientId:{ClientId}.Status:{Status}.ImplementerId:{ImplementerId}.DateFrom:{DateFrom}.DateTo:{DateTo}OrderId:{Id}", - model?.ClientId, model?.Status, model?.ImplementerId, model?.DateFrom, model?.DateTo, model?.Id); - var list = model == null ? _orderStorage.GetFullList() : _orderStorage.GetFilteredList(model); - if (list == null) + if (APIClient.Client == null) { - _logger.LogWarning("ReadList return null list"); - return null; + return Redirect("~/Home/Enter"); } - _logger.LogInformation("ReadList. Count:{Count}", list.Count); - return list; + return View(APIClient.Client); } - public bool CreateOrder(OrderBindingModel model) + [HttpPost] + public void Privacy(string login, string password, string fio) { - CheckModel(model); - if (model.Status != OrderStatus.Неизвестен) - return false; - model.Status = OrderStatus.Принят; - var element = _orderStorage.Insert(model); - if (element == null) + if (APIClient.Client == null) { - _logger.LogWarning("Insert operation failed"); - return false; + throw new Exception("Вы как суда попали? Суда вход только авторизованным"); } - Task.Run(() => _mailWorker.MailSendAsync(new MailSendInfoBindingModel + if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(fio)) { - MailAddress = element.ClientEmail, - Subject = $"Изменение статуса заказа номер {element.Id}", - Text = $"Ваш заказ номер {element.Id} на пиццу {element.PizzaName} от {element.DateCreate} на сумму {element.Sum} принят." - })); - return true; - } - - public bool TakeOrderInWork(OrderBindingModel model) - { - lock (_locker) - { - return ChangeStatus(model, OrderStatus.Выполняется); + throw new Exception("Введите логин, пароль и ФИО"); } - } - - public bool FinishOrder(OrderBindingModel model) - { - return ChangeStatus(model, OrderStatus.Готов); - } - - public bool DeliveryOrder(OrderBindingModel model) - { - return ChangeStatus(model, OrderStatus.Выдан); - } - - private void CheckModel(OrderBindingModel model, bool withParams = true) - { - if (model == null) + APIClient.PostRequest("api/client/updatedata", new ClientBindingModel { - throw new ArgumentNullException(nameof(model)); - } - if (!withParams) - { - return; - } - if (model.Count <= 0) - { - throw new ArgumentException("Колличество пиццы в заказе не может быть меньше 1", nameof(model.Count)); - } - if (model.Sum <= 0) - { - throw new ArgumentException("Стоимость заказа на может быть меньше 1", nameof(model.Sum)); - } - if (model.DateImplement.HasValue && model.DateImplement < model.DateCreate) - { - throw new ArithmeticException($"Дата выдачи заказа {model.DateImplement} не может быть раньше даты его создания {model.DateCreate}"); - } - _logger.LogInformation("Pizza. PizzaId:{PizzaId}.Count:{Count}.Sum:{Sum}Id:{Id}", - model.PizzaId, model.Count, model.Sum, model.Id); - } - - private bool ChangeStatus(OrderBindingModel model, OrderStatus requiredStatus) - { - CheckModel(model, false); - var element = _orderStorage.GetElement(new OrderSearchModel() - { - Id = model.Id + Id = APIClient.Client.Id, + ClientFIO = fio, + Email = login, + Password = password }); - if (element == null) + + APIClient.Client.ClientFIO = fio; + APIClient.Client.Email = login; + APIClient.Client.Password = password; + Response.Redirect("Index"); + } + + [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] + public IActionResult Error() + { + return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); + } + + [HttpGet] + public IActionResult Enter() + { + return View(); + } + + [HttpPost] + public void Enter(string login, string password) + { + if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password)) { - throw new InvalidOperationException(nameof(element)); + throw new Exception("Введите логин и пароль"); } - model.DateCreate = element.DateCreate; - model.PizzaId = element.PizzaId; - model.DateImplement = element.DateImplement; - model.ClientId = element.ClientId; - if (!model.ImplementerId.HasValue) + APIClient.Client = APIClient.GetRequest($"api/client/login?login={login}&password={password}"); + if (APIClient.Client == null) { - model.ImplementerId = element.ImplementerId; + throw new Exception("Неверный логин/пароль"); } - model.Status = element.Status; - model.Count = element.Count; - model.Sum = element.Sum; - if (requiredStatus - model.Status == 1) + Response.Redirect("Index"); + } + + [HttpGet] + public IActionResult Register() + { + return View(); + } + + [HttpPost] + public void Register(string login, string password, string fio) + { + if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(fio)) { - model.Status = requiredStatus; - if (model.Status == OrderStatus.Готов) - { - model.DateImplement = DateTime.Now; - } - if (_orderStorage.Update(model) == null) - { - _logger.LogWarning("Update operation failed"); - return false; - } - string DateInfo = model.DateImplement.HasValue ? $"Дата выполнения {model.DateImplement}" : ""; - Task.Run(() => _mailWorker.MailSendAsync(new MailSendInfoBindingModel - { - MailAddress = element.ClientEmail, - Subject = $"Изменение статуса заказа номер {element.Id}", - Text = $"Ваш заказ номер {element.Id} на пиццу {element.PizzaName} от {element.DateCreate} на сумму {element.Sum} {model.Status}. {DateInfo}" - })); - return true; + throw new Exception("Введите логин, пароль и ФИО"); } - _logger.LogWarning("Changing status operation faled: Current-{Status}:required-{requiredStatus}.", model.Status, requiredStatus); - throw new InvalidOperationException($"Невозможно приствоить статус {requiredStatus} заказу с текущим статусом {model.Status}"); + APIClient.PostRequest("api/client/register", new ClientBindingModel + { + ClientFIO = fio, + Email = login, + Password = password + }); + Response.Redirect("Enter"); + return; + } + + [HttpGet] + public IActionResult Create() + { + ViewBag.Pizzas = APIClient.GetRequest>("api/main/getpizzalist"); + return View(); + } + + [HttpPost] + public void Create(int pizza, int count) + { + if (APIClient.Client == null) + { + throw new Exception("Вы как суда попали? Суда вход только авторизованным"); + } + if (count <= 0) + { + throw new Exception("Количество и сумма должны быть больше 0"); + } + APIClient.PostRequest("api/main/createorder", new OrderBindingModel + { + ClientId = APIClient.Client.Id, + PizzaId = pizza, + Count = count, + Sum = Calc(count, pizza) + }); + Response.Redirect("Index"); + } + + [HttpPost] + public double Calc(int count, int pizza) + { + var piz = APIClient.GetRequest($"api/main/getpizza?pizzaId={pizza}"); + return count * (piz?.Price ?? 1); } } }