From 9797a27a3f11ed194189fc8bbb41845384391ebe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=B0=D1=88=D0=B8=D0=BD=20=D0=9C=D0=B0=D0=BA=D1=81?= =?UTF-8?q?=D0=B8=D0=BC?= Date: Wed, 5 Apr 2023 11:31:08 +0400 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20Room=20=D0=B2=20HotelDataBaseImplement.Mod?= =?UTF-8?q?els?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Hotel/HotelDataBaseImplement/HotelDataBase.cs | 2 + Hotel/HotelDataBaseImplement/Models/Room.cs | 90 +++++++++++++++++-- .../Models/RoomDinner.cs | 4 +- 3 files changed, 87 insertions(+), 9 deletions(-) diff --git a/Hotel/HotelDataBaseImplement/HotelDataBase.cs b/Hotel/HotelDataBaseImplement/HotelDataBase.cs index 1d0cf86..609faee 100644 --- a/Hotel/HotelDataBaseImplement/HotelDataBase.cs +++ b/Hotel/HotelDataBaseImplement/HotelDataBase.cs @@ -14,12 +14,14 @@ namespace HotelDataBaseImplement base.OnConfiguring(optionsBuilder); } public virtual DbSet Conferences { set; get; } + public virtual DbSet Rooms { set; get; } public virtual DbSet MealPlans { set; get; } public virtual DbSet ConferenceBookings { set; get; } public virtual DbSet Members { set; get; } public virtual DbSet Dinners { set; get; } public virtual DbSet Organisers { set; get; } public virtual DbSet ConferenceMembers { set; get; } + public virtual DbSet RoomDinners { set; get; } public virtual DbSet MealPlanMembers { set; get; } public virtual DbSet ConferenceBookingDinners { set; get; } diff --git a/Hotel/HotelDataBaseImplement/Models/Room.cs b/Hotel/HotelDataBaseImplement/Models/Room.cs index bf6d882..0e1e914 100644 --- a/Hotel/HotelDataBaseImplement/Models/Room.cs +++ b/Hotel/HotelDataBaseImplement/Models/Room.cs @@ -1,6 +1,10 @@ -using HotelDataModels.Models; +using HotelContracts.BindingModels; +using HotelContracts.ViewModels; +using HotelDataModels.Models; using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -9,16 +13,88 @@ namespace HotelDataBaseImplement.Models { public class Room : IRoomModel { - public string RoomName => throw new NotImplementedException(); + [Required] + public string RoomName { get; set; } = string.Empty; + [Required] + public string RoomFrame { get; set; } = string.Empty; + [Required] + public double RoomPrice { get; set; } + public int HeadwaiterId { get; private set; } + public int MealPlanId { get; private set; } + public int Id { get; private set; } - public string RoomFrame => throw new NotImplementedException(); + public virtual Headwaiter Headwaiter { get; set; } + public virtual MealPlan MealPlan { get; set; } - public double RoomPrice => throw new NotImplementedException(); + [ForeignKey("RoomId")] + public virtual List Dinners { get; set; } - public int HeadwaiterId => throw new NotImplementedException(); + private Dictionary _roomDinners = null; + public Dictionary RoomDinners + { + get + { + if (_roomDinners == null) + { + _roomDinners = Dinners.ToDictionary(recPC => recPC.DinnerId, recPC => (recPC.Dinner as IDinnerModel)); + } + return _roomDinners; + } + } - public int MealPlanId => throw new NotImplementedException(); + public static Room Create(HotelDataBase context, RoomBindingModel model) + { + return new Room() + { + Id = model.Id, + RoomName = model.RoomName, + RoomFrame = model.RoomFrame, + RoomPrice = model.RoomPrice, + Dinners = model.RoomDinners.Select(x => new RoomDinner + { + Dinner = context.Dinners.First(y => y.Id == x.Key), + }).ToList() + }; + } - public int Id => throw new NotImplementedException(); + public void Update(RoomBindingModel model) + { + RoomName = model.RoomName; + RoomFrame = model.RoomFrame; + RoomPrice = model.RoomPrice; + } + + public RoomViewModel GetViewModel => new() + { + Id = Id, + RoomName = RoomName, + RoomFrame = RoomFrame, + RoomPrice = RoomPrice, + RoomDinners = RoomDinners + }; + + public void UpdateDinners(HotelDataBase context, RoomBindingModel model) + { + var roomDinners = context.RoomDinners.Where(rec => rec.RoomId == model.Id).ToList(); + + if (roomDinners != null) + { + context.RoomDinners.RemoveRange(roomDinners.Where(rec => !model.RoomDinners.ContainsKey(rec.DinnerId))); + context.SaveChanges(); + } + + var room = context.Rooms.First(x => x.Id == Id); + + foreach (var cm in model.RoomDinners) + { + context.RoomDinners.Add(new RoomDinner + { + Room = room, + Dinner = context.Dinners.First(x => x.Id == cm.Key) + }); + context.SaveChanges(); + } + _roomDinners = null; + } } } diff --git a/Hotel/HotelDataBaseImplement/Models/RoomDinner.cs b/Hotel/HotelDataBaseImplement/Models/RoomDinner.cs index 95e71b8..46ea020 100644 --- a/Hotel/HotelDataBaseImplement/Models/RoomDinner.cs +++ b/Hotel/HotelDataBaseImplement/Models/RoomDinner.cs @@ -15,7 +15,7 @@ namespace HotelDataBaseImplement.Models [Required] public int Count { get; set; } - public virtual Room Rooms { get; set; } - public virtual Dinner Dinners { get; set; } + public virtual Room Room { get; set; } + public virtual Dinner Dinner { get; set; } } }