diff --git a/Hotel/HotelDataBaseImplement/Implemets/DinnerStorage.cs b/Hotel/HotelDataBaseImplement/Implemets/DinnerStorage.cs new file mode 100644 index 0000000..99d319b --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Implemets/DinnerStorage.cs @@ -0,0 +1,120 @@ +using HotelContracts.BindingModels; +using HotelContracts.SearchModels; +using HotelContracts.StoragesContracts; +using HotelContracts.ViewModels; +using HotelDataBaseImplement.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HotelDataBaseImplement.Implemets +{ + public class DinnerStorage : IDinnerStorage + { + public DinnerViewModel? Delete(DinnerBindingModel model) + { + using var context = new HotelDataBase(); + + var element = context.Dinners.FirstOrDefault(rec => rec.Id == model.Id); + + if (element != null) + { + context.Dinners.Remove(element); + context.SaveChanges(); + + return element.GetViewModel; + } + + return null; + } + + public DinnerViewModel? GetElement(DinnerSearchModel model) + { + if (string.IsNullOrEmpty(model.DinnerName) && !model.Id.HasValue) + { + return null; + } + + using var context = new HotelDataBase(); + + return context.Dinners + .Include(x => x.RoomDinners) + .ThenInclude(x => x.Room) + .Include(x => x.ConferenceBookingDinners) + .ThenInclude(x => x.ConferenceBooking) + .FirstOrDefault(x => (!string.IsNullOrEmpty(model.DinnerName) && x.DinnerName == model.DinnerName) || (model.Id.HasValue && x.Id == model.Id))? + .GetViewModel; + } + + public List GetFilteredList(DinnerSearchModel model) + { + if (string.IsNullOrEmpty(model.DinnerName)) + { + return new(); + } + + using var context = new HotelDataBase(); + + return context.Dinners + .Include(x => x.RoomDinners) + .ThenInclude(x => x.Room) + .Include(x => x.ConferenceBookingDinners) + .ThenInclude(x => x.ConferenceBooking) + .Where(x => x.DinnerName.Contains(model.DinnerName)) + .ToList() + .Select(x => x.GetViewModel) + .ToList(); + } + + public List GetFullList() + { + using var context = new HotelDataBase(); + + return context.Dinners + .Include(x => x.RoomDinners) + .ThenInclude(x => x.Room) + .Include(x => x.ConferenceBookingDinners) + .ThenInclude(x => x.ConferenceBooking) + .ToList() + .Select(x => x.GetViewModel) + .ToList(); + } + + public DinnerViewModel? Insert(DinnerBindingModel model) + { + using var context = new HotelDataBase(); + + var newDinner = Dinner.Create(model); + + if (newDinner == null) + { + return null; + } + + context.Dinners.Add(newDinner); + context.SaveChanges(); + + return newDinner.GetViewModel; + } + + public DinnerViewModel? Update(DinnerBindingModel model) + { + using var context = new HotelDataBase(); + + var dinner = context.Dinners.FirstOrDefault(x => x.Id == model.Id); + + if (dinner == null) + { + return null; + } + + dinner.Update(model); + context.SaveChanges(); + + return dinner.GetViewModel; + } + } +} diff --git a/Hotel/HotelDataBaseImplement/Models/Dinner.cs b/Hotel/HotelDataBaseImplement/Models/Dinner.cs index 0a701e4..11e5f13 100644 --- a/Hotel/HotelDataBaseImplement/Models/Dinner.cs +++ b/Hotel/HotelDataBaseImplement/Models/Dinner.cs @@ -1,4 +1,5 @@ -using HotelDataModels.Models; +using HotelContracts.ViewModels; +using HotelDataModels.Models; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -27,6 +28,6 @@ namespace HotelDataBaseImplement.Models [ForeignKey("DinnercId")] public virtual List ConferenceBookingDinners { get; set; } - + public DinnerViewModel? GetViewModel { get; internal set; } } }