diff --git a/Hotel/HotelDataBaseImplement/Implemets/ConferenceStorage.cs b/Hotel/HotelDataBaseImplement/Implemets/ConferenceStorage.cs new file mode 100644 index 0000000..32b387d --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Implemets/ConferenceStorage.cs @@ -0,0 +1,166 @@ +using HotelContracts.BindingModels; +using HotelContracts.SearchModels; +using HotelContracts.StoragesContracts; +using HotelContracts.ViewModels; +using HotelDataBaseImplement.Models; +using Microsoft.EntityFrameworkCore; + +namespace HotelDataBaseImplement.Implemets +{ + public class ConferenceStorage : IConferenceStorage + { + public List GetFullList() + { + using var context = new HotelDataBase(); + + return context.Conferences + .Include(x => x.Members) + .ThenInclude(x => x.Member) + .ThenInclude(x => x.MealPlanMember) + .ThenInclude(x => x.MealPlan) + .Include(x => x.ConferenceBookings) + .Include(x => x.Organiser) + .ToList() + .Select(x => x.GetViewModel) + .ToList(); + } + + public List GetFilteredList(ConferenceSearchModel model) + { + if (!model.DateFrom.HasValue && !model.DateTo.HasValue && !model.OrganiserId.HasValue) + { + return new(); + } + using var context = new HotelDataBase(); + + if (model.DateFrom.HasValue) + { + return context.Conferences + .Include(x => x.Members) + .ThenInclude(x => x.Member) + .ThenInclude(x => x.MealPlanMember) + .ThenInclude(x => x.MealPlan) + .Include(x => x.ConferenceBookings) + .Include(x => x.Organiser) + .Where(x => x.StartDate >= model.DateFrom && x.StartDate <= model.DateTo && x.OrganiserId == model.OrganiserId) + .Select(x => x.GetViewModel) + .ToList(); + } + else if (model.OrganiserId.HasValue) + { + return context.Conferences + .Include(x => x.Members) + .ThenInclude(x => x.Member) + .ThenInclude(x => x.MealPlanMember) + .ThenInclude(x => x.MealPlan) + .Include(x => x.ConferenceBookings) + .Include(x => x.Organiser) + .Where(x => x.OrganiserId == model.OrganiserId) + .ToList() + .Select(x => x.GetViewModel) + .ToList(); + } + + return context.Conferences + .Include(x => x.Members) + .ThenInclude(x => x.Member) + .ThenInclude(x => x.MealPlanMember) + .ThenInclude(x => x.MealPlan) + .Include(x => x.ConferenceBookings) + .Include(x => x.Organiser) + .Where(x => x.ConferenceName.Contains(model.ConferenceName)) + .ToList() + .Select(x => x.GetViewModel) + .ToList(); + } + + public ConferenceViewModel? GetElement(ConferenceSearchModel model) + { + if (string.IsNullOrEmpty(model.ConferenceName) && !model.Id.HasValue) + { + return null; + } + + using var context = new HotelDataBase(); + + return context.Conferences + .Include(x => x.Members) + .ThenInclude(x => x.Member) + .ThenInclude(x => x.MealPlanMember) + .ThenInclude(x => x.MealPlan) + .Include(x => x.ConferenceBookings) + .Include(x => x.Organiser) + .FirstOrDefault(x => (!string.IsNullOrEmpty(model.ConferenceName) && x.ConferenceName == model.ConferenceName) + || (model.Id.HasValue && x.Id == model.Id))? + .GetViewModel; + } + + public ConferenceViewModel? Insert(ConferenceBindingModel model) + { + using var context = new HotelDataBase(); + var newConference = Conference.Create(context, model); + + if (newConference == null) + { + return null; + } + + context.Conferences.Add(newConference); + context.SaveChanges(); + + return context.Conferences + .Include(x => x.Members) + .ThenInclude(x => x.Member) + .ThenInclude(x => x.MealPlanMember) + .ThenInclude(x => x.MealPlan) + .Include(x => x.ConferenceBookings) + .Include(x => x.Organiser) + .FirstOrDefault(x => x.Id == newConference.Id) + ?.GetViewModel; + } + + public ConferenceViewModel? Update(ConferenceBindingModel model) + { + using var context = new HotelDataBase(); + using var transaction = context.Database.BeginTransaction(); + try + { + var elem = context.Conferences.FirstOrDefault(rec => rec.Id == model.Id); + if (elem == null) + { + return null; + } + elem.Update(model); + context.SaveChanges(); + if (model.ConferenceMembers != null) + { + elem.UpdateMembers(context, model); + } + transaction.Commit(); + return elem.GetViewModel; + } + catch + { + transaction.Rollback(); + throw; + } + } + + public ConferenceViewModel? Delete(ConferenceBindingModel model) + { + using var context = new HotelDataBase(); + + var element = context.Conferences.Include(x => x.Members).FirstOrDefault(rec => rec.Id == model.Id); + + if (element != null) + { + context.Conferences.Remove(element); + context.SaveChanges(); + + return element.GetViewModel; + } + + return null; + } + } +} diff --git a/Hotel/HotelDataBaseImplement/Implemets/MealPlanStorage.cs b/Hotel/HotelDataBaseImplement/Implemets/MealPlanStorage.cs new file mode 100644 index 0000000..101d3de --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Implemets/MealPlanStorage.cs @@ -0,0 +1,142 @@ +using HotelContracts.BindingModels; +using HotelContracts.SearchModels; +using HotelContracts.StoragesContracts; +using HotelContracts.ViewModels; +using HotelDataBaseImplement.Models; +using Microsoft.EntityFrameworkCore; + +namespace HotelDataBaseImplement.Implemets +{ + public class MealPlanStorage : IMealPlanStorage + { + public List GetFullList() + { + using var context = new HotelDataBase(); + return context.MealPlans + .Include(x => x.Members) + .ThenInclude(x => x.Member) + .ThenInclude(x => x.ConferenceMembers) + .ThenInclude(x => x.Conference) + .Include(x => x.Rooms) + .Include(x => x.Organiser) + .Select(x => x.GetViewModel) + .ToList(); + } + + public List GetFilteredList(MealPlanSearchModel model) + { + if (string.IsNullOrEmpty(model.MealPlanName) && !model.OrganiserId.HasValue) + { + return new(); + } + + using var context = new HotelDataBase(); + + if (model.OrganiserId.HasValue) + { + return context.MealPlans + .Include(x => x.Members) + .ThenInclude(x => x.Member) + .ThenInclude(x => x.ConferenceMembers) + .ThenInclude(x => x.Conference) + .Include(x => x.Rooms) + .Include(x => x.Organiser) + .Where(x => x.OrganiserId == model.OrganiserId) + .ToList() + .Select(x => x.GetViewModel) + .ToList(); + } + + return context.MealPlans + .Include(x => x.Members) + .ThenInclude(x => x.Member) + .ThenInclude(x => x.ConferenceMembers) + .ThenInclude(x => x.Conference) + .Include(x => x.Rooms) + .Include(x => x.Organiser) + .Where(x => x.MealPlanName.Contains(model.MealPlanName)) + .ToList() + .Select(x => x.GetViewModel) + .ToList(); + } + + public MealPlanViewModel? GetElement(MealPlanSearchModel model) + { + if (string.IsNullOrEmpty(model.MealPlanName) && !model.Id.HasValue) + { + return null; + } + + using var context = new HotelDataBase(); + + return context.MealPlans + .Include(x => x.Members) + .ThenInclude(x => x.Member) + .ThenInclude(x => x.ConferenceMembers) + .ThenInclude(x => x.Conference) + .Include(x => x.Rooms) + .Include(x => x.Organiser) + .FirstOrDefault(x => (!string.IsNullOrEmpty(model.MealPlanName) && x.MealPlanName == model.MealPlanName) || (model.Id.HasValue && x.Id == model.Id))? + .GetViewModel; + } + + public MealPlanViewModel? Insert(MealPlanBindingModel model) + { + using var context = new HotelDataBase(); + var newMealPlan = MealPlan.Create(context, model); + + if (newMealPlan == null) + { + return null; + } + + context.MealPlans.Add(newMealPlan); + context.SaveChanges(); + return newMealPlan.GetViewModel; + } + + public MealPlanViewModel? Update(MealPlanBindingModel model) + { + using var context = new HotelDataBase(); + using var transaction = context.Database.BeginTransaction(); + try + { + var elem = context.MealPlans.FirstOrDefault(rec => rec.Id == model.Id); + if (elem == null) + { + return null; + } + elem.Update(model); + context.SaveChanges(); + if (model.MealPlanMembers != null) + { + elem.UpdateMembers(context, model); + } + transaction.Commit(); + return elem.GetViewModel; + } + catch + { + transaction.Rollback(); + throw; + } + } + + public MealPlanViewModel? Delete(MealPlanBindingModel model) + { + using var context = new HotelDataBase(); + + var element = context.MealPlans.Include(x => x.Members).FirstOrDefault(rec => rec.Id == model.Id); + + if (element != null) + { + context.MealPlans.Remove(element); + context.SaveChanges(); + + return element.GetViewModel; + } + + return null; + } + } +} diff --git a/Hotel/HotelDataBaseImplement/Implemets/MemberStorage.cs b/Hotel/HotelDataBaseImplement/Implemets/MemberStorage.cs new file mode 100644 index 0000000..2669953 --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Implemets/MemberStorage.cs @@ -0,0 +1,138 @@ +using HotelContracts.BindingModels; +using HotelContracts.SearchModels; +using HotelContracts.StoragesContracts; +using HotelContracts.ViewModels; +using HotelDataBaseImplement.Models; +using Microsoft.EntityFrameworkCore; + +namespace HotelDataBaseImplement.Implemets +{ + public class MemberStorage : IMemberStorage + { + public List GetFullList() + { + using var context = new HotelDataBase(); + + return context.Members + .Include(x => x.ConferenceMembers) + .ThenInclude(x => x.Conference) + .Include(x => x.MealPlanMember) + .ThenInclude(x => x.MealPlan) + .Include(x => x.Organiser) + .Select(x => x.GetViewModel) + .ToList(); + } + + public List GetFilteredList(MemberSearchModel model) + { + if (string.IsNullOrEmpty(model.MemberSurname) && string.IsNullOrEmpty(model.MemberName) + && string.IsNullOrEmpty(model.MemberPatronymic) && !model.OrganiserId.HasValue) + { + return new(); + } + + using var context = new HotelDataBase(); + + if (model.OrganiserId.HasValue) + { + return context.Members + .Include(x => x.ConferenceMembers) + .ThenInclude(x => x.Conference) + .Include(x => x.MealPlanMember) + .ThenInclude(x => x.MealPlan) + .Include(x => x.Organiser) + .Where(x => x.OrganiserId == model.OrganiserId) + .Select(x => x.GetViewModel) + .ToList(); + } + + return context.Members + .Include(x => x.ConferenceMembers) + .ThenInclude(x => x.Conference) + .Include(x => x.MealPlanMember) + .ThenInclude(x => x.MealPlan) + .Include(x => x.Organiser) + .Where(x => + (string.IsNullOrEmpty(model.MemberSurname) || x.MemberSurname.Contains(model.MemberSurname)) && + (string.IsNullOrEmpty(model.MemberName) || x.MemberName.Contains(model.MemberName)) && + (string.IsNullOrEmpty(model.MemberPatronymic) || x.MemberPatronymic.Contains(model.MemberPatronymic))) + .Select(x => x.GetViewModel) + .ToList(); + } + + public MemberViewModel? GetElement(MemberSearchModel model) + { + if ((string.IsNullOrEmpty(model.MemberSurname) && string.IsNullOrEmpty(model.MemberName) + && string.IsNullOrEmpty(model.MemberPatronymic)) && !model.Id.HasValue) + { + return null; + } + + using var context = new HotelDataBase(); + + return context.Members + .Include(x => x.ConferenceMembers) + .ThenInclude(x => x.Conference) + .Include(x => x.MealPlanMember) + .ThenInclude(x => x.MealPlan) + .Include(x => x.Organiser) + .FirstOrDefault(x => + (!string.IsNullOrEmpty(model.MemberSurname) && x.MemberSurname == model.MemberSurname) || + (!string.IsNullOrEmpty(model.MemberName) && x.MemberName == model.MemberName) || + (!string.IsNullOrEmpty(model.MemberPatronymic) && x.MemberPatronymic == model.MemberPatronymic) || + (model.Id.HasValue && x.Id == model.Id))? + .GetViewModel; + } + + public MemberViewModel? Insert(MemberBindingModel model) + { + using var context = new HotelDataBase(); + + var newMember = Member.Create(model); + + if (newMember == null) + { + return null; + } + + context.Members.Add(newMember); + context.SaveChanges(); + + return newMember.GetViewModel; + } + + public MemberViewModel? Update(MemberBindingModel model) + { + using var context = new HotelDataBase(); + + var member = context.Members.FirstOrDefault(x => x.Id == model.Id); + + if (member == null) + { + return null; + } + + member.Update(model); + context.SaveChanges(); + + return member.GetViewModel; + } + + public MemberViewModel? Delete(MemberBindingModel model) + { + using var context = new HotelDataBase(); + + var element = context.Members.FirstOrDefault(rec => rec.Id == model.Id); + + if (element != null) + { + context.Members.Remove(element); + context.SaveChanges(); + + return element.GetViewModel; + } + + return null; + } + } +} diff --git a/Hotel/HotelDataBaseImplement/Implemets/OrganiserStorage.cs b/Hotel/HotelDataBaseImplement/Implemets/OrganiserStorage.cs new file mode 100644 index 0000000..8c98498 --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Implemets/OrganiserStorage.cs @@ -0,0 +1,128 @@ +using HotelContracts.BindingModels; +using HotelContracts.SearchModels; +using HotelContracts.StoragesContracts; +using HotelContracts.ViewModels; +using HotelDataBaseImplement.Models; +using Microsoft.EntityFrameworkCore; + +namespace HotelDataBaseImplement.Implemets +{ + public class OrganiserStorage : IOrganiserStorage + { + public List GetFullList() + { + using var context = new HotelDataBase(); + + return context.Organisers + .Select(x => x.GetViewModel) + .ToList(); + } + + public List GetFilteredList(OrganiserSearchModel model) + { + if (string.IsNullOrEmpty(model.OrganiserSurname) && string.IsNullOrEmpty(model.OrganiserName) + && string.IsNullOrEmpty(model.OrganiserPatronymic)) + { + return new(); + } + + using var context = new HotelDataBase(); + + return context.Organisers + .Include(x => x.MealPlans) + .Include(x => x.Members) + .Include(x => x.Conferences) + .Where(x => x.OrganiserLogin.Contains(model.OrganiserLogin) && x.OrganiserPassword == model.OrganiserPassword) + .Select(x => x.GetViewModel) + .ToList(); + } + + public OrganiserViewModel? GetElement(OrganiserSearchModel model) + { + using var context = new HotelDataBase(); + + if (model.Id.HasValue) + { + return context.Organisers + .Include(x => x.MealPlans) + .Include(x => x.Members) + .Include(x => x.Conferences) + .FirstOrDefault(x => x.Id == model.Id)? + .GetViewModel; + } + + if (!string.IsNullOrEmpty(model.OrganiserEmail) && !string.IsNullOrEmpty(model.OrganiserPassword)) + { + return context.Organisers + .Include(x => x.MealPlans) + .Include(x => x.Members) + .Include(x => x.Conferences) + .FirstOrDefault(x => x.OrganiserEmail.Equals(model.OrganiserEmail) && x.OrganiserPassword.Equals(model.OrganiserPassword))? + .GetViewModel; + } + + if (!string.IsNullOrEmpty(model.OrganiserEmail)) + { + return context.Organisers + .Include(x => x.MealPlans) + .Include(x => x.Members) + .Include(x => x.Conferences) + .FirstOrDefault(x => x.OrganiserEmail.Equals(model.OrganiserEmail))? + .GetViewModel; + } + + return null; + } + + public OrganiserViewModel? Insert(OrganiserBindingModel model) + { + var newOrganiser = Organiser.Create(model); + + if (newOrganiser == null) + { + return null; + } + + using var context = new HotelDataBase(); + + context.Organisers.Add(newOrganiser); + context.SaveChanges(); + + return newOrganiser.GetViewModel; + } + + public OrganiserViewModel? Update(OrganiserBindingModel model) + { + using var context = new HotelDataBase(); + + var organiser = context.Organisers.FirstOrDefault(x => x.Id == model.Id); + + if (organiser == null) + { + return null; + } + + organiser.Update(model); + context.SaveChanges(); + + return organiser.GetViewModel; + } + + public OrganiserViewModel? Delete(OrganiserBindingModel model) + { + using var context = new HotelDataBase(); + + var element = context.Organisers.FirstOrDefault(rec => rec.Id == model.Id); + + if (element != null) + { + context.Organisers.Remove(element); + context.SaveChanges(); + + return element.GetViewModel; + } + + return null; + } + } +} diff --git a/Hotel/HotelDataBaseImplement/Models/Conference.cs b/Hotel/HotelDataBaseImplement/Models/Conference.cs index ef79b3d..8d66ac9 100644 --- a/Hotel/HotelDataBaseImplement/Models/Conference.cs +++ b/Hotel/HotelDataBaseImplement/Models/Conference.cs @@ -29,8 +29,7 @@ namespace HotelDataBaseImplement.Models if (_conferenceMembers == null) { using var context = new HotelDataBase(); - _conferenceMembers = Members - .ToDictionary(x => x.MemberId, x => (context.Members + _conferenceMembers = Members.ToDictionary(x => x.MemberId, x => (context.Members .FirstOrDefault(y => y.Id == x.MemberId)! as IMemberModel)); } return _conferenceMembers; diff --git a/Hotel/HotelDataBaseImplement/Models/MealPlan.cs b/Hotel/HotelDataBaseImplement/Models/MealPlan.cs index 0a88122..6522e63 100644 --- a/Hotel/HotelDataBaseImplement/Models/MealPlan.cs +++ b/Hotel/HotelDataBaseImplement/Models/MealPlan.cs @@ -30,8 +30,7 @@ namespace HotelDataBaseImplement.Models if (_mealPlanMembers == null) { using var context = new HotelDataBase(); - _mealPlanMembers = Members - .ToDictionary(x => x.MemberId, x => (context.Members + _mealPlanMembers = Members.ToDictionary(x => x.MemberId, x => (context.Members .FirstOrDefault(y => y.Id == x.MemberId)! as IMemberModel)); } return _mealPlanMembers; diff --git a/Hotel/HotelDataBaseImplement/Models/Member.cs b/Hotel/HotelDataBaseImplement/Models/Member.cs index e4ad8bd..0c5658b 100644 --- a/Hotel/HotelDataBaseImplement/Models/Member.cs +++ b/Hotel/HotelDataBaseImplement/Models/Member.cs @@ -13,6 +13,8 @@ namespace HotelDataBaseImplement.Models { public class Member : IMemberModel { + public int Id { get; private set; } + [Required] public string MemberSurname { get; set; } = string.Empty; [Required] @@ -24,8 +26,6 @@ namespace HotelDataBaseImplement.Models public int OrganiserId { get; private set; } - public int Id { get; private set; } - public virtual Organiser Organiser { get; set; } [ForeignKey("MemberId")] diff --git a/Hotel/HotelDataBaseImplement/Models/Room.cs b/Hotel/HotelDataBaseImplement/Models/Room.cs index 21877f1..fac09c8 100644 --- a/Hotel/HotelDataBaseImplement/Models/Room.cs +++ b/Hotel/HotelDataBaseImplement/Models/Room.cs @@ -38,8 +38,7 @@ namespace HotelDataBaseImplement.Models if (_roomLunches == null) { using var context = new HotelDataBase(); - _roomLunches = Lunches - .ToDictionary(x => x.LunchId, x => (context.Lunches + _roomLunches = Lunches.ToDictionary(x => x.LunchId, x => (context.Lunches .FirstOrDefault(y => y.Id == x.LunchId)! as ILunchModel)); } return _roomLunches; diff --git a/Hotel/HotelDataBaseImplement/Models/RoomLunch.cs b/Hotel/HotelDataBaseImplement/Models/RoomLunch.cs index ad2c3db..763db05 100644 --- a/Hotel/HotelDataBaseImplement/Models/RoomLunch.cs +++ b/Hotel/HotelDataBaseImplement/Models/RoomLunch.cs @@ -9,7 +9,6 @@ namespace HotelDataBaseImplement.Models public int LunchId { get; set; } [Required] - public int Count { get; set; } public virtual Room Room { get; set; } public virtual Lunch Lunch { get; set; } }