using BankContracts.BindingModels; using BankContracts.SearchModels; using BankContracts.StoragesContracts; using BankContracts.ViewModels; using BankDataBaseImplement.Models; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BankDataBaseImplement.Implemets { public class ClientStorage : IClientStorage { public ClientViewModel? Delete(ClientBindingModel model) { using var context = new BankDataBase(); 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 BankDataBase(); if (model.Id.HasValue) return context.Clients .Include(x => x.ConferenceBookings) .Include(x => x.Dinners) .Include(x => x.Rooms) .FirstOrDefault(x => x.Id == model.Id)? .GetViewModel; if (!string.IsNullOrEmpty(model.ClientLogin) && !string.IsNullOrEmpty(model.ClientPassword)) return context.Clients .Include(x => x.ConferenceBookings) .Include(x => x.Dinners) .Include(x => x.Rooms) .FirstOrDefault(x => x.ClientLogin.Equals(model.ClientLogin) && x.ClientPassword.Equals(model.ClientPassword))? .GetViewModel; if (!string.IsNullOrEmpty(model.ClientLogin)) return context.Clients .Include(x => x.ConferenceBookings) .Include(x => x.Dinners) .Include(x => x.Rooms) .FirstOrDefault(x => x.ClientLogin.Equals(model.ClientLogin))? .GetViewModel; return null; } public List GetFilteredList(ClientSearchModel model) { if (string.IsNullOrEmpty(model.ClientFIO)) { return new(); } using var context = new BankDataBase(); return context.Clients .Include(x => x.ConferenceBookings) .Include(x => x.Dinners) .Include(x => x.Rooms) .Where(x => x.ClientLogin.Contains(model.ClientLogin) && x.ClientPassword == model.ClientPassword) .Select(x => x.GetViewModel) .ToList(); } public List GetFullList() { using var context = new BankDataBase(); return context.Clients .Select(x => x.GetViewModel) .ToList(); } public ClientViewModel? Insert(ClientBindingModel model) { var newHeadwaiter = Client.Create(model); if (newHeadwaiter == null) { return null; } using var context = new BankDataBase(); context.Clients.Add(newHeadwaiter); context.SaveChanges(); return newHeadwaiter.GetViewModel; } public ClientViewModel? Update(ClientBindingModel model) { using var context = new BankDataBase(); var headwaiter = context.Clients .FirstOrDefault(x => x.Id == model.Id); if (headwaiter == null) { return null; } headwaiter.Update(model); context.SaveChanges(); return headwaiter.GetViewModel; } } }