From 0f18873a38e1a5715a10b39b5acbd3d0eaafbfdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=BD=D0=B0=20=D0=97=D0=B0=D0=B1=D1=80=D0=BE?= =?UTF-8?q?=D0=B4=D0=B8=D0=BD=D0=B0?= Date: Sun, 10 Mar 2024 21:48:29 +0400 Subject: [PATCH] =?UTF-8?q?Models=20=D0=B2=20=D0=91=D0=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BindingModels/MealPlanBindingModel.cs | 5 - .../ViewModels/OrganiserViewModel.cs | 2 +- .../Models/Conference.cs | 106 +++++++++++++++++ .../Models/ConferenceBooking.cs | 1 - .../Models/ConferenceMember.cs | 18 +++ .../HotelDataBaseImplement/Models/MealPlan.cs | 108 ++++++++++++++++++ .../Models/MealPlanMember.cs | 18 +++ Hotel/HotelDataBaseImplement/Models/Member.cs | 91 +++++++++++++++ .../Models/Organiser.cs | 96 ++++++++++++++++ 9 files changed, 438 insertions(+), 7 deletions(-) create mode 100644 Hotel/HotelDataBaseImplement/Models/Conference.cs create mode 100644 Hotel/HotelDataBaseImplement/Models/ConferenceMember.cs create mode 100644 Hotel/HotelDataBaseImplement/Models/MealPlan.cs create mode 100644 Hotel/HotelDataBaseImplement/Models/MealPlanMember.cs create mode 100644 Hotel/HotelDataBaseImplement/Models/Member.cs create mode 100644 Hotel/HotelDataBaseImplement/Models/Organiser.cs diff --git a/Hotel/HotelContracts/BindingModels/MealPlanBindingModel.cs b/Hotel/HotelContracts/BindingModels/MealPlanBindingModel.cs index 8427cca..1b23562 100644 --- a/Hotel/HotelContracts/BindingModels/MealPlanBindingModel.cs +++ b/Hotel/HotelContracts/BindingModels/MealPlanBindingModel.cs @@ -1,9 +1,4 @@ using HotelDataModels.Models; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace HotelContracts.BindingModels { diff --git a/Hotel/HotelContracts/ViewModels/OrganiserViewModel.cs b/Hotel/HotelContracts/ViewModels/OrganiserViewModel.cs index b547133..cc8050d 100644 --- a/Hotel/HotelContracts/ViewModels/OrganiserViewModel.cs +++ b/Hotel/HotelContracts/ViewModels/OrganiserViewModel.cs @@ -26,6 +26,6 @@ namespace HotelContracts.ViewModels public string OrganiserEmail { get; set; } = string.Empty; [DisplayName("Телефон организатора")] - public string OrganiserNumber { get; set; } = string.Empty; + public string OrganiserPhoneNumber { get; set; } = string.Empty; } } \ No newline at end of file diff --git a/Hotel/HotelDataBaseImplement/Models/Conference.cs b/Hotel/HotelDataBaseImplement/Models/Conference.cs new file mode 100644 index 0000000..ef79b3d --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Models/Conference.cs @@ -0,0 +1,106 @@ +using HotelContracts.BindingModels; +using HotelContracts.ViewModels; +using HotelDataModels.Models; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace HotelDataBaseImplement.Models +{ + public class Conference : IConferenceModel + { + [Required] + public string ConferenceName { get; set; } = string.Empty; + [Required] + public DateTime StartDate { get; set; } = DateTime.Now; + + public int OrganiserId { get; private set; } + + public int Id { get; private set; } + + public virtual Organiser Organiser { get; set; } + + private Dictionary _conferenceMembers = null; + + [NotMapped] + public Dictionary ConferenceMembers + { + get + { + if (_conferenceMembers == null) + { + using var context = new HotelDataBase(); + _conferenceMembers = Members + .ToDictionary(x => x.MemberId, x => (context.Members + .FirstOrDefault(y => y.Id == x.MemberId)! as IMemberModel)); + } + return _conferenceMembers; + } + } + + [ForeignKey("ConferenceId")] + public virtual List ConferenceBookings { get; set; } = new(); + + [ForeignKey("ConferenceId")] + public virtual List Members { get; set; } = new(); + + public static Conference Create(HotelDataBase context, ConferenceBindingModel model) + { + return new Conference() + { + Id = model.Id, + ConferenceName = model.ConferenceName, + StartDate = model.StartDate, + OrganiserId = model.OrganiserId, + Members = model.ConferenceMembers.Select(x => new ConferenceMember + { + Member = context.Members.First(y => y.Id == x.Key), + }).ToList() + }; + } + + public void Update(ConferenceBindingModel model) + { + ConferenceName = model.ConferenceName; + StartDate = model.StartDate; + OrganiserId = model.OrganiserId; + } + + public ConferenceViewModel GetViewModel => new() + { + Id = Id, + ConferenceName = ConferenceName, + StartDate = StartDate, + OrganiserId = OrganiserId, + ConferenceMembers = ConferenceMembers + }; + + public void UpdateMembers(HotelDataBase context, ConferenceBindingModel model) + { + var conferenceMembers = context.ConferenceMembers.Where(rec => rec.ConferenceId == model.Id).ToList(); + + if (conferenceMembers != null && conferenceMembers.Count > 0) + { + context.ConferenceMembers.RemoveRange(conferenceMembers.Where(rec => !model.ConferenceMembers.ContainsKey(rec.MemberId))); + context.SaveChanges(); + + foreach (var updateMember in conferenceMembers) + { + model.ConferenceMembers.Remove(updateMember.MemberId); + } + context.SaveChanges(); + } + + var conference = context.Conferences.First(x => x.Id == Id); + foreach (var cm in model.ConferenceMembers) + { + context.ConferenceMembers.Add(new ConferenceMember + { + Conference = conference, + Member = context.Members.First(x => x.Id == cm.Key), + }); + context.SaveChanges(); + } + _conferenceMembers = null; + } + } +} \ No newline at end of file diff --git a/Hotel/HotelDataBaseImplement/Models/ConferenceBooking.cs b/Hotel/HotelDataBaseImplement/Models/ConferenceBooking.cs index 17b274a..6b61168 100644 --- a/Hotel/HotelDataBaseImplement/Models/ConferenceBooking.cs +++ b/Hotel/HotelDataBaseImplement/Models/ConferenceBooking.cs @@ -100,4 +100,3 @@ namespace HotelDataBaseImplement.Models } } } -} diff --git a/Hotel/HotelDataBaseImplement/Models/ConferenceMember.cs b/Hotel/HotelDataBaseImplement/Models/ConferenceMember.cs new file mode 100644 index 0000000..402ab7e --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Models/ConferenceMember.cs @@ -0,0 +1,18 @@ +using System.ComponentModel.DataAnnotations; + +namespace HotelDataBaseImplement.Models +{ + public class ConferenceMember + { + public int Id { get; set; } + + [Required] + public int MemberId { get; set; } + + [Required] + public int ConferenceId { get; set; } + + public virtual Conference Conference { get; set; } = new(); + public virtual Member Member { get; set; } = new(); + } +} \ No newline at end of file diff --git a/Hotel/HotelDataBaseImplement/Models/MealPlan.cs b/Hotel/HotelDataBaseImplement/Models/MealPlan.cs new file mode 100644 index 0000000..0a88122 --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Models/MealPlan.cs @@ -0,0 +1,108 @@ +using HotelContracts.BindingModels; +using HotelContracts.ViewModels; +using HotelDataModels.Models; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace HotelDataBaseImplement.Models +{ + public class MealPlan : IMealPlanModel + { + [Required] + public string MealPlanName { get; set; } = string.Empty; + + [Required] + public double MealPlanPrice { get; set; } + + public int OrganiserId { get; private set; } + + public int Id { get; private set; } + + public virtual Organiser Organiser { get; set; } + + private Dictionary _mealPlanMembers = null; + + [NotMapped] + public Dictionary MealPlanMembers + { + get + { + if (_mealPlanMembers == null) + { + using var context = new HotelDataBase(); + _mealPlanMembers = Members + .ToDictionary(x => x.MemberId, x => (context.Members + .FirstOrDefault(y => y.Id == x.MemberId)! as IMemberModel)); + } + return _mealPlanMembers; + } + } + + [ForeignKey("MealPlanId")] + public virtual List Rooms { get; set; } = new(); + + [ForeignKey("MealPlanId")] + public virtual List Members { get; set; } = new(); + + public static MealPlan Create(HotelDataBase context, MealPlanBindingModel model) + { + return new MealPlan() + { + Id = model.Id, + MealPlanName = model.MealPlanName, + MealPlanPrice = model.MealPlanPrice, + OrganiserId = model.OrganiserId, + Members = model.MealPlanMembers.Select(x => new MealPlanMember + { + Member = context.Members.First(y => y.Id == x.Key), + }).ToList() + }; + } + + public void Update(MealPlanBindingModel model) + { + MealPlanName = model.MealPlanName; + MealPlanPrice = model.MealPlanPrice; + OrganiserId = model.OrganiserId; + } + + public MealPlanViewModel GetViewModel => new() + { + Id = Id, + MealPlanName = MealPlanName, + MealPlanPrice = MealPlanPrice, + OrganiserId = OrganiserId, + MealPlanMembers = MealPlanMembers + }; + + public void UpdateMembers(HotelDataBase context, MealPlanBindingModel model) + { + var mealPlanMembers = context.MealPlanMembers.Where(rec => rec.MealPlanId == model.Id).ToList(); + + if (mealPlanMembers != null && mealPlanMembers.Count > 0) + { + context.MealPlanMembers.RemoveRange(mealPlanMembers.Where(rec => !model.MealPlanMembers.ContainsKey(rec.MemberId))); + context.SaveChanges(); + + foreach (var updateMember in mealPlanMembers) + { + model.MealPlanMembers.Remove(updateMember.MemberId); + } + context.SaveChanges(); + } + + var mealPlan = context.MealPlans.First(x => x.Id == Id); + + foreach (var cm in model.MealPlanMembers) + { + context.MealPlanMembers.Add(new MealPlanMember + { + MealPlan = mealPlan, + Member = context.Members.First(x => x.Id == cm.Key) + }); + context.SaveChanges(); + } + _mealPlanMembers = null; + } + } +} \ No newline at end of file diff --git a/Hotel/HotelDataBaseImplement/Models/MealPlanMember.cs b/Hotel/HotelDataBaseImplement/Models/MealPlanMember.cs new file mode 100644 index 0000000..89d55d3 --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Models/MealPlanMember.cs @@ -0,0 +1,18 @@ +using System.ComponentModel.DataAnnotations; + +namespace HotelDataBaseImplement.Models +{ + public class MealPlanMember + { + public int Id { get; set; } + + [Required] + public int MemberId { get; set; } + + [Required] + public int MealPlanId { get; set; } + + public virtual MealPlan MealPlan { get; set; } = new(); + public virtual Member Member { get; set; } = new(); + } +} \ No newline at end of file diff --git a/Hotel/HotelDataBaseImplement/Models/Member.cs b/Hotel/HotelDataBaseImplement/Models/Member.cs new file mode 100644 index 0000000..e4ad8bd --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Models/Member.cs @@ -0,0 +1,91 @@ +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; + +namespace HotelDataBaseImplement.Models +{ + public class Member : IMemberModel + { + [Required] + public string MemberSurname { get; set; } = string.Empty; + [Required] + public string MemberName { get; set; } = string.Empty; + [Required] + public string MemberPatronymic { get; set; } = string.Empty; + [Required] + public string MemberPhoneNumber { get; set; } = string.Empty; + + public int OrganiserId { get; private set; } + + public int Id { get; private set; } + + public virtual Organiser Organiser { get; set; } + + [ForeignKey("MemberId")] + public virtual List MealPlanMember { get; set; } = new(); + + + [ForeignKey("MemberId")] + public virtual List ConferenceMembers { get; set; } = new(); + + public static Member? Create(MemberBindingModel model) + { + if (model == null) + { + return null; + } + return new Member() + { + Id = model.Id, + MemberSurname = model.MemberSurname, + MemberName = model.MemberName, + MemberPatronymic = model.MemberPatronymic, + MemberPhoneNumber = model.MemberPhoneNumber, + OrganiserId = model.OrganiserId, + }; + } + + public static Member Create(MemberViewModel model) + { + return new Member + { + Id = model.Id, + MemberSurname = model.MemberSurname, + MemberName = model.MemberName, + MemberPatronymic = model.MemberPatronymic, + MemberPhoneNumber = model.MemberPhoneNumber, + OrganiserId = model.OrganiserId, + }; + } + + public void Update(MemberBindingModel model) + { + if (model == null) + { + return; + } + MemberSurname = model.MemberSurname; + MemberName = model.MemberName; + MemberPatronymic = model.MemberPatronymic; + MemberPhoneNumber = model.MemberPhoneNumber; + OrganiserId = model.OrganiserId; + } + + public MemberViewModel GetViewModel => new() + { + Id = Id, + MemberSurname = MemberSurname, + MemberName = MemberName, + MemberPatronymic = MemberPatronymic, + MemberPhoneNumber = MemberPhoneNumber, + OrganiserId = OrganiserId + }; + } +} diff --git a/Hotel/HotelDataBaseImplement/Models/Organiser.cs b/Hotel/HotelDataBaseImplement/Models/Organiser.cs new file mode 100644 index 0000000..5aaa6e0 --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Models/Organiser.cs @@ -0,0 +1,96 @@ +using HotelContracts.BindingModels; +using HotelContracts.ViewModels; +using HotelDataModels.Models; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace HotelDataBaseImplement.Models +{ + public class Organiser : IOrganiserModel + { + [Required] + public string OrganiserSurname { get; set; } = string.Empty; + [Required] + public string OrganiserName { get; set; } = string.Empty; + [Required] + public string OrganiserPatronymic { get; set; } = string.Empty; + [Required] + public string OrganiserLogin { get; set; } = string.Empty; + [Required] + public string OrganiserPassword { get; set; } = string.Empty; + [Required] + public string OrganiserEmail { get; set; } = string.Empty; + [Required] + public string OrganiserPhoneNumber { get; set; } = string.Empty; + + public int Id { get; private set; } + + [ForeignKey("OrganiserId")] + public virtual List Conferences { get; set; } = new(); + [ForeignKey("OrganiserId")] + public virtual List MealPlans { get; set; } = new(); + [ForeignKey("OrganiserId")] + public virtual List Members { get; set; } = new(); + + public static Organiser? Create(OrganiserBindingModel model) + { + if (model == null) + { + return null; + } + return new Organiser() + { + Id = model.Id, + OrganiserSurname = model.OrganiserSurname, + OrganiserName = model.OrganiserName, + OrganiserPatronymic = model.OrganiserPatronymic, + OrganiserLogin = model.OrganiserLogin, + OrganiserPassword = model.OrganiserPassword, + OrganiserEmail = model.OrganiserEmail, + OrganiserPhoneNumber = model.OrganiserPhoneNumber + }; + } + + public static Organiser Create(OrganiserViewModel model) + { + return new Organiser + { + Id = model.Id, + OrganiserSurname = model.OrganiserSurname, + OrganiserName = model.OrganiserName, + OrganiserPatronymic = model.OrganiserPatronymic, + OrganiserLogin = model.OrganiserLogin, + OrganiserPassword = model.OrganiserPassword, + OrganiserEmail = model.OrganiserEmail, + OrganiserPhoneNumber = model.OrganiserPhoneNumber + }; + } + + public void Update(OrganiserBindingModel model) + { + if (model == null) + { + return; + } + OrganiserSurname = model.OrganiserSurname; + OrganiserName = model.OrganiserName; + OrganiserPatronymic = model.OrganiserPatronymic; + OrganiserLogin = model.OrganiserLogin; + OrganiserPassword = model.OrganiserPassword; + OrganiserEmail = model.OrganiserEmail; + OrganiserPhoneNumber = model.OrganiserPhoneNumber; + } + + public OrganiserViewModel GetViewModel => new() + { + Id = Id, + OrganiserSurname = OrganiserSurname, + OrganiserName = OrganiserName, + OrganiserPatronymic = OrganiserPatronymic, + OrganiserLogin = OrganiserLogin, + OrganiserPassword = OrganiserPassword, + OrganiserEmail = OrganiserEmail, + OrganiserPhoneNumber = OrganiserPhoneNumber + }; + } +} \ No newline at end of file