From e7a7ba5411476a9f300801ac22f4f4a8a89443f6 Mon Sep 17 00:00:00 2001 From: Programmist73 Date: Sat, 25 Mar 2023 18:03:20 +0400 Subject: [PATCH] =?UTF-8?q?LabWork05=20=D0=BF=D0=BE=20=D0=B2=D0=B8=D0=B4?= =?UTF-8?q?=D0=B5=D0=BE.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/MainController.cs | 2 +- .../Controllers/HomeController.cs | 184 ++++++++++++++++-- .../BindingModels/OrderBindingModel.cs | 2 + .../SearchModels/OrderSearchModel.cs | 7 +- 4 files changed, 173 insertions(+), 22 deletions(-) diff --git a/BlacksmithWorkshop/BlackmithWorkshopRestApi/Controllers/MainController.cs b/BlacksmithWorkshop/BlackmithWorkshopRestApi/Controllers/MainController.cs index 1e4dc2d..e7492fb 100644 --- a/BlacksmithWorkshop/BlackmithWorkshopRestApi/Controllers/MainController.cs +++ b/BlacksmithWorkshop/BlackmithWorkshopRestApi/Controllers/MainController.cs @@ -67,7 +67,7 @@ namespace BlacksmithWorkshopRestApi.Controllers { return _order.ReadList(new OrderSearchModel { - //ClientId = clientId + ClientId = clientId }); } catch (Exception ex) diff --git a/BlacksmithWorkshop/BlacksmithWorkshopClientApp/Controllers/HomeController.cs b/BlacksmithWorkshop/BlacksmithWorkshopClientApp/Controllers/HomeController.cs index 10236bd..b45b481 100644 --- a/BlacksmithWorkshop/BlacksmithWorkshopClientApp/Controllers/HomeController.cs +++ b/BlacksmithWorkshop/BlacksmithWorkshopClientApp/Controllers/HomeController.cs @@ -1,4 +1,6 @@ using BlacksmithWorkshopClientApp.Models; +using BlacksmithWorkshopContracts.BindingModels; +using BlacksmithWorkshopContracts.ViewModels; using Microsoft.AspNetCore.Mvc; using System.Diagnostics; @@ -6,27 +8,171 @@ namespace BlacksmithWorkshopClientApp.Controllers { public class HomeController : Controller { - private readonly ILogger _logger; + private readonly ILogger _logger; - public HomeController(ILogger logger) - { - _logger = logger; - } + public HomeController(ILogger logger) + { + _logger = logger; + } - public IActionResult Index() - { - return View(); - } + //вытаскивает через API клиента Get-запросом список его собственных заказов + public IActionResult Index() + { + if (APIClient.Client == null) + { + return Redirect("~/Home/Enter"); + } - public IActionResult Privacy() - { - return View(); - } + return View(APIClient.GetRequest>($"api/main/getorders?clientId={APIClient.Client.Id}")); + } - [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] - public IActionResult Error() - { - return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); - } - } + //изменемение ланных Get-ом + [HttpGet] + public IActionResult Privacy() + { + if (APIClient.Client == null) + { + return Redirect("~/Home/Enter"); + } + + return View(APIClient.Client); + } + + //изменение данных Post-ом + [HttpPost] + public void Privacy(string login, string password, string fio) + { + if (APIClient.Client == null) + { + throw new Exception("Вы как сюда попали? Суда вход только авторизованным"); + } + + if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(fio)) + { + throw new Exception("Введите логин, пароль и ФИО"); + } + + APIClient.PostRequest("api/client/updatedata", new ClientBindingModel + { + Id = APIClient.Client.Id, + ClientFIO = fio, + Email = login, + Password = password + }); + + 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 Exception("Введите логин и пароль"); + } + + APIClient.Client = APIClient.GetRequest($"api/client/login?login={login}&password={password}"); + + if (APIClient.Client == null) + { + throw new Exception("Неверный логин/пароль"); + } + + Response.Redirect("Index"); + } + + //просто открытие вьюхи + [HttpGet] + public IActionResult Register() + { + return View(); + } + + //Post-запрос по созданию нового пользователя + [HttpPost] + public void Register(string login, string password, string fio) + { + if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(fio)) + { + throw new Exception("Введите логин, пароль и ФИО"); + } + + APIClient.PostRequest("api/client/register", new ClientBindingModel + { + ClientFIO = fio, + Email = login, + Password = password + }); + + //переход на вкладку "Enter", чтобы пользователь сразу смог зайти + Response.Redirect("Enter"); + + return; + } + + //создание заказа. Получаем и передаём список изделий во вьюху? + [HttpGet] + public IActionResult Create() + { + ViewBag.Manufactures = APIClient.GetRequest>("api/main/getmanufacturelist"); + + return View(); + } + + //создание заказа Post-запросом + [HttpPost] + public void Create(int manufacture, 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, + ManufactureId = manufacture, + Count = count, + Sum = Calc(count, manufacture) + }); + + Response.Redirect("Index"); + } + + //подсчёт стоимости заказа + [HttpPost] + public double Calc(int count, int manufacture) + { + var prod =APIClient.GetRequest($"api/main/getmanufacture?manufactureId={manufacture}" + ); + + return count * (prod?.Price ?? 1); + } + } } \ No newline at end of file diff --git a/BlacksmithWorkshop/BlacksmithWorkshopContracts/BindingModels/OrderBindingModel.cs b/BlacksmithWorkshop/BlacksmithWorkshopContracts/BindingModels/OrderBindingModel.cs index 5ab83dc..f0075de 100644 --- a/BlacksmithWorkshop/BlacksmithWorkshopContracts/BindingModels/OrderBindingModel.cs +++ b/BlacksmithWorkshop/BlacksmithWorkshopContracts/BindingModels/OrderBindingModel.cs @@ -13,6 +13,8 @@ namespace BlacksmithWorkshopContracts.BindingModels { public int Id { get; set; } + public int ClientId { get; set; } + public int ManufactureId { get; set; } public int Count { get; set; } diff --git a/BlacksmithWorkshop/BlacksmithWorkshopContracts/SearchModels/OrderSearchModel.cs b/BlacksmithWorkshop/BlacksmithWorkshopContracts/SearchModels/OrderSearchModel.cs index cbdf9e8..7b26761 100644 --- a/BlacksmithWorkshop/BlacksmithWorkshopContracts/SearchModels/OrderSearchModel.cs +++ b/BlacksmithWorkshop/BlacksmithWorkshopContracts/SearchModels/OrderSearchModel.cs @@ -12,8 +12,11 @@ namespace BlacksmithWorkshopContracts.SearchModels //для поиска по идентификатору public int? Id { get; set; } - //два поля для возможности производить выборку - public DateTime? DateFrom { get; set; } + //для поиска по клиенту + public int? ClientId { get; set; } + + //два поля для возможности производить выборку + public DateTime? DateFrom { get; set; } public DateTime? DateTo { get; set; } }