diff --git a/ComputerShopDatabaseImplement/ComputerShopDatabase.cs b/ComputerShopDatabaseImplement/ComputerShopDatabase.cs index 9b492f3..c02c088 100644 --- a/ComputerShopDatabaseImplement/ComputerShopDatabase.cs +++ b/ComputerShopDatabaseImplement/ComputerShopDatabase.cs @@ -9,7 +9,7 @@ namespace ComputerShopDatabaseImplement { if (!OptionsBuilder.IsConfigured) { - OptionsBuilder.UseNpgsql(@"Host=localhost;Database=ComputerShop;Username=postgres;Password=admin"); + OptionsBuilder.UseNpgsql(@"Host=localhost;Port=5000;Database=ComputerShop;Username=postgres;Password=admin"); } base.OnConfiguring(OptionsBuilder); diff --git a/ComputerShopDatabaseImplement/Implements/OrderStorage.cs b/ComputerShopDatabaseImplement/Implements/OrderStorage.cs index 8f909f0..6118d4a 100644 --- a/ComputerShopDatabaseImplement/Implements/OrderStorage.cs +++ b/ComputerShopDatabaseImplement/Implements/OrderStorage.cs @@ -14,7 +14,6 @@ using System.Threading.Tasks; namespace ComputerShopDatabaseImplement.Implements { //!!!ПОДОБИЕ component - //!!! ДОПИСАТЬ public class OrderStorage : IOrderStorage { //!!!ТУТ СВЯЗЬ С НЕСКОЛЬКИМИ СУЩНОСТЯМИ @@ -32,10 +31,13 @@ namespace ComputerShopDatabaseImplement.Implements .Select(x => x.GetViewModel) .ToList(); } + //!!!ПРОВЕРИТЬ + //Учитывается id пользователя (везде получение списка только тех записей, что создал сам пользователь) public List GetFilteredList(OrderSearchModel model) { using var context = new ComputerShopDatabase(); + //сортировка по дате создания if (model.DateFrom.HasValue && model.DateTo.HasValue) { return context.Orders @@ -48,6 +50,7 @@ namespace ComputerShopDatabaseImplement.Implements .Select(x => x.GetViewModel) .ToList(); } + //сортировка по статусу else if (model.Status.HasValue) { return context.Orders @@ -71,7 +74,9 @@ namespace ComputerShopDatabaseImplement.Implements .Select(x => x.GetViewModel) .ToList(); } + //!!!ПРОВЕРИТЬ + //Поиск только по id, потому что другие поля не уникальные - нет смысла искать 1 элемент public OrderViewModel? GetElement(OrderSearchModel model) { if (!model.Id.HasValue) @@ -113,6 +118,7 @@ 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 02c6703..ce75775 100644 --- a/ComputerShopDatabaseImplement/Implements/RequestStorage.cs +++ b/ComputerShopDatabaseImplement/Implements/RequestStorage.cs @@ -15,7 +15,7 @@ namespace ComputerShopDatabaseImplement.Implements //!!!ПОДОБИЕ textile public class RequestStorage : IRequestStorage { - //!!!КАК ПРИСОЕДИНИТЬ СБОРКУ И НАДО ЛИ? + //!!!Проверить, что правильно присоединяю сборку Assembly public List GetFullList() { using var context = new ComputerShopDatabase(); @@ -28,14 +28,16 @@ namespace ComputerShopDatabaseImplement.Implements .ToList(); } - //!!!тут добавил .Include(x => x.Assembly) + //!!!Проверить, что правильно присоединяю сборку Assembly + //Учитывается id пользователя (везде получение списка только тех записей, что создал сам пользователь) public List GetFilteredList(RequestSearchModel model) { using var context = new ComputerShopDatabase(); + //сортировка по дате создания заявки if (model.DateFrom.HasValue && model.DateTo.HasValue) { return context.Requests - .Where(x => x.UserId == model.UserId && x.DateRequest >= model.DateFrom && x.DateRequest <= model.DateTo) + .Where(x => (x.UserId == model.UserId) && (x.DateRequest >= model.DateFrom && x.DateRequest <= model.DateTo)) .Include(x => x.Orders) .ThenInclude(x => x.Order) .Include(x => x.Assembly) @@ -43,7 +45,7 @@ namespace ComputerShopDatabaseImplement.Implements .ToList(); } - //Получение заявок по сборкам + //сортировка по сборке (сборка может участвовать в нескольких заявках) else if (model.AssemblyId.HasValue) { return context.Requests @@ -55,6 +57,7 @@ namespace ComputerShopDatabaseImplement.Implements .ToList(); } + //сортировка по фио клиента, для которого создана заявка else if (!string.IsNullOrEmpty(model.ClientFIO)) { return context.Requests @@ -76,19 +79,21 @@ namespace ComputerShopDatabaseImplement.Implements .ToList(); } + //!!!Проверить, что правильно присоединяю сборку Assembly //!!!мб тут надо будет в FirstOrDefault добавить другие параметры + //Поиск только по id, потому что другие поля не уникальные - нет смысла искать 1 элемент public RequestViewModel? GetElement(RequestSearchModel model) { - if (!model.Id.HasValue && !model.DateFrom.HasValue && !model.DateTo.HasValue && !model.AssemblyId.HasValue && string.IsNullOrEmpty(model.ClientFIO)) + if (!model.Id.HasValue) { return null; } using var context = new ComputerShopDatabase(); return context.Requests - .Where(x => x.UserId == model.UserId) .Include(x => x.Orders) .ThenInclude(x => x.Order) - .FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id)) + .Include(x => x.Assembly) + .FirstOrDefault(x => x.Id == model.Id) ?.GetViewModel; } @@ -102,10 +107,6 @@ namespace ComputerShopDatabaseImplement.Implements } context.Requests.Add(newRequest); context.SaveChanges(); - - //!!!мб тут вернуть другое значение - //!!!МБ ТУТ НЕЛЬЗЯ WHERE первым - //!!!мб тут и не надо where по пользователю (попробовать потом без него) return newRequest.GetViewModel; } @@ -133,7 +134,6 @@ namespace ComputerShopDatabaseImplement.Implements } } - //!!!мб возвращать не просто request.getviewmodel public RequestViewModel? Delete(RequestBindingModel model) { using var context = new ComputerShopDatabase(); diff --git a/ComputerShopDatabaseImplement/Implements/ShipmentStorage.cs b/ComputerShopDatabaseImplement/Implements/ShipmentStorage.cs index 30b7294..03ce886 100644 --- a/ComputerShopDatabaseImplement/Implements/ShipmentStorage.cs +++ b/ComputerShopDatabaseImplement/Implements/ShipmentStorage.cs @@ -29,42 +29,21 @@ namespace ComputerShopDatabaseImplement.Implements .ToList(); } - //!!!МБ ТУТ ВСЁ ВРЕМЯ НАДО БУДЕТ УЧИТЫВАТЬ UserID + //Учитывается id пользователя, создавшего заказ public List GetFilteredList(ShipmentSearchModel model) { using var context = new ComputerShopDatabase(); - if (model.Id.HasValue && !model.DateFrom.HasValue && !model.DateTo.HasValue && string.IsNullOrEmpty(model.ProviderName)) + //сортировка по дате поставки + if (model.DateFrom.HasValue && model.DateTo.HasValue) { return context.Shipments - .Where(x => x.UserId == model.Id) + .Where(x => (x.UserId == model.UserId) && (x.DateShipment >= model.DateFrom && x.DateShipment <= model.DateTo)) .Include(x => x.Orders) .ThenInclude(x => x.Order) .Select(x => x.GetViewModel) .ToList(); } - //!!!мб добавить if (model.Id.HasValue) - //!!!МБ WHERE НЕЛЬЗЯ СТАВИТЬ ПЕРВЫМ - else if (model.DateFrom.HasValue && model.DateTo.HasValue) - { - return context.Shipments - .Where(x => x.UserId == model.UserId) - .Include(x => x.Orders) - .ThenInclude(x => x.Order) - .Where(x => x.DateShipment >= model.DateFrom && x.DateShipment <= model.DateTo) - .Select(x => x.GetViewModel) - .ToList(); - } - //!!!ВРЯД ЛИ ПРАВИЛЬНО (мб не надо include user) - //else if (model.UserId.HasValue) - //{ - // return context.Shipments - // .Include(x => x.User) - // .Where(x => x.UserId == model.UserId) - // .Include(x => x.Orders) - // .ThenInclude(x => x.Order) - // .Select (x => x.GetViewModel) - // .ToList(); - //} + //сортировка по поставщику else if (!string.IsNullOrEmpty(model.ProviderName)) { return context.Shipments @@ -74,22 +53,27 @@ namespace ComputerShopDatabaseImplement.Implements .Select(x => x.GetViewModel) .ToList(); } - return new(); + //возвращение просто всех партий пользователя (замена GetFullList) + return context.Shipments + .Where(x => x.UserId == model.UserId) + .Include(x => x.Orders) + .ThenInclude(x => x.Order) + .Select(x => x.GetViewModel) + .ToList(); } + //Поиск только по id, потому что другие поля не уникальные - нет смысла искать 1 элемент public ShipmentViewModel? GetElement(ShipmentSearchModel model) { - if (!model.Id.HasValue && !model.DateFrom.HasValue && !model.DateTo.HasValue && string.IsNullOrEmpty(model.ProviderName)) + if (!model.Id.HasValue) { return null; } using var context = new ComputerShopDatabase(); return context.Shipments - .Where(x => x.UserId == model.UserId) .Include(x => x.Orders) .ThenInclude(x => x.Order) - .FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id) - || (!string.IsNullOrEmpty(model.ProviderName) && x.ProviderName == model.ProviderName)) + .FirstOrDefault(x => x.Id == model.Id) ?.GetViewModel; } @@ -105,13 +89,7 @@ namespace ComputerShopDatabaseImplement.Implements context.Shipments.Add(newShipment); context.SaveChanges(); - //!!!мб тут вернуть другое значение - //!!!МБ ТУТ НЕЛЬЗЯ WHERE первым - return context.Shipments - .Where(x => x.UserId == model.UserId) - .Include(x => x.Orders) - .ThenInclude(x => x.Order) - .FirstOrDefault(x => x.Id == newShipment.Id)?.GetViewModel; + return newShipment.GetViewModel; } //!!!МБ возвращать что-то другое diff --git a/ComputerShopDatabaseImplement/Implements/UserStorage.cs b/ComputerShopDatabaseImplement/Implements/UserStorage.cs index ed4fe59..a7da400 100644 --- a/ComputerShopDatabaseImplement/Implements/UserStorage.cs +++ b/ComputerShopDatabaseImplement/Implements/UserStorage.cs @@ -12,6 +12,7 @@ using System.Threading.Tasks; namespace ComputerShopDatabaseImplement.Implements { + //!!!МБ У USER ХРАНИТЬ СПИСКИ ВСЕХ СОЗДАННЫХ СУШНОСТЕЙ И ТОГДА ПРИ СОЗДАНИИ, УДАЛЕНИИ СУЩНОСТЕЙ ЕЩЁ СОЗДАВАТЬ И УДАЛЯТЬ ИЗ СПИСКА У ПОЛЬЗОВАТЕЛЯ public class UserStorage : IUserStorage { public List GetFullList() @@ -32,6 +33,7 @@ namespace ComputerShopDatabaseImplement.Implements } //!!!ПРОВЕРИТЬ + //id, почта и логин уникальны, можно получать по ним public UserViewModel? GetElement(UserSearchModel model) { if (string.IsNullOrEmpty(model.Login) && string.IsNullOrEmpty(model.Email) && !model.Id.HasValue) @@ -79,15 +81,16 @@ namespace ComputerShopDatabaseImplement.Implements return user.GetViewModel; } + //!!!МБ И НЕ НУЖЕН public UserViewModel? Delete(UserBindingModel model) { using var context = new ComputerShopDatabase(); - var implementer = context.Users.FirstOrDefault(rec => rec.Id == model.Id); - if (implementer != null) + var user = context.Users.FirstOrDefault(rec => rec.Id == model.Id); + if (user != null) { - context.Users.Remove(implementer); + context.Users.Remove(user); context.SaveChanges(); - return implementer.GetViewModel; + return user.GetViewModel; } return null; }