аля монтера ара
This commit is contained in:
parent
18c17156f1
commit
bb4b669d7c
82
CarCenterDatabaseImplement/Implements/AccountStorage.cs
Normal file
82
CarCenterDatabaseImplement/Implements/AccountStorage.cs
Normal file
@ -0,0 +1,82 @@
|
||||
using CarCenterContracts.BindingModels;
|
||||
using CarCenterContracts.SearchModels;
|
||||
using CarCenterContracts.StoragesContracts;
|
||||
using CarCenterContracts.ViewModels;
|
||||
using CarCenterDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Design;
|
||||
using Microsoft.EntityFrameworkCore.Query;
|
||||
|
||||
namespace CarCenterDatabaseImplement.Implements
|
||||
{
|
||||
public class AccountStorage : IAccountStorage
|
||||
{
|
||||
private static IIncludableQueryable<Account, Client?> Accounts(CarCenterDb context)
|
||||
=> context.Accounts
|
||||
.Include(x => x.ClientByCar).ThenInclude(x => x.Car)
|
||||
.Include(x => x.ClientByCar).ThenInclude(x => x.Client);
|
||||
|
||||
public List<AccountViewModel> GetFullList()
|
||||
{
|
||||
using var context = new CarCenterDb();
|
||||
return Accounts(context)
|
||||
.Select(x => (AccountViewModel)x)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public List<AccountViewModel> GetFilteredList(AccountSearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model), "Получена пустая поисковая модель");
|
||||
}
|
||||
|
||||
if (model.DateFrom.HasValue && !model.DateTo.HasValue || model.DateTo.HasValue && !model.DateFrom.HasValue)
|
||||
{
|
||||
throw new ArgumentException("Получена поисковая модель только с началом или концом периода");
|
||||
}
|
||||
if (!model.DateFrom.HasValue && !model.ClientId.HasValue)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model.ClientId), "Получена поисковая модель без ClientId");
|
||||
|
||||
}
|
||||
if (!model.DateFrom.HasValue && !model.CarId.HasValue)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model.CarId), "Получена поисковая модель без CarId");
|
||||
}
|
||||
using var context = new CarCenterDb();
|
||||
if (model.DateFrom.HasValue)
|
||||
{
|
||||
return Accounts(context)
|
||||
.Where(x => model.DateFrom.Value <= x.DateOfAccount && x.DateOfAccount <= model.DateTo.Value)
|
||||
.Select(x => (AccountViewModel)x)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
return Accounts(context)
|
||||
.Where(x => x.ClientByCar != null &&
|
||||
x.ClientByCar.ClientId == model.ClientId &&
|
||||
x.ClientByCar.CarId == model.CarId)
|
||||
.Select(x => (AccountViewModel)x)
|
||||
.ToList();
|
||||
}
|
||||
public AccountViewModel? GetElement(AccountSearchModel model)
|
||||
{
|
||||
using var context = new CarCenterDb();
|
||||
return Accounts(context)
|
||||
.FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id));
|
||||
}
|
||||
public AccountViewModel? Insert(AccountBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
var newAccount = Account.Create(model);
|
||||
using var context = new CarCenterDb();
|
||||
context.Accounts.Add(newAccount);
|
||||
context.SaveChanges();
|
||||
return newAccount;
|
||||
}
|
||||
}
|
||||
}
|
148
CarCenterDatabaseImplement/Implements/CarStorage.cs
Normal file
148
CarCenterDatabaseImplement/Implements/CarStorage.cs
Normal file
@ -0,0 +1,148 @@
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using CarCenterContracts.BindingModels;
|
||||
using CarCenterContracts.SearchModels;
|
||||
using CarCenterContracts.StoragesContracts;
|
||||
using CarCenterContracts.ViewModels;
|
||||
using CarCenterDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace CarCenterDatabaseImplement.Implements
|
||||
{
|
||||
public class CarStorage : ICarStorage
|
||||
{
|
||||
private void CheckSearchModel(CarSearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
throw new ArgumentNullException("Передаваемая модель для поиска равна нулю", nameof(model));
|
||||
if (!model.Id.HasValue && !model.ImplementerId.HasValue && !model.DateFrom.HasValue && !model.DateTo.HasValue && model.ClientsIds == null)
|
||||
throw new ArgumentException("Все передаваемые поля поисковой модели оказались пусты или равны null");
|
||||
if (model.DateFrom.HasValue != model.DateTo.HasValue)
|
||||
throw new ArgumentException($"Не указано начало {model.DateFrom} или конец {model.DateTo} периода для поиска по дате.");
|
||||
}
|
||||
public CarViewModel? Delete(CarBindingModel model)
|
||||
{
|
||||
using var context = new CarCenterDb();
|
||||
var element = context.Cars.FirstOrDefault(x => x.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
context.Cars.Remove(element);
|
||||
context.SaveChanges();
|
||||
return element;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<AccountViewModel> GetAccountsFromCarAndClient(CarSearchModel modelCar, ClientSearchModel modelClient)
|
||||
{
|
||||
if (!modelCar.Id.HasValue)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(modelCar), "Получена поисковая модель без Id");
|
||||
}
|
||||
if (!modelClient.Id.HasValue)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(modelClient), "Получена поисковая модель без Id");
|
||||
}
|
||||
using var context = new CarCenterDb();
|
||||
var clientByCar = context.ClientsByCars
|
||||
.Include(x => x.Accounts)
|
||||
.FirstOrDefault(x => x.ClientId == modelClient.Id && x.CarId == modelCar.Id);
|
||||
if (clientByCar?.Accounts == null)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
$"Не существует связи между данным клиентом(Id={modelClient.Id}) и талоном(Id={modelCar.Id})");
|
||||
}
|
||||
return clientByCar.Accounts.Select(account => (AccountViewModel)account).ToList();
|
||||
}
|
||||
|
||||
public CarViewModel? GetElement(CarSearchModel model)
|
||||
{
|
||||
using var context = new CarCenterDb();
|
||||
if (!model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return context.Cars
|
||||
.Include(x => x.Client)
|
||||
.Include(x => x.Clients)
|
||||
.FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id);
|
||||
}
|
||||
|
||||
public List<CarViewModel> GetFilteredList(CarSearchModel model)
|
||||
{
|
||||
CheckSearchModel(model);
|
||||
if (model.Id.HasValue)
|
||||
{
|
||||
var res = GetElement(model);
|
||||
return res != null ? new() { res } : new();
|
||||
}
|
||||
|
||||
using var context = new CarCenterDb();
|
||||
var query = context.Cars.Include(x => x.Client);
|
||||
IQueryable<Car>? resultQuery = null;
|
||||
if (model.ImplementerId.HasValue)
|
||||
{
|
||||
return query
|
||||
.Where(x => model.ImplementerId == x.ImplementerId)
|
||||
.Select(x => (CarViewModel)x)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
if (model.DateTo.HasValue)
|
||||
resultQuery = query
|
||||
.Include(x => x.Clients)
|
||||
.ThenInclude(x => x.Client)
|
||||
.Include(x => x.Requirements)
|
||||
.ThenInclude(x => x.Requirement)
|
||||
.Where(x => model.DateFrom <= x.DateOfReceipt && x.DateOfReceipt <= model.DateTo);
|
||||
|
||||
else if (model.ClientsIds != null)
|
||||
resultQuery = query
|
||||
.Include(x => x.Clients)
|
||||
.ThenInclude(x => x.Client)
|
||||
.Where(x => x.Clients.Any(x => model.ClientsIds.Contains(x.ClientId)));
|
||||
|
||||
return resultQuery?
|
||||
.Select(x => (CarViewModel)x)
|
||||
.ToList() ?? new();
|
||||
}
|
||||
|
||||
public List<CarViewModel> GetFullList()
|
||||
{
|
||||
using var context = new CarCenterDb();
|
||||
return context.Cars
|
||||
.Include(x => x.Client)
|
||||
.Include(x => x.Clients)
|
||||
.Select(x => (CarViewModel)x)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public CarViewModel? Insert(CarBindingModel model)
|
||||
{
|
||||
var newCar = Car.Create(model);
|
||||
if (newCar == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new CarCenterDb();
|
||||
context.Cars.Add(newCar);
|
||||
context.SaveChanges();
|
||||
newCar.UpdateClients(context, model);
|
||||
context.SaveChanges();
|
||||
return newCar;
|
||||
}
|
||||
|
||||
public CarViewModel? Update(CarBindingModel model)
|
||||
{
|
||||
using var context = new CarCenterDb();
|
||||
var Carvisit = context.Cars.FirstOrDefault(x => x.Id == model.Id);
|
||||
if (Carvisit == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
Carvisit.Update(model);
|
||||
Carvisit.UpdateClients(context, model);
|
||||
context.SaveChanges();
|
||||
return Carvisit;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user