diff --git a/BeautySalonView/BeautySalonDatabaseImplement/Models/Client.cs b/BeautySalonView/BeautySalonDatabaseImplement/Models/Client.cs new file mode 100644 index 0000000..472dfb6 --- /dev/null +++ b/BeautySalonView/BeautySalonDatabaseImplement/Models/Client.cs @@ -0,0 +1,72 @@ +using BeautySalonContracts.BindingModels; +using BeautySalonContracts.ViewModels; +using BeautySalonDataModels.Models; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace BeautySalonDatabaseImplement.Models +{ + public class Client : IClientModel + { + public int Id { get; set; } + + [Required] + public string ClientLogin { get; set; } = string.Empty; + + [Required] + public string ClientFIO { get; set; } = string.Empty; + [Required] + public string ClientEmail { get; set; } = string.Empty; + + [Required] + public string ClientPassword { get; set; } = string.Empty; + + [ForeignKey("ClientId")] + public virtual List Evaluations { get; set; } = new(); + + [ForeignKey("ClientId")] + public virtual List Orders { get; set; } = new(); + + [ForeignKey("ClientId")] + public virtual List Procedures { get; set; } = new(); + + public static Client? Create(ClientBindingModel model) + { + + if (model == null) + { + return null; + } + return new Client() + { + Id = model.Id, + ClientLogin = model.ClientLogin, + ClientFIO = model.ClientFIO, + ClientEmail = model.ClientEmail, + ClientPassword = model.ClientPassword, + }; + } + + public void Update(ClientBindingModel model) + { + if (model == null) + { + return; + } + ClientLogin = model.ClientLogin; + ClientFIO = model.ClientFIO; + ClientEmail = model.ClientEmail; + ClientPassword = model.ClientPassword; + } + + public ClientViewModel GetViewModel => new() + { + Id = Id, + ClientLogin = ClientLogin, + ClientFIO = ClientFIO, + ClientEmail = ClientEmail, + ClientPassword = ClientPassword, + }; + + } +} diff --git a/BeautySalonView/BeautySalonDatabaseImplement/Models/Evaluation.cs b/BeautySalonView/BeautySalonDatabaseImplement/Models/Evaluation.cs new file mode 100644 index 0000000..4d55a68 --- /dev/null +++ b/BeautySalonView/BeautySalonDatabaseImplement/Models/Evaluation.cs @@ -0,0 +1,69 @@ +using BeautySalonContracts.BindingModels; +using BeautySalonContracts.ViewModels; +using BeautySalonDataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BeautySalonDatabaseImplement.Models +{ + public class Evaluation : IEvaluationModel + { + public int Id { get; set; } + + [Required] + public double PointsProcedure { get; set; } + + [Required] + public double PointsCosmetics { get; set; } + + [Required] + public int ProcedureId { get; set; } + + public int ClientId { get; set; } + + public virtual Client Client { get; set; } + + public virtual Procedure Procedure { get; set; } + + public static Evaluation? Create(EvaluationBindingModel? model) + { + if (model == null) + { + return null; + } + return new Evaluation() + { + Id = model.Id, + PointsProcedure=model.PointsProcedure, + PointsCosmetics=model.PointsCosmetics, + ProcedureId=model.ProcedureId, + ClientId=model.ClientId, + }; + } + + public void Update(EvaluationBindingModel? model) + { + if (model == null) + { + return; + } + PointsProcedure = model.PointsProcedure; + PointsCosmetics = model.PointsCosmetics; + ProcedureId = model.ProcedureId; + } + + public EvaluationViewModel GetViewModel => new() + { + Id = Id, + PointsProcedure=PointsProcedure, + PointsCosmetics=PointsCosmetics, + ProcedureId=ProcedureId, + ClientId=ClientId, + ProcedureName = Procedure.ProcedureName + }; + } +} diff --git a/BeautySalonView/BeautySalonDatabaseImplement/Models/Order.cs b/BeautySalonView/BeautySalonDatabaseImplement/Models/Order.cs new file mode 100644 index 0000000..e8e0360 --- /dev/null +++ b/BeautySalonView/BeautySalonDatabaseImplement/Models/Order.cs @@ -0,0 +1,142 @@ +using BeautySalonContracts.BindingModels; +using BeautySalonContracts.ViewModels; +using BeautySalonDataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BeautySalonDatabaseImplement.Models +{ + public class Order : IOrderModel + { + public int Id { get; set; } + + [Required] + public DateTime OrderDate { get; set; } + + [Required] + public double OrderAmount { get; set; } + + [Required] + public int ClientId { get; set; } + public virtual Client? Client { get; set; } + + private List? _orderServices = null; + + private List? _orderProcedures = null; + + [NotMapped] + public List OrderServices + { + get + { + _orderServices ??= Services + .Select(pc => new OrderServiceViewModel(pc.Service.GetViewModel, pc.OrderServiceCount)) + .ToList(); + return _orderServices; + } + } + + [NotMapped] + public List OrderProcedures + { + get + { + _orderProcedures ??= Procedures + .Select(pc => new OrderProcedureViewModel(pc.Procedure.GetViewModel, pc.OrderProcedureCount)) + .ToList(); + return _orderProcedures; + } + } + + // связь услуги и заказов многие - ко - многим + [ForeignKey("OrderId")] + public virtual List Services { get; set; } = new(); + + [ForeignKey("OrderId")] + public virtual List Procedures { get; set; } = new(); + + public static Order Create(BeautySalonDatabase context, OrderBindingModel model) + { + return new Order() + { + Id = model.Id, + OrderDate = model.OrderDate, + OrderAmount = model.OrderAmount, + Services = model.OrderServices.Select(x => new OrderService() + { + Service = context.Services.First(y => y.Id == x.Service.Id), + OrderServiceCount = x.Count + }).ToList(), + Procedures = model.OrderProcedures.Select(x => new OrderCosmetic() + { + Procedure = context.Procedures.First(y => y.Id == x.Procedure.Id), + OrderProcedureCount = x.Count + }).ToList(), + ClientId = model.ClientId, + }; + } + + public void Update(OrderBindingModel model) + { + OrderDate = model.OrderDate; + OrderAmount = model.OrderAmount; + } + + public OrderViewModel GetViewModel => new() + { + Id = Id, + OrderDate = OrderDate, + OrderAmount = OrderAmount, + OrderServices = OrderServices, + OrderProcedures = OrderProcedures, + ClientId = ClientId + }; + + public void UpdateServices(BeautySalonDatabase context, OrderBindingModel model) + { + var orderServices = context.OrderServices + .Where(x => x.OrderId == model.Id) + .ToList(); + context.OrderServices + .RemoveRange(orderServices); + var order = context.Orders.First(x => x.Id == Id); + foreach (var record in model.OrderServices) + { + context.OrderServices.Add(new OrderService + { + Order = order, + Service = context.Services.First(x => x.Id == record.Service.Id), + OrderServiceCount = record.Count + }); + context.SaveChanges(); + } + _orderServices = null; + } + + public void UpdateProcedures(BeautySalonDatabase context, OrderBindingModel model) + { + var orderProcedures = context.OrderProcedures + .Where(x => x.OrderId == model.Id) + .ToList(); + context.OrderProcedures + .RemoveRange(orderProcedures); + var order = context.Orders.First(x => x.Id == Id); + foreach (var record in model.OrderProcedures) + { + context.OrderProcedures.Add(new OrderCosmetic + { + Order = order, + Procedure = context.Procedures.First(x => x.Id == record.Procedure.Id), + OrderProcedureCount = record.Count + }); + context.SaveChanges(); + } + _orderProcedures = null; + } + } +} diff --git a/BeautySalonView/BeautySalonDatabaseImplement/Models/OrderCosmetic.cs b/BeautySalonView/BeautySalonDatabaseImplement/Models/OrderCosmetic.cs new file mode 100644 index 0000000..3689f4e --- /dev/null +++ b/BeautySalonView/BeautySalonDatabaseImplement/Models/OrderCosmetic.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BeautySalonDatabaseImplement.Models +{ + public class OrderCosmetic + { + public int Id { get; set; } + + [Required] + public int OrderId { get; set; } + + [Required] + public int ProcedureId { get; set; } + + [Required] + public int OrderProcedureCount { get; set; } + + public virtual Order Order { get; set; } = new(); + + public virtual Procedure Procedure { get; set; } = new(); + } +} diff --git a/BeautySalonView/BeautySalonDatabaseImplement/Models/Procedure.cs b/BeautySalonView/BeautySalonDatabaseImplement/Models/Procedure.cs new file mode 100644 index 0000000..71f7184 --- /dev/null +++ b/BeautySalonView/BeautySalonDatabaseImplement/Models/Procedure.cs @@ -0,0 +1,121 @@ +using BeautySalonContracts.BindingModels; +using BeautySalonContracts.ViewModels; +using BeautySalonDataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BeautySalonDatabaseImplement.Models +{ + public class Procedure : IProcedureModel + { + public int Id { get; set; } + + [Required] + public string ProcedureName { get; set; } = string.Empty; + + [Required] + public double ProcedurePrice { get; set; } + + public int ClientId { get; set; } + + public virtual Client Client { get; set; } = null!; + + private List? _procedureCosmetics = null; + + [NotMapped] + public List ProcedureCosmetics + { + get + { + _procedureCosmetics ??= Cosmetics + .Select(pc => new ProcedureCosmeticViewModel(pc.Cosmetic.GetViewModel, pc.ProcedureCosmeticCount)) + .ToList(); + return _procedureCosmetics; + } + } + // связь процедуры и оценок один - ко - многим + [ForeignKey("ProcedureId")] + public virtual List Ratings { get; set; } = new(); + + private List? _procedureRatings = null; + [NotMapped] + public List ProcedureRatings + { + get + { + _procedureRatings ??= Ratings + .Select(x => x.GetViewModel) + .ToList(); + return _procedureRatings; + } + } + + // связь процедур и косметки многие - ко - многим + [ForeignKey("ProcedureId")] + public virtual List Cosmetics { get; set; } = new(); + + // связь процедур и заказов многие - ко - многим + [ForeignKey("ProcedureId")] + public virtual List Orders { get; set; } = new(); + + + public static Procedure Create(BeautySalonDatabase context, ProcedureBindingModel model) + { + return new Procedure() + { + Id = model.Id, + ProcedureName = model.ProcedureName, + ProcedurePrice = model.ProcedurePrice, + Cosmetics = model.ProcedureCosmetics.Select(x => new ProcedureCosmetic() + { + Cosmetic = context.Cosmetics.First(y => y.Id == x.Cosmetic.Id), + ProcedureCosmeticCount = x.Count + }).ToList(), + ClientId = model.ClientId, + }; + } + + public void Update(ProcedureBindingModel model) + { + ProcedureName = model.ProcedureName; + ProcedurePrice = model.ProcedurePrice; + } + + public ProcedureViewModel GetViewModel => new() + { + Id = Id, + ProcedureName = ProcedureName, + ProcedurePrice = ProcedurePrice, + ProcedureCosmetics = ProcedureCosmetics, + ProcedureRatings = ProcedureRatings, + ClientId = ClientId + }; + + public void UpdateCosmetics(BeautySalonDatabase context, ProcedureBindingModel model) + { + var procedureCosmetics = context.ProcedureCosmetics + .Where(x => x.ProcedureId == model.Id) + .ToList(); + context.ProcedureCosmetics + .RemoveRange(procedureCosmetics); + var procedure = context.Procedures.First(x => x.Id == Id); + foreach (var record in model.ProcedureCosmetics) + { + context.ProcedureCosmetics.Add(new ProcedureCosmetic + { + Procedure = procedure, + Cosmetic = context.Cosmetics.First(x => x.Id == record.Cosmetic.Id), + ProcedureCosmeticCount = record.Count + }); + context.SaveChanges(); + } + _procedureCosmetics = null; + } + + } +}