хочу каникулы
This commit is contained in:
parent
e974da95b5
commit
f4f0834859
98
CarCenterDatabaseImplement/Models/Car.cs
Normal file
98
CarCenterDatabaseImplement/Models/Car.cs
Normal file
@ -0,0 +1,98 @@
|
||||
using CarCenterContracts.BindingModels;
|
||||
using CarCenterContracts.Extensions;
|
||||
using CarCenterContracts.ViewModels;
|
||||
using CarCenterDataModels;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq.Expressions;
|
||||
using CarCenterDataModels.ProxyModels;
|
||||
|
||||
namespace CarCenterDatabaseImplement.Models
|
||||
{
|
||||
public class Car : ICarModel
|
||||
{
|
||||
public int ImplementerId { get; private set; }
|
||||
public string Name { get; private set; } = string.Empty;
|
||||
public double Price { get; set; }
|
||||
|
||||
public DateOnly DateOfReceipt { get; private set; }
|
||||
|
||||
public DateOnly DateOfPassage { get; private set; }
|
||||
|
||||
|
||||
private Dictionary<int, ClientByCarModel>? _cachedClients = null;
|
||||
[NotMapped]
|
||||
public Dictionary<int, ClientByCarModel> ClientsModel =>
|
||||
_cachedClients ??= Clients.Select(x => (ClientByCarModel)x).ToDictionary(x => x.ClientId, x => x);
|
||||
|
||||
public int Id { get; private set; }
|
||||
|
||||
[Required]
|
||||
public Implementer? Client { get; private set; }
|
||||
[Required]
|
||||
public List<ClientByCar> Clients { get; private set; } = new();
|
||||
|
||||
[Required]
|
||||
public List<RequirementByCar> Requirements { get; private set; } = new();
|
||||
|
||||
public static Car Create(CarBindingModel model) =>
|
||||
model.CastWithCommonProperties<Car, CarBindingModel>();
|
||||
|
||||
public static implicit operator CarViewModel?(Car? model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
model._cachedClients = null;
|
||||
var res = model.CastWithCommonProperties<CarViewModel, Car>();
|
||||
res.DirectorLogin = model.Client?.Login ?? string.Empty;
|
||||
res.RequirementViewModels = model.Requirements?
|
||||
.Select(x => (RequirementViewModel)x.Requirement)
|
||||
.ToList() ?? new();
|
||||
foreach (var clientByCar in model.Clients)
|
||||
{
|
||||
if (clientByCar.Client != null)
|
||||
{
|
||||
res.ClientViewModels.Add(clientByCar.Client.GetViewModel());
|
||||
}
|
||||
else
|
||||
{
|
||||
res.ClientViewModels = new();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public void Update(CarBindingModel model)
|
||||
{
|
||||
Price = model.Price;
|
||||
DateOfPassage = model.DateOfPassage;
|
||||
}
|
||||
|
||||
public void UpdateClients(CarCenterDb context, CarBindingModel model)
|
||||
{
|
||||
var oldClients = context.ClientsByCars.Where(x => x.CarId == model.Id).ToDictionary(x => x.ClientId, x => x);
|
||||
var newClients = model.ClientsModel.ToDictionary(
|
||||
x => x.Key,
|
||||
x =>
|
||||
{
|
||||
var res = x.Value.CastWithCommonProperties<ClientByCar, ClientByCarModel>();
|
||||
res.ClientId = x.Key;
|
||||
res.CarId = Id;
|
||||
return res;
|
||||
});
|
||||
context.RemoveRange(oldClients.Where(x => !newClients.ContainsKey(x.Key)).Select(x => x.Value));
|
||||
context.SaveChanges();
|
||||
context.AddRange (newClients.Where(x => !oldClients.ContainsKey(x.Key)).Select(x => x.Value));
|
||||
oldClients
|
||||
.Where(x => newClients.ContainsKey(x.Key))
|
||||
.Select(x => x.Value).ToList()
|
||||
.ForEach(x => x.DateOfClient = newClients[x.ClientId].DateOfClient);
|
||||
context.SaveChanges();
|
||||
_cachedClients = null;
|
||||
}
|
||||
}
|
||||
}
|
34
CarCenterDatabaseImplement/Models/Implementer.cs
Normal file
34
CarCenterDatabaseImplement/Models/Implementer.cs
Normal file
@ -0,0 +1,34 @@
|
||||
using CarCenterContracts.BindingModels;
|
||||
using CarCenterContracts.Extensions;
|
||||
using CarCenterContracts.ViewModels;
|
||||
using CarCenterDataModels;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace CarCenterDatabaseImplement.Models
|
||||
{
|
||||
public class Implementer : IImplementerModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
[Required]
|
||||
public string FirstName { get; private set; } = string.Empty;
|
||||
[Required]
|
||||
public string LastName { get; private set; } = string.Empty;
|
||||
|
||||
[Required]
|
||||
public string Login { get; private set; } = string.Empty;
|
||||
[Required]
|
||||
public string Password { get; private set; } = string.Empty;
|
||||
|
||||
public string PhoneNumber { get; set; } = string.Empty;
|
||||
|
||||
[Required]
|
||||
public List<Car>? Cars { get; private set; }
|
||||
|
||||
public static Implementer Create(ImplementerBindingModel model)
|
||||
{
|
||||
return model.CastWithCommonProperties<Implementer, ImplementerBindingModel>();
|
||||
}
|
||||
|
||||
public static implicit operator ImplementerViewModel?(Implementer? model) => model?.CastWithCommonProperties<ImplementerViewModel, Implementer>();
|
||||
}
|
||||
}
|
13
CarCenterDatabaseImplement/Models/RequirementByCar.cs
Normal file
13
CarCenterDatabaseImplement/Models/RequirementByCar.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using CarCenterDataModels.ProxyModels;
|
||||
|
||||
namespace CarCenterDatabaseImplement.Models
|
||||
{
|
||||
public class RequirementByCar : RequirementByCarModel
|
||||
{
|
||||
[Required]
|
||||
public Requirement? Requirement { get; private set; }
|
||||
[Required]
|
||||
public Car? Car { get; set; }
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user