From b9867c3c702b6dccda95ef7283e3798402685035 Mon Sep 17 00:00:00 2001 From: Allllen4a Date: Wed, 24 Apr 2024 14:02:00 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0=20implements,=20=D0=BD=D0=BE=20=D0=BD=D1=83=D0=B6=D0=BD?= =?UTF-8?q?=D1=8B=20=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B8=D0=B5=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Implements/ClientStorage.cs | 97 ++++++++++++ .../Implements/EvaluationStorage.cs | 117 ++++++++++++++ .../Implements/OrderStorage.cs | 149 ++++++++++++++++++ .../Implements/ProcedureStorage.cs | 131 +++++++++++++++ 4 files changed, 494 insertions(+) create mode 100644 BeautySalonView/BeautySalonDatabaseImplement/Implements/ClientStorage.cs create mode 100644 BeautySalonView/BeautySalonDatabaseImplement/Implements/EvaluationStorage.cs create mode 100644 BeautySalonView/BeautySalonDatabaseImplement/Implements/OrderStorage.cs create mode 100644 BeautySalonView/BeautySalonDatabaseImplement/Implements/ProcedureStorage.cs diff --git a/BeautySalonView/BeautySalonDatabaseImplement/Implements/ClientStorage.cs b/BeautySalonView/BeautySalonDatabaseImplement/Implements/ClientStorage.cs new file mode 100644 index 0000000..4325afe --- /dev/null +++ b/BeautySalonView/BeautySalonDatabaseImplement/Implements/ClientStorage.cs @@ -0,0 +1,97 @@ +using BeautySalonContracts.BindingModels; +using BeautySalonContracts.SearchModels; +using BeautySalonContracts.StoragesContracts; +using BeautySalonContracts.ViewModels; +using BeautySalonDatabaseImplement.Models; +using Microsoft.EntityFrameworkCore; +using System.Collections.Generic; +using System.Linq; + +namespace BeautySalonDatabaseImplement.Implements +{ + public class ClientStorage : IClientStorage + { + public ClientViewModel? Delete(ClientBindingModel model) + { + using var context = new BeautySalonDatabase(); + + var element = context.Clients.FirstOrDefault(rec => rec.Id == model.Id); + + if (element != null) + { + context.Clients.Remove(element); + context.SaveChanges(); + + return element.GetViewModel; + } + + return null; + } + + + public ClientViewModel? GetElement(ClientSearchModel model) + { + using var context = new BeautySalonDatabase(); + if (model.Id.HasValue) + return context.Clients + .FirstOrDefault(x => x.Id == model.Id)? + .GetViewModel; + + if (!string.IsNullOrEmpty(model.ClientLogin) && + !string.IsNullOrEmpty(model.ClientPassword)) + return context.Clients + .FirstOrDefault(x => + x.ClientLogin.Equals(model.ClientLogin) && + x.ClientPassword.Equals(model.ClientPassword))? + .GetViewModel; + + return null; + } + + public List GetFilteredList(ClientSearchModel model) + { + throw new NotImplementedException(); + } + + public List GetFullList() + { + using var context = new BeautySalonDatabase(); + return context.Clients + .Select(x => x.GetViewModel) + .ToList(); + } + + public ClientViewModel? Insert(ClientBindingModel model) + { + using var context = new BeautySalonDatabase(); + + var newClient = Client.Create(model); + + if (newClient == null) + { + return null; + } + context.Clients.Add(newClient); + context.SaveChanges(); + + return newClient.GetViewModel; + } + + public ClientViewModel? Update(ClientBindingModel model) + { + using var context = new BeautySalonDatabase(); + + var client = context.Clients.FirstOrDefault(x => x.Id == model.Id); + + if (client == null) + { + return null; + } + + client.Update(model); + context.SaveChanges(); + + return client.GetViewModel; + } + } +} \ No newline at end of file diff --git a/BeautySalonView/BeautySalonDatabaseImplement/Implements/EvaluationStorage.cs b/BeautySalonView/BeautySalonDatabaseImplement/Implements/EvaluationStorage.cs new file mode 100644 index 0000000..5d48230 --- /dev/null +++ b/BeautySalonView/BeautySalonDatabaseImplement/Implements/EvaluationStorage.cs @@ -0,0 +1,117 @@ +using BeautySalonContracts.BindingModels; +using BeautySalonContracts.SearchModels; +using BeautySalonContracts.StoragesContracts; +using BeautySalonContracts.ViewModels; +using BeautySalonDatabaseImplement.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BeautySalonDatabaseImplement.Implements +{ + public class EvaluationStorage : IEvaluationStorage + { + public List GetFullList() + { + using var context = new BeautySalonDatabase(); + return context.Evaluations + .Include(x => x.Procedure) + .ToList() + .Select(x => x.GetViewModel) + .ToList(); + } + public int GetNumberOfPages(int userId, int pageSize) + { + using var context = new BeautySalonDatabase(); + int carsCount = context.LaborsCosts.Where(c => c.StaffMemberId == userId).Count(); + int numberOfpages = (int)Math.Ceiling((double)carsCount / pageSize); + return numberOfpages != 0 ? numberOfpages : 1; + } + + public List GetFilteredList(EvaluationSearchModel model) + { + using var context = new BeautySalonDatabase(); + if (model.Id.HasValue) + { + return context.Ratings + .Include(x => x.Procedure) + .Where(x => x.Id == model.Id) + .Select(x => x.GetViewModel) + .ToList(); + } + if (model.ClientId.HasValue && model.PageNumber.HasValue && model.PageSize.HasValue) + { + return context.Ratings + .Include(x => x.Procedure) + .Where(x => x.ClientId == model.ClientId) + .Skip(model.PageSize.Value * (model.PageNumber.Value - 1)) + .Take(model.PageSize.Value) + .Select(x => x.GetViewModel) + .ToList(); + } + return new(); + } + + public EvaluationViewModel? GetElement(EvaluationSearchModel model) + { + if (!model.Id.HasValue) + { + return null; + } + using var context = new BeautySalonDatabase(); + return context.Ratings + .Include(x => x.Procedure) + .FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id) + ?.GetViewModel; + } + + public EvaluationViewModel? Insert(EvaluationBindingModel model) + { + var newRating = Evaluation.Create(model); + if (newRating == null) + { + return null; + } + using var context = new BeautySalonDatabase(); + context.Ratings.Add(newRating); + context.SaveChanges(); + return context.Ratings + .Include(x => x.Procedure) + .FirstOrDefault(x => x.Id == newRating.Id) + ?.GetViewModel; + } + + public EvaluationViewModel? Update(EvaluationBindingModel model) + { + using var context = new BeautySalonDatabase(); + var сosmetic = context.Evaluations + .Include(x => x.Procedure) + .FirstOrDefault(x => x.Id == model.Id); + if (сosmetic == null) + { + return null; + } + сosmetic.Update(model); + context.SaveChanges(); + return сosmetic.GetViewModel; + } + + public EvaluationViewModel? Delete(EvaluationBindingModel model) + { + using var context = new BeautySalonDatabase(); + var element = context.Evaluations + .Include(x => x.Procedure) + .FirstOrDefault(rec => rec.Id == model.Id); + if (element != null) + { + context.Evaluations.Remove(element); + context.SaveChanges(); + return element.GetViewModel; + } + return null; + } + } +} diff --git a/BeautySalonView/BeautySalonDatabaseImplement/Implements/OrderStorage.cs b/BeautySalonView/BeautySalonDatabaseImplement/Implements/OrderStorage.cs new file mode 100644 index 0000000..1bcedd2 --- /dev/null +++ b/BeautySalonView/BeautySalonDatabaseImplement/Implements/OrderStorage.cs @@ -0,0 +1,149 @@ +using BeautySalonContracts.BindingModels; +using BeautySalonContracts.SearchModels; +using BeautySalonContracts.StoragesContracts; +using BeautySalonContracts.ViewModels; +using BeautySalonDatabaseImplement.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BeautySalonDatabaseImplement.Implements +{ + public class OrderStorage : IOrderStorage + { + public OrderViewModel? Delete(OrderBindingModel model) + { + using var context = new BeautySalonDatabase(); + var element = context.Orders + .Include(x => x.Services) + .Include(x => x.Procedures) + .FirstOrDefault(rec => rec.Id == model.Id); + if (element != null) + { + context.Orders.Remove(element); + context.SaveChanges(); + return element.GetViewModel; + } + return null; + } + + public OrderViewModel? GetElement(OrderSearchModel model) + { + if (!model.Id.HasValue) + { + return null; + } + using var context = new BeautySalonDatabase(); + return context.Orders + .Include(x => x.Services) + .ThenInclude(x => x.Service) + .Include(x => x.Procedures) + .ThenInclude(x => x.Procedure) + .FirstOrDefault(x => x.Id == model.Id) + ?.GetViewModel; + } + public int GetNumberOfPages(int userId, int pageSize) + { + using var context = new BeautySalonDatabase(); + int carsCount = context.Orders.Where(c => c.ClientId == userId).Count(); + int numberOfpages = (int)Math.Ceiling((double)carsCount / pageSize); + return numberOfpages != 0 ? numberOfpages : 1; + } + public List GetFilteredList(OrderSearchModel model) + { + if (model == null) + { + return new(); + } + using var context = new BeautySalonDatabase(); + if (model.ClientId.HasValue && model.DateFrom.HasValue && model.DateTo.HasValue) + { + return context.Orders + .Include(x => x.Services) + .ThenInclude(x => x.Service) + .Include(x => x.Procedures) + .ThenInclude(x => x.Procedure) + .ThenInclude(x => x.Ratings) + .Where(x => x.ClientId == model.ClientId && + x.OrderDate >= model.DateFrom && x.OrderDate <= model.DateTo).ToList() + .Select(x => x.GetViewModel) + .ToList(); + } + if (model.ClientId.HasValue && model.PageNumber.HasValue && model.PageSize.HasValue) + { + return context.Orders + .Include(x => x.Services) + .ThenInclude(x => x.Service) + .Where(x => x.ClientId == model.ClientId) + .Skip(model.PageSize.Value * (model.PageNumber.Value - 1)) + .Take(model.PageSize.Value) + .Select(x => x.GetViewModel) + .ToList(); + } + if (model.ClientId.HasValue) + { + return context.Orders + .Include(x => x.Services) + .ThenInclude(x => x.Service) + .Where(x => x.ClientId == model.ClientId) + .Select(x => x.GetViewModel) + .ToList(); + } + return new(); + } + + public List GetFullList() + { + using var context = new BeautySalonDatabase(); + return context.Orders + .Include(x => x.Services) + .ThenInclude(x => x.Service) + .Include(x => x.Procedures) + .ThenInclude(x => x.Procedure) + .ToList() + .Select(x => x.GetViewModel) + .ToList(); + } + + public OrderViewModel? Insert(OrderBindingModel model) + { + using var context = new BeautySalonDatabase(); + var newOrder = Order.Create(context, model); + if (newOrder == null) + { + return null; + } + context.Orders.Add(newOrder); + context.SaveChanges(); + return newOrder.GetViewModel; + } + + public OrderViewModel? Update(OrderBindingModel model) + { + using var context = new BeautySalonDatabase(); + using var transaction = context.Database.BeginTransaction(); + try + { + var order = context.Orders.FirstOrDefault(rec => rec.Id == model.Id); + if (order == null) + { + return null; + } + order.Update(model); + context.SaveChanges(); + order.UpdateServices(context, model); + order.UpdateProcedures(context, model); + transaction.Commit(); + return order.GetViewModel; + } + catch + { + transaction.Rollback(); + throw; + } + } + } +} diff --git a/BeautySalonView/BeautySalonDatabaseImplement/Implements/ProcedureStorage.cs b/BeautySalonView/BeautySalonDatabaseImplement/Implements/ProcedureStorage.cs new file mode 100644 index 0000000..5708dbe --- /dev/null +++ b/BeautySalonView/BeautySalonDatabaseImplement/Implements/ProcedureStorage.cs @@ -0,0 +1,131 @@ +using BeautySalonContracts.BindingModels; +using BeautySalonContracts.SearchModels; +using BeautySalonContracts.StoragesContracts; +using BeautySalonContracts.ViewModels; +using BeautySalonDatabaseImplement.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BeautySalonDatabaseImplement.Implements +{ + public class ProcedureStorage : IProcedureStorage + { + public ProcedureViewModel? Delete(ProcedureBindingModel model) + { + using var context = new BeautySalonDatabase(); + var element = context.Procedures + .Include(x => x.Cosmetics) + .Include(x => x.Orders) + .FirstOrDefault(rec => rec.Id == model.Id); + if (element != null) + { + context.Procedures.Remove(element); + context.SaveChanges(); + return element.GetViewModel; + } + return null; + } + + public ProcedureViewModel? GetElement(ProcedureSearchModel model) + { + if (string.IsNullOrEmpty(model.ProcedureName) && !model.Id.HasValue) + { + return null; + } + using var context = new BeautySalonDatabase(); + return context.Procedures + .Include(x => x.Cosmetics) + .ThenInclude(x => x.Cosmetic) + .FirstOrDefault(x => (!string.IsNullOrEmpty(model.ProcedureName) && x.ProcedureName == model.ProcedureName) || + (model.Id.HasValue && x.Id == model.Id)) + ?.GetViewModel; + } + public int GetNumberOfPages(int userId, int pageSize) + { + using var context = new BeautySalonDatabase(); + int carsCount = context.Procedures.Where(c => c.ClientId == userId).Count(); + int numberOfpages = (int)Math.Ceiling((double)carsCount / pageSize); + return numberOfpages != 0 ? numberOfpages : 1; + } + + public List GetFilteredList(ProcedureSearchModel model) + { + using var context = new BeautySalonDatabase(); + if (model.Id.HasValue) + { + return context.Procedures + .Where(x => x.Id == model.Id) + .Select(x => x.GetViewModel) + .ToList(); + } + if (model.ClientId.HasValue && model.PageNumber.HasValue && model.PageSize.HasValue) + { + return context.Procedures + .Where(x => x.ClientId == model.ClientId) + .Skip(model.PageSize.Value * (model.PageNumber.Value - 1)) + .Take(model.PageSize.Value) + .Select(x => x.GetViewModel) + .ToList(); + } + if (model.ClientId.HasValue) + { + return context.Procedures + .Where(x => x.ClientId == model.ClientId) + .Select(x => x.GetViewModel) + .ToList(); + } + return new(); + } + + public List GetFullList() + { + using var context = new BeautySalonDatabase(); + return context.Procedures + .Include(x => x.Cosmetics) + .ThenInclude(x => x.Cosmetic) + .Select(x => x.GetViewModel) + .ToList(); + } + + public ProcedureViewModel? Insert(ProcedureBindingModel model) + { + using var context = new BeautySalonDatabase(); + var newProcedure = Procedure.Create(context, model); + if (newProcedure == null) + { + return null; + } + context.Procedures.Add(newProcedure); + context.SaveChanges(); + return newProcedure.GetViewModel; + } + + public ProcedureViewModel? Update(ProcedureBindingModel model) + { + using var context = new BeautySalonDatabase(); + using var transaction = context.Database.BeginTransaction(); + try + { + var procedure = context.Procedures.FirstOrDefault(rec => rec.Id == model.Id); + if (procedure == null) + { + return null; + } + procedure.Update(model); + context.SaveChanges(); + procedure.UpdateCosmetics(context, model); + transaction.Commit(); + return procedure.GetViewModel; + } + catch + { + transaction.Rollback(); + throw; + } + } + } +}