diff --git a/ComputerShopProvider/ComputerShopBusinessLogic/BusinessLogics/AssemblyLogic.cs b/ComputerShopProvider/ComputerShopBusinessLogic/BusinessLogics/AssemblyLogic.cs index 1f7455d..5568228 100644 --- a/ComputerShopProvider/ComputerShopBusinessLogic/BusinessLogics/AssemblyLogic.cs +++ b/ComputerShopProvider/ComputerShopBusinessLogic/BusinessLogics/AssemblyLogic.cs @@ -3,6 +3,7 @@ using ComputerShopContracts.BusinessLogicContracts; using ComputerShopContracts.SearchModels; using ComputerShopContracts.StorageContracts; using ComputerShopContracts.ViewModels; +using ComputerShopDataModels.Models; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; @@ -16,11 +17,13 @@ namespace ComputerShopBusinessLogic.BusinessLogics { private readonly ILogger _logger; private readonly IAssemblyStorage _assemblyStorage; + private readonly IComponentStorage _componentStorage; - public AssemblyLogic(ILogger logger, IAssemblyStorage assemblyStorage) + public AssemblyLogic(ILogger logger, IAssemblyStorage assemblyStorage, IComponentStorage componentStorage) { _logger = logger; _assemblyStorage = assemblyStorage; + _componentStorage = componentStorage; } public bool Create(AssemblyBindingModel model) @@ -87,6 +90,38 @@ namespace ComputerShopBusinessLogic.BusinessLogics return true; } + public bool AddComponentToAssembly(AssemblySearchModel model, ComponentSearchModel componentmodel, int amount) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + + _logger.LogInformation("AddComponentToAssembly. AssemblyName:{AssemblyName}.Id:{ Id}", model.AssemblyName, model.Id); + var element = _assemblyStorage.GetElement(model); + var component = _componentStorage.GetElement(componentmodel); + + if (element == null || component == null) + { + return false; + } + + _logger.LogInformation("AddComponentToAssembly find. Id:{Id}", element.Id); + + element.AssemblyComponents[component.Id] = (component, amount); + + _assemblyStorage.Update(new() + { + Id = element.Id, + AssemblyName = element.AssemblyName, + Price = element.Price + component.Cost * amount, + ClientId = element.ClientId, + AssemblyComponents = element.AssemblyComponents, + }); + + return true; + } + private void CheckModel(AssemblyBindingModel model, bool withParams = true) { if (model == null) @@ -101,10 +136,10 @@ namespace ComputerShopBusinessLogic.BusinessLogics { throw new ArgumentNullException("Нет названия сборки", nameof(model.AssemblyName)); } - //if (model.Price <= 0) - //{ - // throw new ArgumentNullException("Стоимость сборки должна быть больше 0", nameof(model.Price)); - //} + if (model.Price <= 0) + { + throw new ArgumentNullException("Стоимость сборки должна быть больше 0", nameof(model.Price)); + } _logger.LogInformation("Assembly. ComputerName:{AssemblyName}.Price:{ Price}. Id: { Id}", model.AssemblyName, model.Price, model.Id); var element = _assemblyStorage.GetElement(new AssemblySearchModel { diff --git a/ComputerShopProvider/ComputerShopBusinessLogic/BusinessLogics/ComponentLogic.cs b/ComputerShopProvider/ComputerShopBusinessLogic/BusinessLogics/ComponentLogic.cs index 664144e..8228476 100644 --- a/ComputerShopProvider/ComputerShopBusinessLogic/BusinessLogics/ComponentLogic.cs +++ b/ComputerShopProvider/ComputerShopBusinessLogic/BusinessLogics/ComponentLogic.cs @@ -24,8 +24,7 @@ namespace ComputerShopBusinessLogic.BusinessLogics public List? ReadList(ComponentSearchModel? model) { _logger.LogInformation("ReadList. ComponentName:{ComponentName}. Id:{ Id}", model?.ComponentName, model?.Id); - var list = model == null ? _componentStorage.GetFullList() : - _componentStorage.GetFilteredList(model); + var list = model == null ? _componentStorage.GetFullList() : _componentStorage.GetFilteredList(model); if (list == null) { _logger.LogWarning("ReadList return null list"); diff --git a/ComputerShopProvider/ComputerShopClientApp/Controllers/HomeController.cs b/ComputerShopProvider/ComputerShopClientApp/Controllers/HomeController.cs index ff12442..96c8fda 100644 --- a/ComputerShopProvider/ComputerShopClientApp/Controllers/HomeController.cs +++ b/ComputerShopProvider/ComputerShopClientApp/Controllers/HomeController.cs @@ -1,5 +1,6 @@ using ComputerShopClientApp.Models; using ComputerShopContracts.BindingModels; +using ComputerShopContracts.SearchModels; using ComputerShopContracts.ViewModels; using Microsoft.AspNetCore.Mvc; using System.Diagnostics; @@ -30,7 +31,7 @@ namespace ComputerShopClientApp.Controllers { return Redirect("~/Home/Enter"); } - return View(APIClient.GetRequest>($"api/component/getcomponentlist")); + return View(APIClient.GetRequest>($"api/component/getcomponentlist?clientId={APIClient.Client.Id}")); } public IActionResult Assembly() { @@ -129,7 +130,7 @@ namespace ComputerShopClientApp.Controllers [HttpGet] public IActionResult CreatePurchase() { - ViewBag.Components = APIClient.GetRequest>("api/main/getcomponentlist"); + ViewBag.Components = APIClient.GetRequest>($"api/main/getcomponentlist?clientId={APIClient.Client.Id}"); return View(); } @@ -182,7 +183,7 @@ namespace ComputerShopClientApp.Controllers [HttpGet] public IActionResult DeleteComponent() { - ViewBag.Components = APIClient.GetRequest>("api/main/getcomponentlist"); + ViewBag.Components = APIClient.GetRequest>($"api/main/getcomponentlist?clientId={APIClient.Client.Id}"); return View(); } [HttpDelete] @@ -202,7 +203,7 @@ namespace ComputerShopClientApp.Controllers [HttpGet] public IActionResult CreateAssembly() { - ViewBag.Components = APIClient.GetRequest>("api/component/getcomponentlist"); + ViewBag.Components = APIClient.GetRequest>($"api/component/getcomponentlist?clientId={APIClient.Client.Id}"); ViewBag.CurrentComponents = new List(); return View(); } @@ -249,6 +250,32 @@ namespace ComputerShopClientApp.Controllers Response.Redirect("Assembly"); } + public IActionResult AddComponentToAssembly() + { + if (APIClient.Client == null) + { + return Redirect("~/Home/Enter"); + } + ViewBag.Assemblies = APIClient.GetRequest>($"api/assembly/getassemblylist?clientId={APIClient.Client.Id}"); + ViewBag.Components = APIClient.GetRequest>($"api/component/getcomponentlist?clientId={APIClient.Client.Id}"); + return View(); + } + + [HttpPost] + public void AddComponentToAssembly(int assembly, int component, int amount) + { + if (APIClient.Client == null) + { + throw new Exception("Необходима авторизация"); + } + APIClient.PostRequest("api/assembly/AddComponentToAssembly", Tuple.Create( + new AssemblySearchModel() { Id = assembly }, + new ComponentSearchModel() { Id = component }, + amount + )); + Response.Redirect("Assembly"); + } + [HttpPost] diff --git a/ComputerShopProvider/ComputerShopClientApp/Views/Home/AddComponentToAssembly.cshtml b/ComputerShopProvider/ComputerShopClientApp/Views/Home/AddComponentToAssembly.cshtml new file mode 100644 index 0000000..cd5ad58 --- /dev/null +++ b/ComputerShopProvider/ComputerShopClientApp/Views/Home/AddComponentToAssembly.cshtml @@ -0,0 +1,31 @@ +@using ComputerShopContracts.ViewModels; +@using ComputerShopDataModels.Models; + +@{ + ViewData["Title"] = "AddComponentToAssembly"; +} + +@model Dictionary + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+
Количество:
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/ComputerShopProvider/ComputerShopContracts/BusinessLogicContracts/IAssemblyLogic.cs b/ComputerShopProvider/ComputerShopContracts/BusinessLogicContracts/IAssemblyLogic.cs index f346b5c..a0c9823 100644 --- a/ComputerShopProvider/ComputerShopContracts/BusinessLogicContracts/IAssemblyLogic.cs +++ b/ComputerShopProvider/ComputerShopContracts/BusinessLogicContracts/IAssemblyLogic.cs @@ -1,6 +1,7 @@ using ComputerShopContracts.BindingModels; using ComputerShopContracts.SearchModels; using ComputerShopContracts.ViewModels; +using ComputerShopDataModels.Models; using System; using System.Collections.Generic; using System.Linq; @@ -16,5 +17,6 @@ namespace ComputerShopContracts.BusinessLogicContracts bool Create(AssemblyBindingModel model); bool Update(AssemblyBindingModel model); bool Delete(AssemblyBindingModel model); + bool AddComponentToAssembly(AssemblySearchModel model, ComponentSearchModel componentmodel, int amount); } } diff --git a/ComputerShopProvider/ComputerShopDatabaseImplement/Implements/ComponentStorage.cs b/ComputerShopProvider/ComputerShopDatabaseImplement/Implements/ComponentStorage.cs index 13aac14..10c3c3c 100644 --- a/ComputerShopProvider/ComputerShopDatabaseImplement/Implements/ComponentStorage.cs +++ b/ComputerShopProvider/ComputerShopDatabaseImplement/Implements/ComponentStorage.cs @@ -23,15 +23,25 @@ namespace ComputerShopDatabaseImplement.Implements public List GetFilteredList(ComponentSearchModel model) { - if (string.IsNullOrEmpty(model.ComponentName)) + if (string.IsNullOrEmpty(model.ComponentName) && model.ClientId == null) { return new(); } using var context = new ComputerShopDatabase(); - return context.Components - .Where(x => x.ComponentName.Contains(model.ComponentName)) - .Select(x => x.GetViewModel) - .ToList(); + if (!string.IsNullOrEmpty(model.ComponentName)) + { + return context.Components + .Where(x => x.ComponentName.Contains(model.ComponentName)) + .Select(x => x.GetViewModel) + .ToList(); + } + else + { + return context.Components + .Where(x => x.ClientId == model.ClientId) + .Select(x => x.GetViewModel) + .ToList(); + } } public ComponentViewModel? GetElement(ComponentSearchModel model) { diff --git a/ComputerShopProvider/ComputerShopRestApi/Controllers/AssemblyController.cs b/ComputerShopProvider/ComputerShopRestApi/Controllers/AssemblyController.cs index 154fcdf..6b67628 100644 --- a/ComputerShopProvider/ComputerShopRestApi/Controllers/AssemblyController.cs +++ b/ComputerShopProvider/ComputerShopRestApi/Controllers/AssemblyController.cs @@ -2,6 +2,7 @@ using ComputerShopContracts.BusinessLogicContracts; using ComputerShopContracts.SearchModels; using ComputerShopContracts.ViewModels; +using ComputerShopDataModels.Models; using Microsoft.AspNetCore.Mvc; namespace ComputerShopRestApi.Controllers @@ -74,5 +75,19 @@ namespace ComputerShopRestApi.Controllers throw; } } + + [HttpPost] + public void AddComponentToAssembly(Tuple model) + { + try + { + _assembly.AddComponentToAssembly(model.Item1, model.Item2, model.Item3); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка добавления компонента в сборку."); + throw; + } + } } } diff --git a/ComputerShopProvider/ComputerShopRestApi/Controllers/ComponentController.cs b/ComputerShopProvider/ComputerShopRestApi/Controllers/ComponentController.cs index 91e20b1..eea994d 100644 --- a/ComputerShopProvider/ComputerShopRestApi/Controllers/ComponentController.cs +++ b/ComputerShopProvider/ComputerShopRestApi/Controllers/ComponentController.cs @@ -3,6 +3,7 @@ using ComputerShopContracts.BindingModels; using ComputerShopContracts.BusinessLogicContracts; using ComputerShopContracts.SearchModels; using ComputerShopContracts.ViewModels; +using System.Reflection; namespace ComputerShopRestApi.Controllers { @@ -18,11 +19,14 @@ namespace ComputerShopRestApi.Controllers _component = component; } [HttpGet] - public List? GetComponentList() + public List? GetComponentList(int clientId) { try { - return _component.ReadList(null); + return _component.ReadList(new ComponentSearchModel + { + ClientId = clientId, + }); } catch (Exception ex) {