using HotelContracts.BindingModels; using HotelContracts.ViewModels; using HotelDataModels.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 HotelDataBaseImplement.Models { public class ConferenceBooking : IConferenceBookingModel { public int Id { get; private set; } public DateTime? DateСonference { get; set; } public int AdministratorId { get; private set; } public int? ConferenceId { get; private set; } [Required] public string PlaceСonference { get; set; } = string.Empty; public virtual Administrator Administrator { get; set; } public virtual Conference? Conference { get; set; } [ForeignKey("ConferenceBookingId")] public virtual List Dinners { get; set; } private Dictionary _conferenceBookingDinners = null; [NotMapped] public Dictionary ConferenceBookingDinners { get { if (_conferenceBookingDinners == null) { using var context = new HotelDataBase(); _conferenceBookingDinners = Dinners .ToDictionary(x => x.DinnerId, x => (context.Dinners .FirstOrDefault(y => y.Id == x.DinnerId)! as IDinnerModel)); } return _conferenceBookingDinners; } } public static ConferenceBooking Create(HotelDataBase context, ConferenceBookingBindingModel model) { return new ConferenceBooking() { Id = model.Id, ConferenceId = model.ConferenceId, AdministratorId = model.AdministratorId, PlaceСonference = model.PlaceСonference, Dinners = model.ConferenceBookingDinners.Select(x => new ConferenceBookingDinner { Dinner = context.Dinners.First(y => y.Id == x.Key), }).ToList() }; } public void Update(ConferenceBookingBindingModel model) { ConferenceId = model.ConferenceId; PlaceСonference = model.PlaceСonference; DateСonference = model.DateСonference; } public ConferenceBookingViewModel GetViewModel => new() { Id = Id, ConferenceId = ConferenceId, AdministratorId = AdministratorId, PlaceСonference = PlaceСonference, DateСonference = DateСonference, ConferenceBookingDinners = ConferenceBookingDinners }; } }