From 7e98fb81ef045f418cf393f9a6f6b72852edfb09 Mon Sep 17 00:00:00 2001 From: ujijrujijr Date: Tue, 30 Apr 2024 22:44:30 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B5=D0=B4=D1=84=D0=B8=D0=BD?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5=20=D0=B8=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogics/OrderLogic.cs | 11 +--- .../BusinessLogics/RequestLogic.cs | 16 ++--- .../BusinessLogics/ShipmentLogic.cs | 2 - .../BusinessLogics/UserLogic.cs | 4 +- .../BindingModels/OrderBindingModel.cs | 6 -- .../BindingModels/RequestBindingModel.cs | 1 - .../BindingModels/ShipmentBindingModel.cs | 1 - .../BindingModels/UserBindingModel.cs | 8 +-- .../BusinessLogicContracts/IOrderLogic.cs | 1 - .../BusinessLogicContracts/IRequestLogic.cs | 3 +- .../BusinessLogicContracts/IShipmentLogic.cs | 1 - .../StorageContracts/IRequestStorage.cs | 2 +- .../ViewModels/OrderViewModel.cs | 10 ---- .../ViewModels/RequestViewModel.cs | 4 -- .../ViewModels/ShipmentViewModel.cs | 6 +- .../ViewModels/UserViewModel.cs | 5 +- ComputerShopDataModels/Models/IOrderModel.cs | 15 ----- .../Implements/OrderStorage.cs | 7 --- .../Implements/RequestStorage.cs | 14 ++--- .../Implements/ShipmentStorage.cs | 5 +- .../Implements/UserStorage.cs | 13 ++--- ComputerShopDatabaseImplement/Models/Order.cs | 12 +++- .../Models/Request.cs | 58 ++++++++++++++----- .../Models/Shipment.cs | 18 ++---- ComputerShopDatabaseImplement/Models/User.cs | 1 - ComputerShopImplementerApp/APIUser.cs | 4 -- .../Controllers/HomeController.cs | 36 ------------ .../Controllers/OrderController.cs | 2 +- .../Controllers/RequestController.cs | 23 +------- .../Controllers/UserController.cs | 1 - 30 files changed, 87 insertions(+), 203 deletions(-) diff --git a/ComputerShopBusinessLogic/BusinessLogics/OrderLogic.cs b/ComputerShopBusinessLogic/BusinessLogics/OrderLogic.cs index 9cc1298..95d558b 100644 --- a/ComputerShopBusinessLogic/BusinessLogics/OrderLogic.cs +++ b/ComputerShopBusinessLogic/BusinessLogics/OrderLogic.cs @@ -84,7 +84,6 @@ namespace ComputerShopBusinessLogic.BusinessLogics } - //!!!ПРОВЕРИТЬ public bool Update(OrderBindingModel model) { CheckModel(model, false); @@ -113,7 +112,6 @@ namespace ComputerShopBusinessLogic.BusinessLogics return true; } - //!!!ПРОВЕРИТЬ private bool ChangeStatus(OrderBindingModel model, OrderStatus newStatus) { CheckModel(model, false); @@ -133,13 +131,8 @@ namespace ComputerShopBusinessLogic.BusinessLogics } return true; } - if (order.Status + 1 != newStatus) - { - _logger.LogWarning("Change status operation failed. Incorrect new status: {newStatus}. Current status: {currStatus}", newStatus, order.Status); - return false; - } - _logger.LogWarning("Changing status operation faled: current:{Status}: required:{newStatus}.", model.Status, newStatus); - throw new ArgumentException($"Невозможно присвоить статус {newStatus} заказу с текущим статусом {model.Status}"); + _logger.LogWarning("Change status operation failed. Incorrect new status: {newStatus}. Current status: {currStatus}", newStatus, order.Status); + return false; } //Перевод заказа в состояние выполнения diff --git a/ComputerShopBusinessLogic/BusinessLogics/RequestLogic.cs b/ComputerShopBusinessLogic/BusinessLogics/RequestLogic.cs index 603f9c6..59b6772 100644 --- a/ComputerShopBusinessLogic/BusinessLogics/RequestLogic.cs +++ b/ComputerShopBusinessLogic/BusinessLogics/RequestLogic.cs @@ -75,18 +75,10 @@ namespace ComputerShopBusinessLogic.BusinessLogics return true; } - - //!!!мб УДАЛИТЬ - //public bool AddOrder(int requestId, int orderId) - //{ - // return _requestStorage.ConnectRequestAssembly(requestId, assemblyId); - //} - - //!!!ПРОВЕРИТЬ - public bool ConnectRequestAssembly(int requestId, int assemblyId) + public bool ConnectRequestAssembly(RequestBindingModel model) { - _logger.LogInformation("Connect Assembly {rId} with request {aId}", requestId, assemblyId); - return _requestStorage.ConnectRequestAssembly(requestId, assemblyId); + _logger.LogInformation("Connect request {rId} with assembly {aId}", model.Id, model.AssemblyId); + return _requestStorage.ConnectRequestAssembly(model); } public bool Delete(RequestBindingModel model) @@ -100,7 +92,7 @@ namespace ComputerShopBusinessLogic.BusinessLogics } return true; } - //!!!мб проверять, что есть userID + private void CheckModel(RequestBindingModel model, bool withParams = true) { if (model == null) diff --git a/ComputerShopBusinessLogic/BusinessLogics/ShipmentLogic.cs b/ComputerShopBusinessLogic/BusinessLogics/ShipmentLogic.cs index d720d37..e5797dc 100644 --- a/ComputerShopBusinessLogic/BusinessLogics/ShipmentLogic.cs +++ b/ComputerShopBusinessLogic/BusinessLogics/ShipmentLogic.cs @@ -24,8 +24,6 @@ namespace ComputerShopBusinessLogic.BusinessLogics _shipmentStorage = shipmentStorage; } - //!!!ТУТ МБ ПО-ДРУГОМУ ПРИСВАИВАТЬ ЗНАЧЕНИЕ ДЛЯ list (через fulllist) - //!!!ИЛИ СОЗДАТЬ ОТДЕЛЬНЫЙ МЕТОД ReadListUser public List ReadList(ShipmentSearchModel? model) { //model.UserId = -1 для swagger, чтобы можно было считать все партии товаров всех пользователей diff --git a/ComputerShopBusinessLogic/BusinessLogics/UserLogic.cs b/ComputerShopBusinessLogic/BusinessLogics/UserLogic.cs index b966799..2439f5e 100644 --- a/ComputerShopBusinessLogic/BusinessLogics/UserLogic.cs +++ b/ComputerShopBusinessLogic/BusinessLogics/UserLogic.cs @@ -23,7 +23,6 @@ namespace ComputerShopBusinessLogic.BusinessLogics _userStorage = userStorage; } - //!!!мб поменять текст для логов public List? ReadList(UserSearchModel? model) { _logger.LogInformation("User ReadList. Login:{Login} Emain:{Email} Id:{Id}", model?.Login, model?.Email, model?.Id); @@ -88,7 +87,6 @@ namespace ComputerShopBusinessLogic.BusinessLogics return true; } - //!!!мб проверять, что есть userID private void CheckModel(UserBindingModel model, bool withParams = true) { if (model == null) @@ -111,8 +109,8 @@ namespace ComputerShopBusinessLogic.BusinessLogics { throw new ArgumentNullException("Нет почты пользователя", nameof(model.Email)); } - //Проверка на уникальность. Проверить одной сущностью или 2-мя (один с таким же логином, второй с такой же почтой)? + //Проверки на уникальность //проверка уникальности логина var user1 = _userStorage.GetElement(new UserSearchModel { diff --git a/ComputerShopContracts/BindingModels/OrderBindingModel.cs b/ComputerShopContracts/BindingModels/OrderBindingModel.cs index ca040d2..78502dc 100644 --- a/ComputerShopContracts/BindingModels/OrderBindingModel.cs +++ b/ComputerShopContracts/BindingModels/OrderBindingModel.cs @@ -14,12 +14,6 @@ namespace ComputerShopContracts.BindingModels public int UserId { get; set; } - //!!!УДАЛИТЬ (после того, как нормально будут многие-ко-многим между заказами и заявками) - //public Dictionary OrderRequests { get; set; } = new(); - - //!!!УДАЛИТЬ (после того, как нормально будут многие-ко-многим между заказами и партиями) - //public Dictionary OrderShipments { get; set; } = new(); - public DateTime DateCreate { get; set; } = DateTime.Now; public OrderStatus Status { get; set; } = OrderStatus.Неизвестен; diff --git a/ComputerShopContracts/BindingModels/RequestBindingModel.cs b/ComputerShopContracts/BindingModels/RequestBindingModel.cs index 12fed81..f683db4 100644 --- a/ComputerShopContracts/BindingModels/RequestBindingModel.cs +++ b/ComputerShopContracts/BindingModels/RequestBindingModel.cs @@ -17,7 +17,6 @@ namespace ComputerShopContracts.BindingModels public DateTime DateRequest { get; set; } = DateTime.Now; - //!!!МБ НЕ НАДО string.Empty public string ClientFIO { get; set; } = string.Empty; public Dictionary RequestOrders { get; set; } = new(); diff --git a/ComputerShopContracts/BindingModels/ShipmentBindingModel.cs b/ComputerShopContracts/BindingModels/ShipmentBindingModel.cs index a570d71..09c0d96 100644 --- a/ComputerShopContracts/BindingModels/ShipmentBindingModel.cs +++ b/ComputerShopContracts/BindingModels/ShipmentBindingModel.cs @@ -13,7 +13,6 @@ namespace ComputerShopContracts.BindingModels public int UserId { get; set; } - //!!!МБ НЕ НАДО string.Empty public string ProviderName { get; set; } = string.Empty; public DateTime DateShipment { get; set; } = DateTime.Now; diff --git a/ComputerShopContracts/BindingModels/UserBindingModel.cs b/ComputerShopContracts/BindingModels/UserBindingModel.cs index c4267c9..6798a2e 100644 --- a/ComputerShopContracts/BindingModels/UserBindingModel.cs +++ b/ComputerShopContracts/BindingModels/UserBindingModel.cs @@ -11,13 +11,13 @@ namespace ComputerShopContracts.BindingModels public class UserBindingModel : IUserModel { public int Id { get; set; } - //!!!МБ НЕ НАДО string.Empty + public string Login { get; set; } = string.Empty; - //!!!МБ НЕ НАДО string.Empty + public string Password { get; set; } = string.Empty; - //!!!МБ НЕ НАДО string.Empty + public string Email { get; set; } = string.Empty; - //!!!МБ НЕ НАДО ПО УМОЛЧАНИЮ СТАВИТЬ "НЕИЗВЕСТНАЯ" + public UserRole Role { get; set; } = UserRole.Неизвестная; } } diff --git a/ComputerShopContracts/BusinessLogicContracts/IOrderLogic.cs b/ComputerShopContracts/BusinessLogicContracts/IOrderLogic.cs index b12b584..96487b9 100644 --- a/ComputerShopContracts/BusinessLogicContracts/IOrderLogic.cs +++ b/ComputerShopContracts/BusinessLogicContracts/IOrderLogic.cs @@ -9,7 +9,6 @@ using System.Threading.Tasks; namespace ComputerShopContracts.BusinessLogicContracts { - //!!!ПРОВЕРИТЬ, ЧТО НЕ НУЖНЫ ДРУГИЕ МЕТОДЫ public interface IOrderLogic { List? ReadList(OrderSearchModel? model); diff --git a/ComputerShopContracts/BusinessLogicContracts/IRequestLogic.cs b/ComputerShopContracts/BusinessLogicContracts/IRequestLogic.cs index 8253498..4fe526a 100644 --- a/ComputerShopContracts/BusinessLogicContracts/IRequestLogic.cs +++ b/ComputerShopContracts/BusinessLogicContracts/IRequestLogic.cs @@ -9,7 +9,6 @@ using System.Threading.Tasks; namespace ComputerShopContracts.BusinessLogicContracts { - //!!!ПРОВЕРИТЬ, ЧТО НЕ НУЖНЫ ДРУГИЕ МЕТОДЫ public interface IRequestLogic { List? ReadList(RequestSearchModel? model); @@ -17,6 +16,6 @@ namespace ComputerShopContracts.BusinessLogicContracts bool Create(RequestBindingModel model); bool Update(RequestBindingModel model); bool Delete(RequestBindingModel model); - bool ConnectRequestAssembly(int requestId, int assemblyId); + bool ConnectRequestAssembly(RequestBindingModel model); } } diff --git a/ComputerShopContracts/BusinessLogicContracts/IShipmentLogic.cs b/ComputerShopContracts/BusinessLogicContracts/IShipmentLogic.cs index 314fb7e..8344f01 100644 --- a/ComputerShopContracts/BusinessLogicContracts/IShipmentLogic.cs +++ b/ComputerShopContracts/BusinessLogicContracts/IShipmentLogic.cs @@ -9,7 +9,6 @@ using System.Threading.Tasks; namespace ComputerShopContracts.BusinessLogicContracts { - //!!!ПРОВЕРИТЬ, ЧТО НЕ НУЖНЫ ДРУГИЕ МЕТОДЫ public interface IShipmentLogic { List? ReadList(ShipmentSearchModel? model); diff --git a/ComputerShopContracts/StorageContracts/IRequestStorage.cs b/ComputerShopContracts/StorageContracts/IRequestStorage.cs index a7e3e7d..339b2bd 100644 --- a/ComputerShopContracts/StorageContracts/IRequestStorage.cs +++ b/ComputerShopContracts/StorageContracts/IRequestStorage.cs @@ -17,6 +17,6 @@ namespace ComputerShopContracts.StorageContracts RequestViewModel? Insert(RequestBindingModel model); RequestViewModel? Update(RequestBindingModel model); RequestViewModel? Delete(RequestBindingModel model); - bool ConnectRequestAssembly(int requestId, int assemblyId); + bool ConnectRequestAssembly(RequestBindingModel model); } } diff --git a/ComputerShopContracts/ViewModels/OrderViewModel.cs b/ComputerShopContracts/ViewModels/OrderViewModel.cs index 83bc579..7193152 100644 --- a/ComputerShopContracts/ViewModels/OrderViewModel.cs +++ b/ComputerShopContracts/ViewModels/OrderViewModel.cs @@ -16,15 +16,6 @@ namespace ComputerShopContracts.ViewModels public int UserId { get; set; } - - //!!!ТУТ МБ НАДО DisplayName (НО ВЯРД ЛИ) - - //!!!УДАЛИТЬ (если нормально работает многие-ко-многим) - - //public Dictionary OrderRequests { get; set; } = new(); - //public Dictionary OrderShipments { get; set; } = new(); - - //!!!МБ НЕ НУЖНО DateTime.Now [DisplayName("Дата оформления")] public DateTime DateCreate { get; set; } = DateTime.Now; @@ -33,6 +24,5 @@ namespace ComputerShopContracts.ViewModels [DisplayName("Стоимость")] public double Sum { get; set; } - } } diff --git a/ComputerShopContracts/ViewModels/RequestViewModel.cs b/ComputerShopContracts/ViewModels/RequestViewModel.cs index b9de55c..8157fff 100644 --- a/ComputerShopContracts/ViewModels/RequestViewModel.cs +++ b/ComputerShopContracts/ViewModels/RequestViewModel.cs @@ -14,8 +14,6 @@ namespace ComputerShopContracts.ViewModels [DisplayName("Номер")] public int Id { get; set; } - //!!!ТУТ МБ НЕ НУЖЕН DisplayName - //[DisplayName("Номер пользователя")] public int UserId { get; set; } //id сборки @@ -26,11 +24,9 @@ namespace ComputerShopContracts.ViewModels public Dictionary RequestOrders { get; set; } = new(); - //!!!МБ НЕ НУЖНО DateTime.Now [DisplayName("Дата оформления")] public DateTime DateRequest { get; set; } = DateTime.Now; - //!!!МБ НЕ НУЖЕН string.Empty [DisplayName("ФИО клиента")] public string ClientFIO { get; set; } = string.Empty; } diff --git a/ComputerShopContracts/ViewModels/ShipmentViewModel.cs b/ComputerShopContracts/ViewModels/ShipmentViewModel.cs index 67d274f..51ec3b2 100644 --- a/ComputerShopContracts/ViewModels/ShipmentViewModel.cs +++ b/ComputerShopContracts/ViewModels/ShipmentViewModel.cs @@ -10,20 +10,18 @@ namespace ComputerShopContracts.ViewModels { public class ShipmentViewModel : IShipmentModel { - //!!!ТУТ МБ НЕ НУЖЕН DisplayName [DisplayName("Номер")] public int Id { get; set; } - //!!!ТУТ МБ НЕ НУЖЕН DisplayName public int UserId { get; set; } public Dictionary ShipmentOrders { get; set; } = new(); - //!!!МБ НЕ НУЖЕН string.Empty + [DisplayName("Поставщик")] public string ProviderName { get; set; } = string.Empty; - //!!!МБ НЕ НУЖНО DateTime.Now + [DisplayName("Дата поставки")] public DateTime DateShipment { get; set; } = DateTime.Now; diff --git a/ComputerShopContracts/ViewModels/UserViewModel.cs b/ComputerShopContracts/ViewModels/UserViewModel.cs index 00af73d..d46ac4b 100644 --- a/ComputerShopContracts/ViewModels/UserViewModel.cs +++ b/ComputerShopContracts/ViewModels/UserViewModel.cs @@ -11,10 +11,8 @@ namespace ComputerShopContracts.ViewModels { public class UserViewModel : IUserModel { - //!!!МБ ТУТ НАДО DisplayName (НО ВРЯД ЛИ) public int Id { get; set; } - - //!!!МБ ТУТ НЕ НУЖНЫ string.Empty + [DisplayName("Логин")] public string Login { get; set; } = string.Empty; @@ -24,7 +22,6 @@ namespace ComputerShopContracts.ViewModels [DisplayName("Почта")] public string Email { get; set; } = string.Empty; - //!!!МБ ТУТ НАДО DisplayName (НО ВРЯД ЛИ) public UserRole Role { get; set; } } } diff --git a/ComputerShopDataModels/Models/IOrderModel.cs b/ComputerShopDataModels/Models/IOrderModel.cs index 0635539..2345434 100644 --- a/ComputerShopDataModels/Models/IOrderModel.cs +++ b/ComputerShopDataModels/Models/IOrderModel.cs @@ -12,21 +12,6 @@ namespace ComputerShopDataModels.Models //ID пользователя, который создал заказ int UserId { get; } - //!!!УДАЛИТЬ (после того, как нормально будут многие-ко-многим между заказами и партиями) - /// - /// Заявки в заказе (может не быть) - /// - //Dictionary? OrderRequests { get; } - - - //!!!УДАЛИТЬ (после того, как нормально будут многие-ко-многим между заказами и партиями) - /// - /// Партии товаров в заказе (может не быть) - /// - //Dictionary? OrderShipments { get; } - - - /// /// Дата оформления заказа /// diff --git a/ComputerShopDatabaseImplement/Implements/OrderStorage.cs b/ComputerShopDatabaseImplement/Implements/OrderStorage.cs index 6118d4a..80e005a 100644 --- a/ComputerShopDatabaseImplement/Implements/OrderStorage.cs +++ b/ComputerShopDatabaseImplement/Implements/OrderStorage.cs @@ -13,12 +13,8 @@ using System.Threading.Tasks; namespace ComputerShopDatabaseImplement.Implements { - //!!!ПОДОБИЕ component public class OrderStorage : IOrderStorage { - //!!!ТУТ СВЯЗЬ С НЕСКОЛЬКИМИ СУЩНОСТЯМИ - //!!!НЕ ФАКТ, ЧТО ПРАВИЛЬНО - //!!!мб присоединять user public List GetFullList() { using var context = new ComputerShopDatabase(); @@ -32,7 +28,6 @@ namespace ComputerShopDatabaseImplement.Implements .ToList(); } - //!!!ПРОВЕРИТЬ //Учитывается id пользователя (везде получение списка только тех записей, что создал сам пользователь) public List GetFilteredList(OrderSearchModel model) { @@ -75,7 +70,6 @@ namespace ComputerShopDatabaseImplement.Implements .ToList(); } - //!!!ПРОВЕРИТЬ //Поиск только по id, потому что другие поля не уникальные - нет смысла искать 1 элемент public OrderViewModel? GetElement(OrderSearchModel model) { @@ -118,7 +112,6 @@ namespace ComputerShopDatabaseImplement.Implements return order.GetViewModel; } - //!!!МБ ТУТ ДЕЛАТЬ .Include(x => x.Shipments) и .Include(x => x.Requests) public OrderViewModel? Delete(OrderBindingModel model) { using var context = new ComputerShopDatabase(); diff --git a/ComputerShopDatabaseImplement/Implements/RequestStorage.cs b/ComputerShopDatabaseImplement/Implements/RequestStorage.cs index c3a6a16..e87e5d9 100644 --- a/ComputerShopDatabaseImplement/Implements/RequestStorage.cs +++ b/ComputerShopDatabaseImplement/Implements/RequestStorage.cs @@ -12,10 +12,8 @@ using System.Threading.Tasks; namespace ComputerShopDatabaseImplement.Implements { - //!!!ПОДОБИЕ textile public class RequestStorage : IRequestStorage { - //!!!Проверить, что правильно присоединяю сборку Assembly public List GetFullList() { using var context = new ComputerShopDatabase(); @@ -28,7 +26,6 @@ namespace ComputerShopDatabaseImplement.Implements .ToList(); } - //!!!Проверить, что правильно присоединяю сборку Assembly //Учитывается id пользователя (везде получение списка только тех записей, что создал сам пользователь) public List GetFilteredList(RequestSearchModel model) { using var context = new ComputerShopDatabase(); @@ -79,8 +76,6 @@ namespace ComputerShopDatabaseImplement.Implements .ToList(); } - //!!!Проверить, что правильно присоединяю сборку Assembly - //!!!мб тут надо будет в FirstOrDefault добавить другие параметры //Поиск только по id, потому что другие поля не уникальные - нет смысла искать 1 элемент public RequestViewModel? GetElement(RequestSearchModel model) { @@ -149,17 +144,16 @@ namespace ComputerShopDatabaseImplement.Implements return null; } - //!!!ПРОВЕРИТЬ - public bool ConnectRequestAssembly(int requestId, int assemblyId) + public bool ConnectRequestAssembly(RequestBindingModel model) { using var context = new ComputerShopDatabase(); - var request = context.Requests.FirstOrDefault(x => x.Id == requestId); - var assembly = context.Assemblies.FirstOrDefault(x => x.Id == assemblyId); + var request = context.Requests.FirstOrDefault(x => x.Id == model.Id); + var assembly = context.Assemblies.FirstOrDefault(x => x.Id == model.AssemblyId); if (request == null || assembly == null) { return false; } - request.ConnectAssembly(context, assemblyId); + request.ConnectAssembly(context, model); context.SaveChanges(); return true; } diff --git a/ComputerShopDatabaseImplement/Implements/ShipmentStorage.cs b/ComputerShopDatabaseImplement/Implements/ShipmentStorage.cs index c73cf05..c52ef14 100644 --- a/ComputerShopDatabaseImplement/Implements/ShipmentStorage.cs +++ b/ComputerShopDatabaseImplement/Implements/ShipmentStorage.cs @@ -12,7 +12,6 @@ using System.Threading.Tasks; namespace ComputerShopDatabaseImplement.Implements { - //!!!ПОДОБИЕ textile public class ShipmentStorage : IShipmentStorage { public List GetFullList() @@ -27,7 +26,7 @@ namespace ComputerShopDatabaseImplement.Implements .ToList(); } - //Учитывается id пользователя, создавшего заказ + //Учитывается id пользователя, создавшего заказ (везде получение списка только тех записей, что создал сам пользователь) public List GetFilteredList(ShipmentSearchModel model) { using var context = new ComputerShopDatabase(); @@ -118,8 +117,6 @@ namespace ComputerShopDatabaseImplement.Implements } } - //!!!мб по-другому присваивать значение shipment - //!!!мб возвращать не просто shipment.getviewmodel public ShipmentViewModel? Delete(ShipmentBindingModel model) { using var context = new ComputerShopDatabase(); diff --git a/ComputerShopDatabaseImplement/Implements/UserStorage.cs b/ComputerShopDatabaseImplement/Implements/UserStorage.cs index a93fb2d..e6af5b8 100644 --- a/ComputerShopDatabaseImplement/Implements/UserStorage.cs +++ b/ComputerShopDatabaseImplement/Implements/UserStorage.cs @@ -12,7 +12,6 @@ using System.Threading.Tasks; namespace ComputerShopDatabaseImplement.Implements { - //!!!МБ У USER ХРАНИТЬ СПИСКИ ВСЕХ СОЗДАННЫХ СУШНОСТЕЙ И ТОГДА ПРИ СОЗДАНИИ, УДАЛЕНИИ СУЩНОСТЕЙ ЕЩЁ СОЗДАВАТЬ И УДАЛЯТЬ ИЗ СПИСКА У ПОЛЬЗОВАТЕЛЯ public class UserStorage : IUserStorage { public List GetFullList() @@ -32,33 +31,34 @@ namespace ComputerShopDatabaseImplement.Implements return context.Users.Where(x => x.Role == model.Role).Select(x => x.GetViewModel).ToList(); } - //!!!ПРОВЕРИТЬ - //id, почта и логин уникальны, можно получать по ним + //id, почта и логин уникальны, можно получать по ним (и получаем при проверке уникальности) public UserViewModel? GetElement(UserSearchModel model) { - //!!!МБ ЭТУ ПРОВЕРКУ УБРАТЬ if (string.IsNullOrEmpty(model.Login) && string.IsNullOrEmpty(model.Email) && !model.Id.HasValue) { return null; } + using var context = new ComputerShopDatabase(); - //Поиск пользователя при входе в систему по логину, паролю и его роли (чтобы не могли войти в аккаунты другой роли) + //Получение пользователя при входе в систему по логину, паролю и его роли (чтобы не могли войти в аккаунты другой роли) if (!string.IsNullOrEmpty(model.Login) && !string.IsNullOrEmpty(model.Password) && model.Role.HasValue) { return context.Users.FirstOrDefault(x => x.Login == model.Login && x.Password == model.Password && x.Role == model.Role)?.GetViewModel; } - //!!!НИЖЕ МБ НЕ НАДО + //Получение по логину (пользователей с таким логином будет 1 или 0) if (!string.IsNullOrEmpty(model.Login)) { return context.Users.FirstOrDefault(x => x.Login == model.Login)?.GetViewModel; } + //Получение по почте (пользователей с такой почтой будет 1 или 0) else if (!string.IsNullOrEmpty(model.Email)) { return context.Users.FirstOrDefault(x => x.Email == model.Email)?.GetViewModel; } + //Получение по id return context.Users.FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; } @@ -89,7 +89,6 @@ namespace ComputerShopDatabaseImplement.Implements return user.GetViewModel; } - //!!!МБ И НЕ НУЖЕН public UserViewModel? Delete(UserBindingModel model) { using var context = new ComputerShopDatabase(); diff --git a/ComputerShopDatabaseImplement/Models/Order.cs b/ComputerShopDatabaseImplement/Models/Order.cs index 683ab41..11476f8 100644 --- a/ComputerShopDatabaseImplement/Models/Order.cs +++ b/ComputerShopDatabaseImplement/Models/Order.cs @@ -2,6 +2,7 @@ using ComputerShopContracts.ViewModels; using ComputerShopDataModels.Enums; using ComputerShopDataModels.Models; +using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -14,7 +15,7 @@ namespace ComputerShopDatabaseImplement.Models { public class Order : IOrderModel { - public int Id { get; set; } + public int Id { get; private set; } [Required] public int UserId { get; private set; } @@ -41,13 +42,14 @@ namespace ComputerShopDatabaseImplement.Models { return null; } + //при создании заказа с ним ничего ещё не связано => сумма = 0 return new Order() { Id = model.Id, UserId = model.UserId, DateCreate = model.DateCreate, Status = model.Status, - Sum = model.Sum, + Sum = 0 }; } @@ -61,6 +63,12 @@ namespace ComputerShopDatabaseImplement.Models Status = model.Status; } + //отдельный метод изменения стоимости заказа (+ или -) на стоимость сборки внутри заявки (после действий с заявками, кот. привязаны к заказу) + public void ChangeSum(double cost_of_assembly, bool justUpdate = false) + { + Sum += cost_of_assembly; + } + public OrderViewModel GetViewModel => new() { Id = Id, diff --git a/ComputerShopDatabaseImplement/Models/Request.cs b/ComputerShopDatabaseImplement/Models/Request.cs index ab130d5..e9ab601 100644 --- a/ComputerShopDatabaseImplement/Models/Request.cs +++ b/ComputerShopDatabaseImplement/Models/Request.cs @@ -11,12 +11,11 @@ using System.Threading.Tasks; namespace ComputerShopDatabaseImplement.Models { - //!!!МБ У Id сделать private set у ВСЕХ МОИХ МОДЕЛЕЙ public class Request : IRequestModel { - public int Id { get; set; } + public int Id { get; private set; } [Required] - public int UserId { get; set; } + public int UserId { get; private set; } public virtual User User { get; set; } @@ -77,6 +76,7 @@ namespace ComputerShopDatabaseImplement.Models ClientFIO = model.ClientFIO; } //DateMake не обновляю, потому что странно менять дату оформления заявки после её создания + //Обновление ссылки на сборку (assemblyId) отдельным методом } public RequestViewModel GetViewModel => new() @@ -90,36 +90,64 @@ namespace ComputerShopDatabaseImplement.Models RequestOrders = RequestOrders }; - //!!!МБ ПЕРЕДАВАТЬ ЧТО-ТО ДРУГОЕ - //!!!ПРОВЕРИТЬ, ЧТО ВСЁ ПРАВИЛЬНО ИЗВЛЕКАЮ + //обновление списка заказов у заявки (+ изменение суммы у соответствующих заказов) public void UpdateOrders(ComputerShopDatabase context, RequestBindingModel model) { + var currentRequest = context.Requests.First(x => x.Id == Id); + //стоимость сборки, связанной с заявкой (или 0, если заявка не связана со сборкой) + double cost_of_assembly = (currentRequest.Assembly.Cost != null) ? currentRequest.Assembly.Cost : 0; + var requestOrders = context.RequestOrders.Where(x => x.RequestId == model.Id).ToList(); - //удаление тех заказов, которых нет в модели + + //удаление тех заказов, которых нет в модели (+ изменение суммы у удаляемых заказов) if (requestOrders != null && requestOrders.Count > 0) { - context.RequestOrders.RemoveRange(requestOrders.Where(x => !model.RequestOrders.ContainsKey(x.OrderId))); - context.SaveChanges(); + var delOrders = requestOrders.Where(x => !model.RequestOrders.ContainsKey(x.OrderId)); + foreach (var delOrder in delOrders) + { + context.RequestOrders.Remove(delOrder); + var order = context.Orders.First(x => x.Id == delOrder.OrderId); + //вычитание из стоимости соответствующего заказа стоимость соответствующей сборки + order.ChangeSum(-cost_of_assembly); + context.SaveChanges(); + } } - //добавление новых заказов - var currentRequest = context.Requests.First(x => x.Id == Id); + + //добавление новых заказов (+ изменение суммы у добавляемых заказов) foreach (var request_order in model.RequestOrders) { + var order = context.Orders.First(x => x.Id == request_order.Key); context.RequestOrders.Add(new RequestOrder { Request = currentRequest, - Order = context.Orders.First(x => x.Id == request_order.Key) + Order = order }); + //увеличение стоимости заказа, с которым связываем заявку, на стоимость сборки + order.ChangeSum(cost_of_assembly); context.SaveChanges(); } _requestOrders = null; } - //Связывание заявки со сборкой - public void ConnectAssembly(ComputerShopDatabase context, int assemblyId) + + //Связывание заявки со сборкой (+ изменение суммы у соответствующих заказов) + public void ConnectAssembly(ComputerShopDatabase context, RequestBindingModel model) { - AssemblyId = assemblyId; - Assembly = context.Assemblies.First(x => x.Id == assemblyId); + //стоимость старой сборки (или 0, если её не было) + double cost_of_old_assembly = (Assembly.Cost != null) ? Assembly.Cost : 0; + + AssemblyId = model.AssemblyId; + Assembly = context.Assemblies.First(x => x.Id == model.AssemblyId); + //изменение стоимости всех связанных заказов + foreach (var request_order in model.RequestOrders) + { + var connectedOrder = context.Orders.First(x => x.Id == request_order.Key); + //вычитание из стоимости заказа старой сборки + connectedOrder.ChangeSum(-cost_of_old_assembly); + //прибавление стоимости новой сборки + connectedOrder.ChangeSum(Assembly.Cost); + context.SaveChanges(); + } } } } diff --git a/ComputerShopDatabaseImplement/Models/Shipment.cs b/ComputerShopDatabaseImplement/Models/Shipment.cs index 744b9a2..a0559cc 100644 --- a/ComputerShopDatabaseImplement/Models/Shipment.cs +++ b/ComputerShopDatabaseImplement/Models/Shipment.cs @@ -13,23 +13,17 @@ namespace ComputerShopDatabaseImplement.Models { public class Shipment : IShipmentModel { - public int Id { get; set; } + public int Id { get; private set; } [Required] public int UserId { get; private set; } - //!!!мб не нужен (для передачи логина пользователя) - public virtual User User { get; set; } - - //!!!МБ ТУТ НЕ НУЖЕН string.Empty [Required] public string ProviderName { get; set; } = string.Empty; - //!!!МБ ТУТ НЕ НУЖЕН DateTime.Now [Required] public DateTime DateShipment { get; set; } = DateTime.Now; - //!!!МБ ТУТ КАК-ТО ПО-ДРУГОМУ private Dictionary? _shipmentOrders = null; [NotMapped] @@ -44,7 +38,7 @@ namespace ComputerShopDatabaseImplement.Models return _shipmentOrders; } } - //!!!ПРОВЕРИТЬ, ЧТО ТУТ ПРАВИЛЬНО СДЕЛАНО (ЧТО НАЗВАНИЕ ПРАВИЛЬНОЕ У ВНЕШ. КЛЮЧА, ЧТО ПРАВИЛЬНЫЙ ТИП в <>) + [ForeignKey("ShipmentId")] public virtual List Orders { get; set; } = new(); @@ -52,14 +46,12 @@ namespace ComputerShopDatabaseImplement.Models public virtual List Products { get; set; } = new(); - //!!!ПРОВЕРИТЬ, ЧТО ПРАВИЛЬНО ПРИСВАИВАЮ ЗНАЧЕНИЕ СПИСКУ ЗАКАЗОВ public static Shipment Create(ComputerShopDatabase context, ShipmentBindingModel model) { return new Shipment() { Id = model.Id, UserId = model.UserId, - User = context.Users.First(x => x.Id == model.UserId), ProviderName = model.ProviderName, DateShipment = model.DateShipment, Orders = model.ShipmentOrders.Select(x => new ShipmentOrder @@ -68,7 +60,7 @@ namespace ComputerShopDatabaseImplement.Models }).ToList() }; } - //!!!МБ ТУТ КАКИЕ-ТО ДРУГИЕ ПОЛЯ НАДО БУДЕТ ОБНОВЛЯТЬ + public void Update(ShipmentBindingModel model) { if (model == null) @@ -81,7 +73,7 @@ namespace ComputerShopDatabaseImplement.Models } DateShipment = model.DateShipment; } - //!!!МБ ТУТ ЕЩЁ ЧТО-ТО ПРИСВАИВАТЬ + public ShipmentViewModel GetViewModel => new() { Id = Id, @@ -91,8 +83,6 @@ namespace ComputerShopDatabaseImplement.Models ShipmentOrders = ShipmentOrders }; - //!!!МБ ПЕРЕДАВАТЬ ЧТО-ТО ДРУГОЕ - //!!!ПРОВЕРИТЬ, ЧТО ВСЁ ПРАВИЛЬНО ИЗВЛЕКАЮ public void UpdateOrders(ComputerShopDatabase context, ShipmentBindingModel model) { var shipmentOrders = context.ShipmentOrders.Where(x => x.ShipmentId == model.Id).ToList(); diff --git a/ComputerShopDatabaseImplement/Models/User.cs b/ComputerShopDatabaseImplement/Models/User.cs index db78684..d5f749e 100644 --- a/ComputerShopDatabaseImplement/Models/User.cs +++ b/ComputerShopDatabaseImplement/Models/User.cs @@ -67,7 +67,6 @@ namespace ComputerShopDatabaseImplement.Models Email = model.Email; } - //!!!МБ ТУТ НЕ НАДО РОЛЬ public UserViewModel GetViewModel => new() { Id = Id, diff --git a/ComputerShopImplementerApp/APIUser.cs b/ComputerShopImplementerApp/APIUser.cs index 5769687..9ceff37 100644 --- a/ComputerShopImplementerApp/APIUser.cs +++ b/ComputerShopImplementerApp/APIUser.cs @@ -5,7 +5,6 @@ using System.Text; namespace ComputerShopImplementerApp { - //!!!мб тут оставить всё, как client (заново перекопировать файл) public class APIUser { private static readonly HttpClient _user = new(); @@ -46,8 +45,5 @@ namespace ComputerShopImplementerApp throw new Exception(result); } } - - //!!!МБ ДОБАВИТЬ DeleteRequest - } } diff --git a/ComputerShopImplementerApp/Controllers/HomeController.cs b/ComputerShopImplementerApp/Controllers/HomeController.cs index 8c77319..c3557e6 100644 --- a/ComputerShopImplementerApp/Controllers/HomeController.cs +++ b/ComputerShopImplementerApp/Controllers/HomeController.cs @@ -108,41 +108,5 @@ namespace ComputerShopImplementerApp.Controllers Response.Redirect("Enter"); return; } - - //!!!Сделать что-то похожее - //[HttpGet] - //public IActionResult Create() - //{ - // ViewBag.Textiles = APIUser.GetRequest>("api/main/gettextilelist"); - // return View(); - //} - - //[HttpPost] - //public void Create(int Textile, int count) - //{ - // if (APIUser.User == null) - // { - // throw new Exception("Вход только авторизованным"); - // } - // if (count <= 0) - // { - // throw new Exception("Количество и сумма должны быть больше 0"); - // } - // APIUser.PostRequest("api/main/createorder", new OrderBindingModel - // { - // UserId = APIUser.User.Id, - // TextileId = Textile, - // Count = count, - // Sum = Calc(count, Textile) - // }); - // Response.Redirect("Index"); - //} - - //[HttpPost] - //public double Calc(int count, int textile) - //{ - // var _textile = APIUser.GetRequest($"api/main/gettextile?textileId={textile}"); - // return count * (_textile?.Price ?? 1); - //} } } \ No newline at end of file diff --git a/ComputerShopRestApi/Controllers/OrderController.cs b/ComputerShopRestApi/Controllers/OrderController.cs index 1746a63..c6ded8f 100644 --- a/ComputerShopRestApi/Controllers/OrderController.cs +++ b/ComputerShopRestApi/Controllers/OrderController.cs @@ -83,7 +83,7 @@ namespace ComputerShopRestApi.Controllers throw; } } - //!!!мб HttpPut + [HttpDelete] public void DeleteOrder(OrderBindingModel model) { diff --git a/ComputerShopRestApi/Controllers/RequestController.cs b/ComputerShopRestApi/Controllers/RequestController.cs index d88f895..4508d30 100644 --- a/ComputerShopRestApi/Controllers/RequestController.cs +++ b/ComputerShopRestApi/Controllers/RequestController.cs @@ -72,13 +72,13 @@ namespace ComputerShopRestApi.Controllers } } - //!!!ПРОВЕРИТЬ + //параметры для удобного использования в swagger, потом скорее всего будет передаваться RequestBindingModel model [HttpPost] public void ConnectRequestAssembly(int requestId, int assemblyId) { try { - _logic.ConnectRequestAssembly(requestId, assemblyId); + _logic.ConnectRequestAssembly(new RequestBindingModel { Id = requestId, AssemblyId = assemblyId }); } catch (Exception ex) { @@ -102,22 +102,6 @@ namespace ComputerShopRestApi.Controllers } } - //!!!МБ УДАЛИТЬ - //[HttpPost] - //public void AddRequestOrder(int requestId, int orderId) - //{ - // try - // { - // _logic.Update(model); - // } - // catch (Exception ex) - // { - // _logger.LogError(ex, "Ошибка обновления заказа"); - // throw; - // } - //} - - [HttpDelete] public void DeleteRequest(RequestBindingModel model) { @@ -131,8 +115,5 @@ namespace ComputerShopRestApi.Controllers throw; } } - - //!!!МБ НУЖЕН ОТДЕЛЬНЫЙ МЕТОД ДЛЯ СВЯЗЫВАНИЯ ЗАЯВКИ СО СБОРКОЙ. - //!!!тогда его надо будет добавлять в IRequestLogic } } diff --git a/ComputerShopRestApi/Controllers/UserController.cs b/ComputerShopRestApi/Controllers/UserController.cs index 8f4c384..8dbf82a 100644 --- a/ComputerShopRestApi/Controllers/UserController.cs +++ b/ComputerShopRestApi/Controllers/UserController.cs @@ -59,7 +59,6 @@ namespace ComputerShopRestApi.Controllers } } - //!!!мб не тут надо присваивать роль [HttpPost] public void RegisterImplementer(UserBindingModel model) {