154 lines
4.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using HotelContracts.BindingModels;
using HotelContracts.SearchModels;
using HotelContracts.StoragesContracts;
using HotelContracts.ViewModels;
using HotelDataBaseImplement.Models;
using Microsoft.EntityFrameworkCore;
namespace HotelDataBaseImplement.Implements
{
public class ConferenceBookingStorage : IConferenceBookingStorage
{
public List<ConferenceBookingViewModel> GetFullList()
{
using var context = new HotelDataBase();
return context.ConferenceBookings
.Include(x => x.Dinners)
.ThenInclude(x => x.Dinner)
.ThenInclude(x => x.RoomDinners)
.ThenInclude(x => x.Room)
.Include(x => x.Conference)
.Include(x => x.Administrator)
.Select(x => x.GetViewModel)
.ToList();
}
public List<ConferenceBookingViewModel> GetFilteredList(ConferenceBookingSearchModel model)
{
if (!model.AdministratorId.HasValue)
{
return new();
}
using var context = new HotelDataBase();
if (model.AdministratorId.HasValue)
{
return context.ConferenceBookings
.Include(x => x.Dinners)
.ThenInclude(x => x.Dinner)
.ThenInclude(x => x.RoomDinners)
.ThenInclude(x => x.Room)
.Include(x => x.Conference)
.Include(x => x.Administrator)
.Where(x => x.AdministratorId == model.AdministratorId)
.ToList()
.Select(x => x.GetViewModel)
.ToList();
}
return context.ConferenceBookings
.Include(x => x.Dinners)
.ThenInclude(x => x.Dinner)
.ThenInclude(x => x.RoomDinners)
.ThenInclude(x => x.Room)
.Include(x => x.Conference)
.Include(x => x.Administrator)
.Where(x => x.PlaceСonference.Contains(model.PlaceСonference))
.ToList()
.Select(x => x.GetViewModel)
.ToList();
}
public ConferenceBookingViewModel? GetElement(ConferenceBookingSearchModel model)
{
if (string.IsNullOrEmpty(model.PlaceСonference) && !model.Id.HasValue)
{
return null;
}
using var context = new HotelDataBase();
return context.ConferenceBookings
.Include(x => x.Dinners)
.ThenInclude(x => x.Dinner)
.ThenInclude(x => x.RoomDinners)
.ThenInclude(x => x.Room)
.Include(x => x.Conference)
.Include(x => x.Administrator)
.FirstOrDefault(x => (!string.IsNullOrEmpty(model.PlaceСonference) && x.PlaceСonference == model.PlaceСonference) || (model.Id.HasValue && x.Id == model.Id))?
.GetViewModel;
}
public ConferenceBookingViewModel? Insert(ConferenceBookingBindingModel model)
{
using var context = new HotelDataBase();
var newConferenceBooking = ConferenceBooking.Create(context, model);
if (newConferenceBooking == null)
{
return null;
}
context.ConferenceBookings.Add(newConferenceBooking);
context.SaveChanges();
return context.ConferenceBookings
.Include(x => x.Dinners)
.ThenInclude(x => x.Dinner)
.ThenInclude(x => x.RoomDinners)
.ThenInclude(x => x.Room)
.Include(x => x.Conference)
.Include(x => x.Administrator)
.FirstOrDefault(x => x.Id == newConferenceBooking.Id)
?.GetViewModel;
}
public ConferenceBookingViewModel? Update(ConferenceBookingBindingModel model)
{
using var context = new HotelDataBase();
using var transaction = context.Database.BeginTransaction();
try
{
var elem = context.ConferenceBookings
.Include(x => x.Dinners)
.ThenInclude(x => x.Dinner)
.ThenInclude(x => x.ConferenceBookingDinner)
.ThenInclude(x => x.ConferenceBooking)
.ThenInclude(x => x.Conference)
.FirstOrDefault(rec => rec.Id == model.Id); if (elem == null)
{
return null;
}
elem.UpdateDinners(context, model);
context.SaveChanges();
elem.Update(model);
context.SaveChanges();
transaction.Commit();
return elem.GetViewModel;
}
catch
{
transaction.Rollback();
throw;
}
}
public ConferenceBookingViewModel? Delete(ConferenceBookingBindingModel model)
{
using var context = new HotelDataBase();
var element = context.ConferenceBookings
.Include(x => x.Dinners)
.FirstOrDefault(rec => rec.Id == model.Id);
if (element != null)
{
context.ConferenceBookings.Remove(element);
context.SaveChanges();
return element.GetViewModel;
}
return null;
}
}
}