Подправил слой базы данных

This commit is contained in:
ujijrujijr 2024-04-28 13:15:56 +04:00
parent a141bd778e
commit ea3aa4bf96
5 changed files with 43 additions and 56 deletions

View File

@ -9,7 +9,7 @@ namespace ComputerShopDatabaseImplement
{ {
if (!OptionsBuilder.IsConfigured) 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); base.OnConfiguring(OptionsBuilder);

View File

@ -14,7 +14,6 @@ using System.Threading.Tasks;
namespace ComputerShopDatabaseImplement.Implements namespace ComputerShopDatabaseImplement.Implements
{ {
//!!!ПОДОБИЕ component //!!!ПОДОБИЕ component
//!!! ДОПИСАТЬ
public class OrderStorage : IOrderStorage public class OrderStorage : IOrderStorage
{ {
//!!!ТУТ СВЯЗЬ С НЕСКОЛЬКИМИ СУЩНОСТЯМИ //!!!ТУТ СВЯЗЬ С НЕСКОЛЬКИМИ СУЩНОСТЯМИ
@ -32,10 +31,13 @@ namespace ComputerShopDatabaseImplement.Implements
.Select(x => x.GetViewModel) .Select(x => x.GetViewModel)
.ToList(); .ToList();
} }
//!!!ПРОВЕРИТЬ //!!!ПРОВЕРИТЬ
//Учитывается id пользователя (везде получение списка только тех записей, что создал сам пользователь)
public List<OrderViewModel> GetFilteredList(OrderSearchModel model) public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
{ {
using var context = new ComputerShopDatabase(); using var context = new ComputerShopDatabase();
//сортировка по дате создания
if (model.DateFrom.HasValue && model.DateTo.HasValue) if (model.DateFrom.HasValue && model.DateTo.HasValue)
{ {
return context.Orders return context.Orders
@ -48,6 +50,7 @@ namespace ComputerShopDatabaseImplement.Implements
.Select(x => x.GetViewModel) .Select(x => x.GetViewModel)
.ToList(); .ToList();
} }
//сортировка по статусу
else if (model.Status.HasValue) else if (model.Status.HasValue)
{ {
return context.Orders return context.Orders
@ -71,7 +74,9 @@ namespace ComputerShopDatabaseImplement.Implements
.Select(x => x.GetViewModel) .Select(x => x.GetViewModel)
.ToList(); .ToList();
} }
//!!!ПРОВЕРИТЬ //!!!ПРОВЕРИТЬ
//Поиск только по id, потому что другие поля не уникальные - нет смысла искать 1 элемент
public OrderViewModel? GetElement(OrderSearchModel model) public OrderViewModel? GetElement(OrderSearchModel model)
{ {
if (!model.Id.HasValue) if (!model.Id.HasValue)
@ -113,6 +118,7 @@ namespace ComputerShopDatabaseImplement.Implements
return order.GetViewModel; return order.GetViewModel;
} }
//!!!МБ ТУТ ДЕЛАТЬ .Include(x => x.Shipments) и .Include(x => x.Requests)
public OrderViewModel? Delete(OrderBindingModel model) public OrderViewModel? Delete(OrderBindingModel model)
{ {
using var context = new ComputerShopDatabase(); using var context = new ComputerShopDatabase();

View File

@ -15,7 +15,7 @@ namespace ComputerShopDatabaseImplement.Implements
//!!!ПОДОБИЕ textile //!!!ПОДОБИЕ textile
public class RequestStorage : IRequestStorage public class RequestStorage : IRequestStorage
{ {
//!!!КАК ПРИСОЕДИНИТЬ СБОРКУ И НАДО ЛИ? //!!!Проверить, что правильно присоединяю сборку Assembly
public List<RequestViewModel> GetFullList() public List<RequestViewModel> GetFullList()
{ {
using var context = new ComputerShopDatabase(); using var context = new ComputerShopDatabase();
@ -28,14 +28,16 @@ namespace ComputerShopDatabaseImplement.Implements
.ToList(); .ToList();
} }
//!!!тут добавил .Include(x => x.Assembly) //!!!Проверить, что правильно присоединяю сборку Assembly
//Учитывается id пользователя (везде получение списка только тех записей, что создал сам пользователь)
public List<RequestViewModel> GetFilteredList(RequestSearchModel model) { public List<RequestViewModel> GetFilteredList(RequestSearchModel model) {
using var context = new ComputerShopDatabase(); using var context = new ComputerShopDatabase();
//сортировка по дате создания заявки
if (model.DateFrom.HasValue && model.DateTo.HasValue) if (model.DateFrom.HasValue && model.DateTo.HasValue)
{ {
return context.Requests 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) .Include(x => x.Orders)
.ThenInclude(x => x.Order) .ThenInclude(x => x.Order)
.Include(x => x.Assembly) .Include(x => x.Assembly)
@ -43,7 +45,7 @@ namespace ComputerShopDatabaseImplement.Implements
.ToList(); .ToList();
} }
//Получение заявок по сборкам //сортировка по сборке (сборка может участвовать в нескольких заявках)
else if (model.AssemblyId.HasValue) else if (model.AssemblyId.HasValue)
{ {
return context.Requests return context.Requests
@ -55,6 +57,7 @@ namespace ComputerShopDatabaseImplement.Implements
.ToList(); .ToList();
} }
//сортировка по фио клиента, для которого создана заявка
else if (!string.IsNullOrEmpty(model.ClientFIO)) else if (!string.IsNullOrEmpty(model.ClientFIO))
{ {
return context.Requests return context.Requests
@ -76,19 +79,21 @@ namespace ComputerShopDatabaseImplement.Implements
.ToList(); .ToList();
} }
//!!!Проверить, что правильно присоединяю сборку Assembly
//!!!мб тут надо будет в FirstOrDefault добавить другие параметры //!!!мб тут надо будет в FirstOrDefault добавить другие параметры
//Поиск только по id, потому что другие поля не уникальные - нет смысла искать 1 элемент
public RequestViewModel? GetElement(RequestSearchModel model) 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; return null;
} }
using var context = new ComputerShopDatabase(); using var context = new ComputerShopDatabase();
return context.Requests return context.Requests
.Where(x => x.UserId == model.UserId)
.Include(x => x.Orders) .Include(x => x.Orders)
.ThenInclude(x => x.Order) .ThenInclude(x => x.Order)
.FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id)) .Include(x => x.Assembly)
.FirstOrDefault(x => x.Id == model.Id)
?.GetViewModel; ?.GetViewModel;
} }
@ -102,10 +107,6 @@ namespace ComputerShopDatabaseImplement.Implements
} }
context.Requests.Add(newRequest); context.Requests.Add(newRequest);
context.SaveChanges(); context.SaveChanges();
//!!!мб тут вернуть другое значение
//!!!МБ ТУТ НЕЛЬЗЯ WHERE первым
//!!!мб тут и не надо where по пользователю (попробовать потом без него)
return newRequest.GetViewModel; return newRequest.GetViewModel;
} }
@ -133,7 +134,6 @@ namespace ComputerShopDatabaseImplement.Implements
} }
} }
//!!!мб возвращать не просто request.getviewmodel
public RequestViewModel? Delete(RequestBindingModel model) public RequestViewModel? Delete(RequestBindingModel model)
{ {
using var context = new ComputerShopDatabase(); using var context = new ComputerShopDatabase();

View File

@ -29,42 +29,21 @@ namespace ComputerShopDatabaseImplement.Implements
.ToList(); .ToList();
} }
//!!!МБ ТУТ ВСЁ ВРЕМЯ НАДО БУДЕТ УЧИТЫВАТЬ UserID //Учитывается id пользователя, создавшего заказ
public List<ShipmentViewModel> GetFilteredList(ShipmentSearchModel model) public List<ShipmentViewModel> GetFilteredList(ShipmentSearchModel model)
{ {
using var context = new ComputerShopDatabase(); 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 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) .Include(x => x.Orders)
.ThenInclude(x => x.Order) .ThenInclude(x => x.Order)
.Select(x => x.GetViewModel) .Select(x => x.GetViewModel)
.ToList(); .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)) else if (!string.IsNullOrEmpty(model.ProviderName))
{ {
return context.Shipments return context.Shipments
@ -74,22 +53,27 @@ namespace ComputerShopDatabaseImplement.Implements
.Select(x => x.GetViewModel) .Select(x => x.GetViewModel)
.ToList(); .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) 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; return null;
} }
using var context = new ComputerShopDatabase(); using var context = new ComputerShopDatabase();
return context.Shipments return context.Shipments
.Where(x => x.UserId == model.UserId)
.Include(x => x.Orders) .Include(x => x.Orders)
.ThenInclude(x => x.Order) .ThenInclude(x => x.Order)
.FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id) .FirstOrDefault(x => x.Id == model.Id)
|| (!string.IsNullOrEmpty(model.ProviderName) && x.ProviderName == model.ProviderName))
?.GetViewModel; ?.GetViewModel;
} }
@ -105,13 +89,7 @@ namespace ComputerShopDatabaseImplement.Implements
context.Shipments.Add(newShipment); context.Shipments.Add(newShipment);
context.SaveChanges(); context.SaveChanges();
//!!!мб тут вернуть другое значение return newShipment.GetViewModel;
//!!!МБ ТУТ НЕЛЬЗЯ 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;
} }
//!!!МБ возвращать что-то другое //!!!МБ возвращать что-то другое

View File

@ -12,6 +12,7 @@ using System.Threading.Tasks;
namespace ComputerShopDatabaseImplement.Implements namespace ComputerShopDatabaseImplement.Implements
{ {
//!!!МБ У USER ХРАНИТЬ СПИСКИ ВСЕХ СОЗДАННЫХ СУШНОСТЕЙ И ТОГДА ПРИ СОЗДАНИИ, УДАЛЕНИИ СУЩНОСТЕЙ ЕЩЁ СОЗДАВАТЬ И УДАЛЯТЬ ИЗ СПИСКА У ПОЛЬЗОВАТЕЛЯ
public class UserStorage : IUserStorage public class UserStorage : IUserStorage
{ {
public List<UserViewModel> GetFullList() public List<UserViewModel> GetFullList()
@ -32,6 +33,7 @@ namespace ComputerShopDatabaseImplement.Implements
} }
//!!!ПРОВЕРИТЬ //!!!ПРОВЕРИТЬ
//id, почта и логин уникальны, можно получать по ним
public UserViewModel? GetElement(UserSearchModel model) public UserViewModel? GetElement(UserSearchModel model)
{ {
if (string.IsNullOrEmpty(model.Login) && string.IsNullOrEmpty(model.Email) && !model.Id.HasValue) if (string.IsNullOrEmpty(model.Login) && string.IsNullOrEmpty(model.Email) && !model.Id.HasValue)
@ -79,15 +81,16 @@ namespace ComputerShopDatabaseImplement.Implements
return user.GetViewModel; return user.GetViewModel;
} }
//!!!МБ И НЕ НУЖЕН
public UserViewModel? Delete(UserBindingModel model) public UserViewModel? Delete(UserBindingModel model)
{ {
using var context = new ComputerShopDatabase(); using var context = new ComputerShopDatabase();
var implementer = context.Users.FirstOrDefault(rec => rec.Id == model.Id); var user = context.Users.FirstOrDefault(rec => rec.Id == model.Id);
if (implementer != null) if (user != null)
{ {
context.Users.Remove(implementer); context.Users.Remove(user);
context.SaveChanges(); context.SaveChanges();
return implementer.GetViewModel; return user.GetViewModel;
} }
return null; return null;
} }