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

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)
{
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);

View File

@ -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<OrderViewModel> 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();

View File

@ -15,7 +15,7 @@ namespace ComputerShopDatabaseImplement.Implements
//!!!ПОДОБИЕ textile
public class RequestStorage : IRequestStorage
{
//!!!КАК ПРИСОЕДИНИТЬ СБОРКУ И НАДО ЛИ?
//!!!Проверить, что правильно присоединяю сборку Assembly
public List<RequestViewModel> GetFullList()
{
using var context = new ComputerShopDatabase();
@ -28,14 +28,16 @@ namespace ComputerShopDatabaseImplement.Implements
.ToList();
}
//!!!тут добавил .Include(x => x.Assembly)
//!!!Проверить, что правильно присоединяю сборку Assembly
//Учитывается id пользователя (везде получение списка только тех записей, что создал сам пользователь)
public List<RequestViewModel> 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();

View File

@ -29,42 +29,21 @@ namespace ComputerShopDatabaseImplement.Implements
.ToList();
}
//!!!МБ ТУТ ВСЁ ВРЕМЯ НАДО БУДЕТ УЧИТЫВАТЬ UserID
//Учитывается id пользователя, создавшего заказ
public List<ShipmentViewModel> 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;
}
//!!!МБ возвращать что-то другое

View File

@ -12,6 +12,7 @@ using System.Threading.Tasks;
namespace ComputerShopDatabaseImplement.Implements
{
//!!!МБ У USER ХРАНИТЬ СПИСКИ ВСЕХ СОЗДАННЫХ СУШНОСТЕЙ И ТОГДА ПРИ СОЗДАНИИ, УДАЛЕНИИ СУЩНОСТЕЙ ЕЩЁ СОЗДАВАТЬ И УДАЛЯТЬ ИЗ СПИСКА У ПОЛЬЗОВАТЕЛЯ
public class UserStorage : IUserStorage
{
public List<UserViewModel> 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;
}