diff --git a/Hotel/HotelBusinessLogic/BusinessLogics/ConferenceLogic.cs b/Hotel/HotelBusinessLogic/BusinessLogics/ConferenceLogic.cs index e6a00a7..b7bba28 100644 --- a/Hotel/HotelBusinessLogic/BusinessLogics/ConferenceLogic.cs +++ b/Hotel/HotelBusinessLogic/BusinessLogics/ConferenceLogic.cs @@ -3,7 +3,9 @@ using HotelContracts.BusinessLogicsContracts; using HotelContracts.SearchModels; using HotelContracts.StoragesContracts; using HotelContracts.ViewModels; +using HotelDataModels.Models; using Microsoft.Extensions.Logging; +using System.IO.Packaging; namespace HotelBusinessLogic.BusinessLogics { @@ -20,6 +22,7 @@ namespace HotelBusinessLogic.BusinessLogics public bool Create(ConferenceBindingModel model) { CheckModel(model); + model.ConferenceMembers = new(); if (_conferenceStorage.Insert(model) == null) { @@ -84,6 +87,39 @@ namespace HotelBusinessLogic.BusinessLogics return list; } + public bool AddMemberToConference(ConferenceSearchModel model, IMemberModel member) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + + _logger.LogInformation("AddMemberToConference. ConferenceName:{ConferenceName}.Id:{ Id}", model.ConferenceName, model.Id); + var element = _conferenceStorage.GetElement(model); + + if (element == null) + { + _logger.LogWarning("AddMemberToConference element not found"); + return false; + } + + _logger.LogInformation("AddMemberToConference find. Id:{Id}", element.Id); + + element.ConferenceMembers[member.Id] = member; + + _conferenceStorage.Update(new() + { + Id = element.Id, + ConferenceName = element.ConferenceName, + StartDate = element.StartDate, + OrganiserId = element.OrganiserId, + ConferenceMembers = element.ConferenceMembers, + }); + + return true; + } + + public bool Update(ConferenceBindingModel model) { CheckModel(model); diff --git a/Hotel/HotelContracts/BindingModels/ConferenceBindingModel.cs b/Hotel/HotelContracts/BindingModels/ConferenceBindingModel.cs index 622fb38..5833558 100644 --- a/Hotel/HotelContracts/BindingModels/ConferenceBindingModel.cs +++ b/Hotel/HotelContracts/BindingModels/ConferenceBindingModel.cs @@ -11,6 +11,6 @@ namespace HotelContracts.BindingModels public int Id { get; set; } public int OrganiserId { get; set; } - public Dictionary ConferenceMembers { get; set; } + public Dictionary ConferenceMembers { get; set; } = new(); } } diff --git a/Hotel/HotelContracts/BusinessLogicsContracts/IConferenceLogic.cs b/Hotel/HotelContracts/BusinessLogicsContracts/IConferenceLogic.cs index 7d049cd..011b23c 100644 --- a/Hotel/HotelContracts/BusinessLogicsContracts/IConferenceLogic.cs +++ b/Hotel/HotelContracts/BusinessLogicsContracts/IConferenceLogic.cs @@ -1,6 +1,7 @@ using HotelContracts.BindingModels; using HotelContracts.SearchModels; using HotelContracts.ViewModels; +using HotelDataModels.Models; namespace HotelContracts.BusinessLogicsContracts { @@ -8,6 +9,7 @@ namespace HotelContracts.BusinessLogicsContracts { List? ReadList(ConferenceSearchModel? model); ConferenceViewModel? ReadElement(ConferenceSearchModel model); + bool AddMemberToConference(ConferenceSearchModel model, IMemberModel member); bool Create(ConferenceBindingModel model); bool Update(ConferenceBindingModel model); bool Delete(ConferenceBindingModel model); diff --git a/Hotel/HotelContracts/HotelContracts.csproj b/Hotel/HotelContracts/HotelContracts.csproj index 98739e9..d314e88 100644 --- a/Hotel/HotelContracts/HotelContracts.csproj +++ b/Hotel/HotelContracts/HotelContracts.csproj @@ -1,4 +1,4 @@ - + net6.0 @@ -6,6 +6,34 @@ enable + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + + + + + + + diff --git a/Hotel/HotelContracts/ViewModels/ConferenceViewModel.cs b/Hotel/HotelContracts/ViewModels/ConferenceViewModel.cs index fdd12e7..61b4f2e 100644 --- a/Hotel/HotelContracts/ViewModels/ConferenceViewModel.cs +++ b/Hotel/HotelContracts/ViewModels/ConferenceViewModel.cs @@ -1,5 +1,6 @@ using HotelDataModels.Models; using System.ComponentModel; +using Newtonsoft.Json; namespace HotelContracts.ViewModels { @@ -14,7 +15,15 @@ namespace HotelContracts.ViewModels public int OrganiserId { get; set; } public int Id { get; set; } - public Dictionary ConferenceMembers { get; set; } + public Dictionary ConferenceMembers { get; set; } = new(); public Dictionary ConferenceConferenceBooking { get; set; } + + public ConferenceViewModel() { } + + [JsonConstructor] + public ConferenceViewModel(Dictionary ConferenceMembers) + { + this.ConferenceMembers = ConferenceMembers.ToDictionary(x => x.Key, x => x.Value as IMemberModel); + } } } diff --git a/Hotel/HotelContracts/ViewModels/MemberViewModel.cs b/Hotel/HotelContracts/ViewModels/MemberViewModel.cs index fc66f78..092056a 100644 --- a/Hotel/HotelContracts/ViewModels/MemberViewModel.cs +++ b/Hotel/HotelContracts/ViewModels/MemberViewModel.cs @@ -5,6 +5,8 @@ namespace HotelContracts.ViewModels { public class MemberViewModel : IMemberModel { + public int Id { get; set; } + [DisplayName("ФИО участника")] public string MemberFIO { get; set; } = string.Empty; @@ -13,6 +15,6 @@ namespace HotelContracts.ViewModels public int OrganiserId { get; set; } - public int Id { get; set; } + } } diff --git a/Hotel/HotelDataBaseImplement/HotelDataBaseImplement.csproj b/Hotel/HotelDataBaseImplement/HotelDataBaseImplement.csproj index 5269faa..8c9bb58 100644 --- a/Hotel/HotelDataBaseImplement/HotelDataBaseImplement.csproj +++ b/Hotel/HotelDataBaseImplement/HotelDataBaseImplement.csproj @@ -7,9 +7,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Hotel/HotelDataBaseImplement/Implemets/ConferenceStorage.cs b/Hotel/HotelDataBaseImplement/Implemets/ConferenceStorage.cs index 3b488aa..7543766 100644 --- a/Hotel/HotelDataBaseImplement/Implemets/ConferenceStorage.cs +++ b/Hotel/HotelDataBaseImplement/Implemets/ConferenceStorage.cs @@ -14,6 +14,7 @@ namespace HotelDataBaseImplement.Implemets using var context = new HotelDataBase(); var element = context.Conferences + .Include(x => x.Members) .FirstOrDefault(rec => rec.Id == model.Id); if (element != null) @@ -29,7 +30,7 @@ namespace HotelDataBaseImplement.Implemets public ConferenceViewModel? GetElement(ConferenceSearchModel model) { - if (!model.Id.HasValue) + if (string.IsNullOrEmpty(model.ConferenceName) && !model.Id.HasValue) { return null; } @@ -43,7 +44,7 @@ namespace HotelDataBaseImplement.Implemets .ThenInclude(x => x.MealPlan) .Include(x => x.ConferenceBookings) .Include(x => x.Organiser) - .FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))? + .FirstOrDefault(x => (!string.IsNullOrEmpty(model.ConferenceName) && x.ConferenceName == model.ConferenceName) || (model.Id.HasValue && x.Id == model.Id))? .GetViewModel; } @@ -77,6 +78,7 @@ namespace HotelDataBaseImplement.Implemets .Include(x => x.ConferenceBookings) .Include(x => x.Organiser) .Where(x => x.OrganiserId == model.OrganiserId) + .ToList() .Select(x => x.GetViewModel) .ToList(); @@ -87,7 +89,8 @@ namespace HotelDataBaseImplement.Implemets .ThenInclude(x => x.MealPlan) .Include(x => x.ConferenceBookings) .Include(x => x.Organiser) - .Where(x => x.Id == model.Id) + .Where(x => x.ConferenceName.Contains(model.ConferenceName)) + .ToList() .Select(x => x.GetViewModel) .ToList(); } @@ -103,6 +106,7 @@ namespace HotelDataBaseImplement.Implemets .ThenInclude(x => x.MealPlan) .Include(x => x.ConferenceBookings) .Include(x => x.Organiser) + .ToList() .Select(x => x.GetViewModel) .ToList(); } @@ -135,25 +139,27 @@ namespace HotelDataBaseImplement.Implemets public ConferenceViewModel? Update(ConferenceBindingModel model) { using var context = new HotelDataBase(); - - var conference = 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 == model.Id); - - if (conference == null) + using var transaction = context.Database.BeginTransaction(); + try { - return null; + 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; } - - conference.Update(model); - context.SaveChanges(); - - return conference.GetViewModel; + catch + { + transaction.Rollback(); + throw; + } + } } } diff --git a/Hotel/HotelDataBaseImplement/Implemets/MealPlanStorage.cs b/Hotel/HotelDataBaseImplement/Implemets/MealPlanStorage.cs index 23218c9..8a10096 100644 --- a/Hotel/HotelDataBaseImplement/Implemets/MealPlanStorage.cs +++ b/Hotel/HotelDataBaseImplement/Implemets/MealPlanStorage.cs @@ -39,7 +39,7 @@ namespace HotelDataBaseImplement.Implemets return context.MealPlans .Include(x => x.Members) .ThenInclude(x => x.Member) - .ThenInclude(x => x.ConferenceMember) + .ThenInclude(x => x.ConferenceMembers) .ThenInclude(x => x.Conference) .Include(x => x.Rooms) .Include(x => x.Organiser) @@ -61,7 +61,7 @@ namespace HotelDataBaseImplement.Implemets return context.MealPlans .Include(x => x.Members) .ThenInclude(x => x.Member) - .ThenInclude(x => x.ConferenceMember) + .ThenInclude(x => x.ConferenceMembers) .ThenInclude(x => x.Conference) .Include(x => x.Rooms) .Include(x => x.Organiser) @@ -74,7 +74,7 @@ namespace HotelDataBaseImplement.Implemets return context.MealPlans .Include(x => x.Members) .ThenInclude(x => x.Member) - .ThenInclude(x => x.ConferenceMember) + .ThenInclude(x => x.ConferenceMembers) .ThenInclude(x => x.Conference) .Include(x => x.Rooms) .Include(x => x.Organiser) @@ -89,7 +89,7 @@ namespace HotelDataBaseImplement.Implemets return context.MealPlans .Include(x => x.Members) .ThenInclude(x => x.Member) - .ThenInclude(x => x.ConferenceMember) + .ThenInclude(x => x.ConferenceMembers) .ThenInclude(x => x.Conference) .Include(x => x.Rooms) .Include(x => x.Organiser) diff --git a/Hotel/HotelDataBaseImplement/Implemets/MemberStorage.cs b/Hotel/HotelDataBaseImplement/Implemets/MemberStorage.cs index fe21096..a1264db 100644 --- a/Hotel/HotelDataBaseImplement/Implemets/MemberStorage.cs +++ b/Hotel/HotelDataBaseImplement/Implemets/MemberStorage.cs @@ -36,7 +36,7 @@ namespace HotelDataBaseImplement.Implemets using var context = new HotelDataBase(); return context.Members - .Include(x => x.ConferenceMember) + .Include(x => x.ConferenceMembers) .ThenInclude(x => x.Conference) .Include(x => x.MealPlanMember) .ThenInclude(x => x.MealPlan) @@ -57,25 +57,23 @@ namespace HotelDataBaseImplement.Implemets if (model.OrganiserId.HasValue) { return context.Members - .Include(x => x.ConferenceMember) + .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) - .ToList() .Select(x => x.GetViewModel) .ToList(); } return context.Members - .Include(x => x.ConferenceMember) + .Include(x => x.ConferenceMembers) .ThenInclude(x => x.Conference) .Include(x => x.MealPlanMember) .ThenInclude(x => x.MealPlan) .Include(x => x.Organiser) .Where(x => x.MemberFIO.Contains(model.MemberFIO)) - .ToList() .Select(x => x.GetViewModel) .ToList(); } @@ -85,12 +83,11 @@ namespace HotelDataBaseImplement.Implemets using var context = new HotelDataBase(); return context.Members - .Include(x => x.ConferenceMember) + .Include(x => x.ConferenceMembers) .ThenInclude(x => x.Conference) .Include(x => x.MealPlanMember) .ThenInclude(x => x.MealPlan) .Include(x => x.Organiser) - .ToList() .Select(x => x.GetViewModel) .ToList(); } diff --git a/Hotel/HotelDataBaseImplement/Migrations/20230516050151_TempMigr.Designer.cs b/Hotel/HotelDataBaseImplement/Migrations/20230516050151_TempMigr.Designer.cs new file mode 100644 index 0000000..00bb4ce --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Migrations/20230516050151_TempMigr.Designer.cs @@ -0,0 +1,569 @@ +// +using System; +using HotelDataBaseImplement; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace HotelDataBaseImplement.Migrations +{ + [DbContext(typeof(HotelDataBase))] + [Migration("20230516050151_TempMigr")] + partial class TempMigr + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Conference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserId") + .HasColumnType("int"); + + b.Property("StartDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("OrganiserId"); + + b.ToTable("Conferences"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBooking", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceId") + .HasColumnType("int"); + + b.Property("HeadwaiterId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ConferenceId"); + + b.HasIndex("HeadwaiterId"); + + b.ToTable("ConferenceBookings"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBookingDinner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceBookingId") + .HasColumnType("int"); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("DinnerId") + .HasColumnType("int"); + + b.Property("DinnercId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ConferenceBookingId"); + + b.HasIndex("DinnercId"); + + b.ToTable("ConferenceBookingDinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceMember", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceId") + .HasColumnType("int"); + + b.Property("MemberId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ConferenceId"); + + b.HasIndex("MemberId"); + + b.ToTable("ConferenceMembers"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Dinner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("DinnerName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DinnerPrice") + .HasColumnType("float"); + + b.Property("HeadwaiterId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("HeadwaiterId"); + + b.ToTable("Dinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Headwaiter", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("HeadwaiterEmail") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterLogin") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterPassword") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Headwaiters"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("MealPlanName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MealPlanPrice") + .HasColumnType("float"); + + b.Property("OrganiserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OrganiserId"); + + b.ToTable("MealPlans"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlanMember", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("MealPlanId") + .HasColumnType("int"); + + b.Property("MemberId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("MealPlanId"); + + b.HasIndex("MemberId"); + + b.ToTable("MealPlanMembers"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Member", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Citizenship") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MemberFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OrganiserId"); + + b.ToTable("Members"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Organiser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("OrganiserEmail") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserLogin") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserPassword") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Organisers"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Room", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("HeadwaiterId") + .HasColumnType("int"); + + b.Property("MealPlanId") + .HasColumnType("int"); + + b.Property("RoomFrame") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RoomName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RoomPrice") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("HeadwaiterId"); + + b.HasIndex("MealPlanId"); + + b.ToTable("Rooms"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.RoomDinner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("DinnerId") + .HasColumnType("int"); + + b.Property("RoomId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("DinnerId"); + + b.HasIndex("RoomId"); + + b.ToTable("RoomDinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Conference", b => + { + b.HasOne("HotelDataBaseImplement.Models.Organiser", "Organiser") + .WithMany("Conferences") + .HasForeignKey("OrganiserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organiser"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBooking", b => + { + b.HasOne("HotelDataBaseImplement.Models.Conference", "Conference") + .WithMany("ConferenceBookings") + .HasForeignKey("ConferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Headwaiter", "Headwaiter") + .WithMany("ConferenceBookings") + .HasForeignKey("HeadwaiterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Conference"); + + b.Navigation("Headwaiter"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBookingDinner", b => + { + b.HasOne("HotelDataBaseImplement.Models.ConferenceBooking", "ConferenceBooking") + .WithMany("Dinners") + .HasForeignKey("ConferenceBookingId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Dinner", "Dinner") + .WithMany("ConferenceBookingDinners") + .HasForeignKey("DinnercId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ConferenceBooking"); + + b.Navigation("Dinner"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceMember", b => + { + b.HasOne("HotelDataBaseImplement.Models.Conference", "Conference") + .WithMany("Members") + .HasForeignKey("ConferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Member", "Member") + .WithMany("ConferenceMember") + .HasForeignKey("MemberId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Conference"); + + b.Navigation("Member"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Dinner", b => + { + b.HasOne("HotelDataBaseImplement.Models.Headwaiter", "Headwaiters") + .WithMany("Dinners") + .HasForeignKey("HeadwaiterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Headwaiters"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlan", b => + { + b.HasOne("HotelDataBaseImplement.Models.Organiser", "Organiser") + .WithMany("MealPlans") + .HasForeignKey("OrganiserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organiser"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlanMember", b => + { + b.HasOne("HotelDataBaseImplement.Models.MealPlan", "MealPlan") + .WithMany("Members") + .HasForeignKey("MealPlanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Member", "Member") + .WithMany("MealPlanMember") + .HasForeignKey("MemberId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("MealPlan"); + + b.Navigation("Member"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Member", b => + { + b.HasOne("HotelDataBaseImplement.Models.Organiser", "Organiser") + .WithMany("Members") + .HasForeignKey("OrganiserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organiser"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Room", b => + { + b.HasOne("HotelDataBaseImplement.Models.Headwaiter", "Headwaiter") + .WithMany("Rooms") + .HasForeignKey("HeadwaiterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.MealPlan", "MealPlan") + .WithMany("Rooms") + .HasForeignKey("MealPlanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Headwaiter"); + + b.Navigation("MealPlan"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.RoomDinner", b => + { + b.HasOne("HotelDataBaseImplement.Models.Dinner", "Dinner") + .WithMany("RoomDinners") + .HasForeignKey("DinnerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Room", "Room") + .WithMany("Dinners") + .HasForeignKey("RoomId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Dinner"); + + b.Navigation("Room"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Conference", b => + { + b.Navigation("ConferenceBookings"); + + b.Navigation("Members"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBooking", b => + { + b.Navigation("Dinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Dinner", b => + { + b.Navigation("ConferenceBookingDinners"); + + b.Navigation("RoomDinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Headwaiter", b => + { + b.Navigation("ConferenceBookings"); + + b.Navigation("Dinners"); + + b.Navigation("Rooms"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlan", b => + { + b.Navigation("Members"); + + b.Navigation("Rooms"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Member", b => + { + b.Navigation("ConferenceMember"); + + b.Navigation("MealPlanMember"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Organiser", b => + { + b.Navigation("Conferences"); + + b.Navigation("MealPlans"); + + b.Navigation("Members"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Room", b => + { + b.Navigation("Dinners"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Hotel/HotelDataBaseImplement/Migrations/20230516050151_TempMigr.cs b/Hotel/HotelDataBaseImplement/Migrations/20230516050151_TempMigr.cs new file mode 100644 index 0000000..f2a09a4 --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Migrations/20230516050151_TempMigr.cs @@ -0,0 +1,28 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace HotelDataBaseImplement.Migrations +{ + /// + public partial class TempMigr : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "DinnetPrice", + table: "Dinners", + newName: "DinnerPrice"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "DinnerPrice", + table: "Dinners", + newName: "DinnetPrice"); + } + } +} diff --git a/Hotel/HotelDataBaseImplement/Migrations/20230516085444_TempMigra.Designer.cs b/Hotel/HotelDataBaseImplement/Migrations/20230516085444_TempMigra.Designer.cs new file mode 100644 index 0000000..e5fd5de --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Migrations/20230516085444_TempMigra.Designer.cs @@ -0,0 +1,569 @@ +// +using System; +using HotelDataBaseImplement; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace HotelDataBaseImplement.Migrations +{ + [DbContext(typeof(HotelDataBase))] + [Migration("20230516085444_TempMigra")] + partial class TempMigra + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Conference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserId") + .HasColumnType("int"); + + b.Property("StartDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("OrganiserId"); + + b.ToTable("Conferences"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBooking", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceId") + .HasColumnType("int"); + + b.Property("HeadwaiterId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ConferenceId"); + + b.HasIndex("HeadwaiterId"); + + b.ToTable("ConferenceBookings"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBookingDinner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceBookingId") + .HasColumnType("int"); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("DinnerId") + .HasColumnType("int"); + + b.Property("DinnercId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ConferenceBookingId"); + + b.HasIndex("DinnercId"); + + b.ToTable("ConferenceBookingDinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceMember", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceId") + .HasColumnType("int"); + + b.Property("MemberId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ConferenceId"); + + b.HasIndex("MemberId"); + + b.ToTable("ConferenceMembers"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Dinner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("DinnerName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DinnerPrice") + .HasColumnType("float"); + + b.Property("HeadwaiterId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("HeadwaiterId"); + + b.ToTable("Dinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Headwaiter", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("HeadwaiterEmail") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterLogin") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterPassword") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Headwaiters"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("MealPlanName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MealPlanPrice") + .HasColumnType("float"); + + b.Property("OrganiserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OrganiserId"); + + b.ToTable("MealPlans"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlanMember", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("MealPlanId") + .HasColumnType("int"); + + b.Property("MemberId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("MealPlanId"); + + b.HasIndex("MemberId"); + + b.ToTable("MealPlanMembers"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Member", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Citizenship") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MemberFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OrganiserId"); + + b.ToTable("Members"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Organiser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("OrganiserEmail") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserLogin") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserPassword") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Organisers"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Room", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("HeadwaiterId") + .HasColumnType("int"); + + b.Property("MealPlanId") + .HasColumnType("int"); + + b.Property("RoomFrame") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RoomName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RoomPrice") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("HeadwaiterId"); + + b.HasIndex("MealPlanId"); + + b.ToTable("Rooms"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.RoomDinner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("DinnerId") + .HasColumnType("int"); + + b.Property("RoomId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("DinnerId"); + + b.HasIndex("RoomId"); + + b.ToTable("RoomDinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Conference", b => + { + b.HasOne("HotelDataBaseImplement.Models.Organiser", "Organiser") + .WithMany("Conferences") + .HasForeignKey("OrganiserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organiser"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBooking", b => + { + b.HasOne("HotelDataBaseImplement.Models.Conference", "Conference") + .WithMany("ConferenceBookings") + .HasForeignKey("ConferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Headwaiter", "Headwaiter") + .WithMany("ConferenceBookings") + .HasForeignKey("HeadwaiterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Conference"); + + b.Navigation("Headwaiter"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBookingDinner", b => + { + b.HasOne("HotelDataBaseImplement.Models.ConferenceBooking", "ConferenceBooking") + .WithMany("Dinners") + .HasForeignKey("ConferenceBookingId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Dinner", "Dinner") + .WithMany("ConferenceBookingDinners") + .HasForeignKey("DinnercId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ConferenceBooking"); + + b.Navigation("Dinner"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceMember", b => + { + b.HasOne("HotelDataBaseImplement.Models.Conference", "Conference") + .WithMany("Members") + .HasForeignKey("ConferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Member", "Member") + .WithMany("ConferenceMembers") + .HasForeignKey("MemberId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Conference"); + + b.Navigation("Member"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Dinner", b => + { + b.HasOne("HotelDataBaseImplement.Models.Headwaiter", "Headwaiters") + .WithMany("Dinners") + .HasForeignKey("HeadwaiterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Headwaiters"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlan", b => + { + b.HasOne("HotelDataBaseImplement.Models.Organiser", "Organiser") + .WithMany("MealPlans") + .HasForeignKey("OrganiserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organiser"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlanMember", b => + { + b.HasOne("HotelDataBaseImplement.Models.MealPlan", "MealPlan") + .WithMany("Members") + .HasForeignKey("MealPlanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Member", "Member") + .WithMany("MealPlanMember") + .HasForeignKey("MemberId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("MealPlan"); + + b.Navigation("Member"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Member", b => + { + b.HasOne("HotelDataBaseImplement.Models.Organiser", "Organiser") + .WithMany("Members") + .HasForeignKey("OrganiserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organiser"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Room", b => + { + b.HasOne("HotelDataBaseImplement.Models.Headwaiter", "Headwaiter") + .WithMany("Rooms") + .HasForeignKey("HeadwaiterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.MealPlan", "MealPlan") + .WithMany("Rooms") + .HasForeignKey("MealPlanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Headwaiter"); + + b.Navigation("MealPlan"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.RoomDinner", b => + { + b.HasOne("HotelDataBaseImplement.Models.Dinner", "Dinner") + .WithMany("RoomDinners") + .HasForeignKey("DinnerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Room", "Room") + .WithMany("Dinners") + .HasForeignKey("RoomId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Dinner"); + + b.Navigation("Room"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Conference", b => + { + b.Navigation("ConferenceBookings"); + + b.Navigation("Members"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBooking", b => + { + b.Navigation("Dinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Dinner", b => + { + b.Navigation("ConferenceBookingDinners"); + + b.Navigation("RoomDinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Headwaiter", b => + { + b.Navigation("ConferenceBookings"); + + b.Navigation("Dinners"); + + b.Navigation("Rooms"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlan", b => + { + b.Navigation("Members"); + + b.Navigation("Rooms"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Member", b => + { + b.Navigation("ConferenceMembers"); + + b.Navigation("MealPlanMember"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Organiser", b => + { + b.Navigation("Conferences"); + + b.Navigation("MealPlans"); + + b.Navigation("Members"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Room", b => + { + b.Navigation("Dinners"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Hotel/HotelDataBaseImplement/Migrations/20230516085444_TempMigra.cs b/Hotel/HotelDataBaseImplement/Migrations/20230516085444_TempMigra.cs new file mode 100644 index 0000000..68ad031 --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Migrations/20230516085444_TempMigra.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace HotelDataBaseImplement.Migrations +{ + /// + public partial class TempMigra : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/Hotel/HotelDataBaseImplement/Migrations/20230516090936_TempMigrat.Designer.cs b/Hotel/HotelDataBaseImplement/Migrations/20230516090936_TempMigrat.Designer.cs new file mode 100644 index 0000000..9288fe9 --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Migrations/20230516090936_TempMigrat.Designer.cs @@ -0,0 +1,569 @@ +// +using System; +using HotelDataBaseImplement; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace HotelDataBaseImplement.Migrations +{ + [DbContext(typeof(HotelDataBase))] + [Migration("20230516090936_TempMigrat")] + partial class TempMigrat + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Conference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserId") + .HasColumnType("int"); + + b.Property("StartDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("OrganiserId"); + + b.ToTable("Conferences"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBooking", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceId") + .HasColumnType("int"); + + b.Property("HeadwaiterId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ConferenceId"); + + b.HasIndex("HeadwaiterId"); + + b.ToTable("ConferenceBookings"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBookingDinner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceBookingId") + .HasColumnType("int"); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("DinnerId") + .HasColumnType("int"); + + b.Property("DinnercId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ConferenceBookingId"); + + b.HasIndex("DinnercId"); + + b.ToTable("ConferenceBookingDinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceMember", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConferenceId") + .HasColumnType("int"); + + b.Property("MemberId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ConferenceId"); + + b.HasIndex("MemberId"); + + b.ToTable("ConferenceMembers"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Dinner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("DinnerName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("DinnerPrice") + .HasColumnType("float"); + + b.Property("HeadwaiterId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("HeadwaiterId"); + + b.ToTable("Dinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Headwaiter", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("HeadwaiterEmail") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterLogin") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HeadwaiterPassword") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Headwaiters"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("MealPlanName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MealPlanPrice") + .HasColumnType("float"); + + b.Property("OrganiserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OrganiserId"); + + b.ToTable("MealPlans"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlanMember", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("MealPlanId") + .HasColumnType("int"); + + b.Property("MemberId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("MealPlanId"); + + b.HasIndex("MemberId"); + + b.ToTable("MealPlanMembers"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Member", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Citizenship") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MemberFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OrganiserId"); + + b.ToTable("Members"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Organiser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("OrganiserEmail") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserLogin") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrganiserPassword") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Organisers"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Room", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("HeadwaiterId") + .HasColumnType("int"); + + b.Property("MealPlanId") + .HasColumnType("int"); + + b.Property("RoomFrame") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RoomName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("RoomPrice") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("HeadwaiterId"); + + b.HasIndex("MealPlanId"); + + b.ToTable("Rooms"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.RoomDinner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("DinnerId") + .HasColumnType("int"); + + b.Property("RoomId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("DinnerId"); + + b.HasIndex("RoomId"); + + b.ToTable("RoomDinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Conference", b => + { + b.HasOne("HotelDataBaseImplement.Models.Organiser", "Organiser") + .WithMany("Conferences") + .HasForeignKey("OrganiserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organiser"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBooking", b => + { + b.HasOne("HotelDataBaseImplement.Models.Conference", "Conference") + .WithMany("ConferenceBookings") + .HasForeignKey("ConferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Headwaiter", "Headwaiter") + .WithMany("ConferenceBookings") + .HasForeignKey("HeadwaiterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Conference"); + + b.Navigation("Headwaiter"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBookingDinner", b => + { + b.HasOne("HotelDataBaseImplement.Models.ConferenceBooking", "ConferenceBooking") + .WithMany("Dinners") + .HasForeignKey("ConferenceBookingId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Dinner", "Dinner") + .WithMany("ConferenceBookingDinners") + .HasForeignKey("DinnercId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ConferenceBooking"); + + b.Navigation("Dinner"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceMember", b => + { + b.HasOne("HotelDataBaseImplement.Models.Conference", "Conference") + .WithMany("Members") + .HasForeignKey("ConferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Member", "Member") + .WithMany("ConferenceMembers") + .HasForeignKey("MemberId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Conference"); + + b.Navigation("Member"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Dinner", b => + { + b.HasOne("HotelDataBaseImplement.Models.Headwaiter", "Headwaiters") + .WithMany("Dinners") + .HasForeignKey("HeadwaiterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Headwaiters"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlan", b => + { + b.HasOne("HotelDataBaseImplement.Models.Organiser", "Organiser") + .WithMany("MealPlans") + .HasForeignKey("OrganiserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organiser"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlanMember", b => + { + b.HasOne("HotelDataBaseImplement.Models.MealPlan", "MealPlan") + .WithMany("Members") + .HasForeignKey("MealPlanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Member", "Member") + .WithMany("MealPlanMember") + .HasForeignKey("MemberId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("MealPlan"); + + b.Navigation("Member"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Member", b => + { + b.HasOne("HotelDataBaseImplement.Models.Organiser", "Organiser") + .WithMany("Members") + .HasForeignKey("OrganiserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organiser"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Room", b => + { + b.HasOne("HotelDataBaseImplement.Models.Headwaiter", "Headwaiter") + .WithMany("Rooms") + .HasForeignKey("HeadwaiterId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.MealPlan", "MealPlan") + .WithMany("Rooms") + .HasForeignKey("MealPlanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Headwaiter"); + + b.Navigation("MealPlan"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.RoomDinner", b => + { + b.HasOne("HotelDataBaseImplement.Models.Dinner", "Dinner") + .WithMany("RoomDinners") + .HasForeignKey("DinnerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HotelDataBaseImplement.Models.Room", "Room") + .WithMany("Dinners") + .HasForeignKey("RoomId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Dinner"); + + b.Navigation("Room"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Conference", b => + { + b.Navigation("ConferenceBookings"); + + b.Navigation("Members"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.ConferenceBooking", b => + { + b.Navigation("Dinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Dinner", b => + { + b.Navigation("ConferenceBookingDinners"); + + b.Navigation("RoomDinners"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Headwaiter", b => + { + b.Navigation("ConferenceBookings"); + + b.Navigation("Dinners"); + + b.Navigation("Rooms"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.MealPlan", b => + { + b.Navigation("Members"); + + b.Navigation("Rooms"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Member", b => + { + b.Navigation("ConferenceMembers"); + + b.Navigation("MealPlanMember"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Organiser", b => + { + b.Navigation("Conferences"); + + b.Navigation("MealPlans"); + + b.Navigation("Members"); + }); + + modelBuilder.Entity("HotelDataBaseImplement.Models.Room", b => + { + b.Navigation("Dinners"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Hotel/HotelDataBaseImplement/Migrations/20230516090936_TempMigrat.cs b/Hotel/HotelDataBaseImplement/Migrations/20230516090936_TempMigrat.cs new file mode 100644 index 0000000..cd4410b --- /dev/null +++ b/Hotel/HotelDataBaseImplement/Migrations/20230516090936_TempMigrat.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace HotelDataBaseImplement.Migrations +{ + /// + public partial class TempMigrat : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/Hotel/HotelDataBaseImplement/Migrations/HotelDataBaseModelSnapshot.cs b/Hotel/HotelDataBaseImplement/Migrations/HotelDataBaseModelSnapshot.cs index 8faf864..12b55b6 100644 --- a/Hotel/HotelDataBaseImplement/Migrations/HotelDataBaseModelSnapshot.cs +++ b/Hotel/HotelDataBaseImplement/Migrations/HotelDataBaseModelSnapshot.cs @@ -134,7 +134,7 @@ namespace HotelDataBaseImplement.Migrations .IsRequired() .HasColumnType("nvarchar(max)"); - b.Property("DinnetPrice") + b.Property("DinnerPrice") .HasColumnType("float"); b.Property("HeadwaiterId") @@ -405,7 +405,7 @@ namespace HotelDataBaseImplement.Migrations .IsRequired(); b.HasOne("HotelDataBaseImplement.Models.Member", "Member") - .WithMany("ConferenceMember") + .WithMany("ConferenceMembers") .HasForeignKey("MemberId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -542,7 +542,7 @@ namespace HotelDataBaseImplement.Migrations modelBuilder.Entity("HotelDataBaseImplement.Models.Member", b => { - b.Navigation("ConferenceMember"); + b.Navigation("ConferenceMembers"); b.Navigation("MealPlanMember"); }); diff --git a/Hotel/HotelDataBaseImplement/Models/Conference.cs b/Hotel/HotelDataBaseImplement/Models/Conference.cs index d90258c..72094fc 100644 --- a/Hotel/HotelDataBaseImplement/Models/Conference.cs +++ b/Hotel/HotelDataBaseImplement/Models/Conference.cs @@ -3,6 +3,7 @@ using HotelContracts.ViewModels; using HotelDataModels.Models; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using System.Text.Json.Serialization; namespace HotelDataBaseImplement.Models { @@ -19,25 +20,30 @@ namespace HotelDataBaseImplement.Models public virtual Organiser Organiser { get; set; } - [ForeignKey("ConferenceId")] - public virtual List ConferenceBookings { get; set; } - - [ForeignKey("ConferenceId")] - public virtual List Members { get; set; } - private Dictionary _conferenceMembers = null; + + [NotMapped] public Dictionary ConferenceMembers { get { if (_conferenceMembers == null) { - _conferenceMembers = Members.ToDictionary(recPC => recPC.MemberId, recPC => (recPC.Member as IMemberModel)); + 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; } + + [ForeignKey("ConferenceId")] + public virtual List Members { get; set; } = new(); + public static Conference Create(HotelDataBase context, ConferenceBindingModel model) { return new Conference() @@ -72,21 +78,26 @@ namespace HotelDataBaseImplement.Models public void UpdateMembers(HotelDataBase context, ConferenceBindingModel model) { var conferenceMembers = context.ConferenceMembers.Where(rec => rec.ConferenceId == model.Id).ToList(); - - if (conferenceMembers != null) + + 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) + Member = context.Members.First(x => x.Id == cm.Key), }); context.SaveChanges(); } diff --git a/Hotel/HotelDataBaseImplement/Models/ConferenceMember.cs b/Hotel/HotelDataBaseImplement/Models/ConferenceMember.cs index dde204b..1c3d5de 100644 --- a/Hotel/HotelDataBaseImplement/Models/ConferenceMember.cs +++ b/Hotel/HotelDataBaseImplement/Models/ConferenceMember.cs @@ -12,7 +12,7 @@ namespace HotelDataBaseImplement.Models [Required] public int ConferenceId { get; set; } - public virtual Conference Conference { get; set; } - public virtual Member Member { get; set; } + public virtual Conference Conference { get; set; } = new(); + public virtual Member Member { get; set; } = new(); } } diff --git a/Hotel/HotelDataBaseImplement/Models/MealPlan.cs b/Hotel/HotelDataBaseImplement/Models/MealPlan.cs index 7a48e23..8ca670d 100644 --- a/Hotel/HotelDataBaseImplement/Models/MealPlan.cs +++ b/Hotel/HotelDataBaseImplement/Models/MealPlan.cs @@ -27,7 +27,7 @@ namespace HotelDataBaseImplement.Models public virtual List Members { get; set; } private Dictionary _mealPlanMembers = null; - + [NotMapped] public Dictionary MealPlanMembers { get diff --git a/Hotel/HotelDataBaseImplement/Models/Member.cs b/Hotel/HotelDataBaseImplement/Models/Member.cs index f52f625..8719f3c 100644 --- a/Hotel/HotelDataBaseImplement/Models/Member.cs +++ b/Hotel/HotelDataBaseImplement/Models/Member.cs @@ -10,7 +10,6 @@ namespace HotelDataBaseImplement.Models { [Required] public string MemberFIO { get; set; } = string.Empty; - [Required] public string Citizenship { get; set; } = string.Empty; @@ -23,8 +22,10 @@ namespace HotelDataBaseImplement.Models [ForeignKey("MemberId")] public virtual List MealPlanMember { get; set; } + [ForeignKey("MemberId")] - public virtual List ConferenceMember { get; set; } + public virtual List ConferenceMembers { get; set; } = new(); + public static Member? Create(MemberBindingModel model) { if (model == null) diff --git a/Hotel/HotelDataModels/HotelDataModels.csproj b/Hotel/HotelDataModels/HotelDataModels.csproj index 132c02c..90feeca 100644 --- a/Hotel/HotelDataModels/HotelDataModels.csproj +++ b/Hotel/HotelDataModels/HotelDataModels.csproj @@ -6,4 +6,33 @@ enable + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Hotel/HotelOrganiserApp/Controllers/HomeController.cs b/Hotel/HotelOrganiserApp/Controllers/HomeController.cs index 10ae877..dc96aeb 100644 --- a/Hotel/HotelOrganiserApp/Controllers/HomeController.cs +++ b/Hotel/HotelOrganiserApp/Controllers/HomeController.cs @@ -1,4 +1,5 @@ using HotelContracts.BindingModels; +using HotelContracts.SearchModels; using HotelContracts.ViewModels; using HotelOrganiserApp.Models; using Microsoft.AspNetCore.Mvc; @@ -146,6 +147,157 @@ namespace HotelOrganiserApp.Controllers return View(APIClient.GetRequest>($"api/main/getmemberlist?organiserId={APIClient.Organiser.Id}")); } + public IActionResult CreateConference() + { + if (APIClient.Organiser == null) + { + return Redirect("~/Home/Enter"); + } + return View(); + } + + [HttpPost] + public void CreateConference(string conferenceName, DateTime startDate) + { + if (APIClient.Organiser == null) + { + throw new Exception("Необходима авторизация"); + } + if (string.IsNullOrEmpty(conferenceName) || string.IsNullOrEmpty(startDate.ToString())) + { + throw new Exception("Введите название"); + } + if (string.IsNullOrEmpty(startDate.ToString())) + { + throw new Exception("Введите дату"); + } + APIClient.PostRequest("api/main/createconference", new ConferenceBindingModel + { + ConferenceName = conferenceName, + StartDate = startDate, + OrganiserId = APIClient.Organiser.Id, + }); + Response.Redirect("ListConferences"); + } + + public IActionResult DeleteConference() + { + if (APIClient.Organiser == null) + { + return Redirect("~/Home/Enter"); + } + ViewBag.Conferences = APIClient.GetRequest>($"api/main/getconferencelist?organiserId={APIClient.Organiser.Id}"); + return View(); + } + + [HttpPost] + public void DeleteConference(int conference) + { + if (APIClient.Organiser == null) + { + throw new Exception("Необходима авторизация"); + } + APIClient.PostRequest("api/main/deleteconference", new ConferenceBindingModel + { + Id = conference + }); + Response.Redirect("ListConferences"); + } + + public IActionResult UpdateConference() + { + if (APIClient.Organiser == null) + { + return Redirect("~/Home/Enter"); + } + ViewBag.Conferences = APIClient.GetRequest>($"api/main/getconferencelist?organiserId={APIClient.Organiser.Id}"); + return View(); + } + + [HttpPost] + public void UpdateConference(int conference, string conferenceName, DateTime startDate) + { + if (APIClient.Organiser == null) + { + throw new Exception("Необходима авторизация"); + } + if (string.IsNullOrEmpty(conferenceName)) + { + throw new Exception("Название не может быть пустым"); + } + if (string.IsNullOrEmpty(startDate.ToString())) + { + throw new Exception("Дата не может быть пустым"); + } + APIClient.PostRequest("api/main/updateconference", new ConferenceBindingModel + { + Id = conference, + ConferenceName = conferenceName, + StartDate = startDate, + OrganiserId = APIClient.Organiser.Id + }); + Response.Redirect("ListConferences"); + } + + [HttpGet] + public Tuple? GetConference(int conferenceId) + { + if (APIClient.Organiser == null) + { + throw new Exception("Необходима авторизация"); + } + var result = APIClient.GetRequest>>>($"api/main/getconference?conferenceId={conferenceId}"); + if (result == null) + { + return default; + } + string table = ""; + for (int i = 0; i < result.Item2.Count; i++) + { + var memberFIO = result.Item2[i].Item1; + var citizenship = result.Item2[i].Item2; + table += ""; + table += $"{memberFIO}"; + table += $"{citizenship}"; + table += ""; + } + return Tuple.Create(result.Item1, table); + } + + public IActionResult AddMemberToConference() + { + if (APIClient.Organiser == null) + { + return Redirect("~/Home/Enter"); + } + ViewBag.Conferences = APIClient.GetRequest>($"api/main/getconferencelist?organiserId={APIClient.Organiser.Id}"); + ViewBag.Members = APIClient.GetRequest>($"api/main/getmemberlist?organiserId={APIClient.Organiser.Id}"); + return View(); + } + + [HttpPost] + public void AddMemberToConference(int conference, int member) + { + if (APIClient.Organiser == null) + { + throw new Exception("Необходима авторизация"); + } + APIClient.PostRequest("api/main/AddMemberToConference", Tuple.Create( + new ConferenceSearchModel() { Id = conference }, + new MemberViewModel() { Id = member } + )); + Response.Redirect("ListConferences"); + } + + public IActionResult ListConferences() + { + if (APIClient.Organiser == null) + { + return Redirect("~/Home/Enter"); + } + return View(APIClient.GetRequest>($"api/main/getconferencelist?organiserId={APIClient.Organiser.Id}")); + } + [HttpGet] public IActionResult Privacy() { diff --git a/Hotel/HotelOrganiserApp/HotelOrganiserApp.csproj b/Hotel/HotelOrganiserApp/HotelOrganiserApp.csproj index 93db7c6..8ee6b17 100644 --- a/Hotel/HotelOrganiserApp/HotelOrganiserApp.csproj +++ b/Hotel/HotelOrganiserApp/HotelOrganiserApp.csproj @@ -20,7 +20,6 @@ - diff --git a/Hotel/HotelOrganiserApp/Views/Home/AddMemberToConference.cshtml b/Hotel/HotelOrganiserApp/Views/Home/AddMemberToConference.cshtml new file mode 100644 index 0000000..c9bade2 --- /dev/null +++ b/Hotel/HotelOrganiserApp/Views/Home/AddMemberToConference.cshtml @@ -0,0 +1,27 @@ +@using HotelContracts.ViewModels; +@using HotelDataModels.Models; + +@{ + ViewData["Title"] = "AddMemberToConference"; +} + +@model Dictionary + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
\ No newline at end of file diff --git a/Hotel/HotelOrganiserApp/Views/Home/CreateConference.cshtml b/Hotel/HotelOrganiserApp/Views/Home/CreateConference.cshtml new file mode 100644 index 0000000..f3cd3e3 --- /dev/null +++ b/Hotel/HotelOrganiserApp/Views/Home/CreateConference.cshtml @@ -0,0 +1,30 @@ +@{ + ViewData["Title"] = "CreateConference"; +} + + + + + +
+
+ + +
+ +
+
+
+
+
diff --git a/Hotel/HotelOrganiserApp/Views/Home/DeleteConference.cshtml b/Hotel/HotelOrganiserApp/Views/Home/DeleteConference.cshtml new file mode 100644 index 0000000..9bd95d1 --- /dev/null +++ b/Hotel/HotelOrganiserApp/Views/Home/DeleteConference.cshtml @@ -0,0 +1,18 @@ +@{ + ViewData["Title"] = "DeleteConference"; +} + + + +
+
+ +
+ +
+
+
+
+
+
+
diff --git a/Hotel/HotelOrganiserApp/Views/Home/ListConferences.cshtml b/Hotel/HotelOrganiserApp/Views/Home/ListConferences.cshtml new file mode 100644 index 0000000..4c0e200 --- /dev/null +++ b/Hotel/HotelOrganiserApp/Views/Home/ListConferences.cshtml @@ -0,0 +1,94 @@ +@using HotelContracts.ViewModels + +@model List + +@{ + ViewData["Title"] = "ListConferences"; +} + + + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + @foreach (var item in Model) + { + + + + + + } + +
+ Номер + + Название конференции + + Дата начала конференции +
+ @Html.DisplayFor(modelItem => item.Id) + + @Html.DisplayFor(modelItem => item.ConferenceName) + + @Html.DisplayFor(modelItem => item.StartDate) +
+
+
+
+ +
+
+
+
+
diff --git a/Hotel/HotelOrganiserApp/Views/Home/UpdateConference.cshtml b/Hotel/HotelOrganiserApp/Views/Home/UpdateConference.cshtml new file mode 100644 index 0000000..bf0f925 --- /dev/null +++ b/Hotel/HotelOrganiserApp/Views/Home/UpdateConference.cshtml @@ -0,0 +1,89 @@ +@using HotelContracts.ViewModels; +@using HotelDataModels.Models; + +@{ + ViewData["Title"] = "UpdateConference"; +} + + + + + + +
+
+ +
+ +
+
+
+ + +
+ +
+ + + + + + + + + + + + + + + +
+ Участники + + Гражданство +
+
+
+
+
+
+
+ +@section Scripts + { + +} diff --git a/Hotel/HotelOrganiserApp/wwwroot/css/listconferences.css b/Hotel/HotelOrganiserApp/wwwroot/css/listconferences.css new file mode 100644 index 0000000..6d576ba --- /dev/null +++ b/Hotel/HotelOrganiserApp/wwwroot/css/listconferences.css @@ -0,0 +1,138 @@ +.u-section-1 .u-sheet-1 { + min-height: 559px; +} + +.u-section-1 .u-layout-wrap-1 { + width: 965px; + margin: 60px auto; +} + +.u-section-1 .u-layout-cell-1 { + min-height: 400px; +} + +.u-section-1 .u-container-layout-1 { + padding: 9px 0; +} + +.u-section-1 .u-table-1 { + width: 694px; + margin: 16px auto 0; +} + +.u-section-1 .u-table-header-1 { + font-weight: 700; + background-image: none; +} + +.u-section-1 .u-layout-cell-2 { + min-height: 400px; +} + +.u-section-1 .u-container-layout-2 { + padding: 30px 11px; +} + +.u-section-1 .u-btn-1 { + + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1px; + background-image: none; + margin: 1 auto; + padding: 10px 34px 10px 33px; +} + +.u-section-1 .u-btn-2 { + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1px; + background-image: none; + margin: 20px auto 0; +} + +.u-section-1 .u-btn-3 { + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1px; + background-image: none; + margin: 20px auto 0; + padding: 10px 37px 10px 36px; +} + +.u-section-1 .u-btn-4 { + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1px; + background-image: none; + margin: 20px auto 0; +} + +@media (max-width: 1199px) { + .u-section-1 .u-sheet-1 { + min-height: 549px; + } + + .u-section-1 .u-layout-wrap-1 { + width: 940px; + } + + .u-section-1 .u-layout-cell-1 { + min-height: 390px; + } + + .u-section-1 .u-table-1 { + width: 470px; + } + + .u-section-1 .u-layout-cell-2 { + min-height: 390px; + } +} + +@media (max-width: 991px) { + .u-section-1 .u-sheet-1 { + min-height: 259px; + } + + .u-section-1 .u-layout-wrap-1 { + width: 720px; + } + + .u-section-1 .u-layout-cell-1 { + min-height: 100px; + } + + .u-section-1 .u-table-1 { + width: 360px; + } + + .u-section-1 .u-layout-cell-2 { + min-height: 100px; + } +} + +@media (max-width: 767px) { + .u-section-1 .u-sheet-1 { + min-height: 359px; + } + + .u-section-1 .u-layout-wrap-1 { + width: 540px; + } + + .u-section-1 .u-container-layout-2 { + padding-left: 10px; + padding-right: 10px; + } +} + +@media (max-width: 575px) { + .u-section-1 .u-layout-wrap-1 { + width: 340px; + } + + .u-section-1 .u-table-1 { + width: 340px; + } +} \ No newline at end of file diff --git a/Hotel/HotelOrganiserApp/wwwroot/css/updateconference.css b/Hotel/HotelOrganiserApp/wwwroot/css/updateconference.css new file mode 100644 index 0000000..3fa7582 --- /dev/null +++ b/Hotel/HotelOrganiserApp/wwwroot/css/updateconference.css @@ -0,0 +1,195 @@ +.u-section-1 .u-sheet-1 { + min-height: 764px; +} + +.u-section-1 .u-layout-wrap-1 { + margin-top: 57px; + margin-bottom: 60px; +} + +.u-section-1 .u-layout-cell-1 { + min-height: 283px; +} + +.u-section-1 .u-container-layout-1 { + padding: 30px; +} + +.u-section-1 .u-form-1 { + left: 285px; + right: auto; + height: 290px; +} + +.u-section-1 .u-label-1 { + font-weight: 700; +} + +.u-section-1 .u-label-2 { + font-weight: 700; +} + +.u-section-1 .u-btn-1 { + background-image: none; +} + +.u-section-1 .u-layout-cell-2 { + min-height: 283px; +} + +.u-section-1 .u-container-layout-2 { + padding: 9px 0; +} + +.u-section-1 .u-table-1 { + width: 779px; + margin: 0 auto; +} + +.u-section-1 .u-table-header-1 { + font-weight: 700; + background-image: none; +} + +.u-section-1 .u-layout-cell-3 { + min-height: 283px; +} + +.u-section-1 .u-container-layout-3 { + padding: 30px 19px; +} + +.u-section-1 .u-btn-2 { + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1px; + background-image: none; + margin: 0 11px; +} + +.u-section-1 .u-btn-3 { + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1px; + background-image: none; + margin: 20px 2px 0 auto; + padding: 10px 29px 10px 28px; +} + +.u-section-1 .u-btn-4 { + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1px; + background-image: none; + margin: 20px 0 0 auto; + padding: 10px 37px; +} + +.u-section-1 .u-btn-5 { + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1px; + background-image: none; + margin: 20px 1px 0 auto; +} + +@media (max-width: 1199px) { + .u-section-1 .u-sheet-1 { + min-height: 665px; + } + + .u-section-1 .u-layout-cell-1 { + min-height: 233px; + } + + .u-section-1 .u-form-1 { + left: 85px; + height: auto; + } + + .u-section-1 .u-layout-cell-2 { + min-height: 233px; + } + + .u-section-1 .u-table-1 { + width: 470px; + } + + .u-section-1 .u-layout-cell-3 { + min-height: 233px; + } + + .u-section-1 .u-btn-2 { + margin-left: 0; + margin-right: 0; + } + + .u-section-1 .u-btn-3 { + margin-right: 0; + } + + .u-section-1 .u-btn-5 { + margin-right: 0; + } +} + +@media (max-width: 991px) { + .u-section-1 .u-sheet-1 { + min-height: 467px; + } + + .u-section-1 .u-layout-cell-1 { + min-height: 178px; + } + + .u-section-1 .u-form-1 { + left: 0; + height: auto; + } + + .u-section-1 .u-layout-cell-2 { + min-height: 100px; + } + + .u-section-1 .u-table-1 { + width: 360px; + } + + .u-section-1 .u-layout-cell-3 { + min-height: 100px; + } +} + +@media (max-width: 767px) { + .u-section-1 .u-sheet-1 { + min-height: 525px; + } + + .u-section-1 .u-layout-cell-1 { + min-height: 134px; + } + + .u-section-1 .u-container-layout-1 { + padding-left: 10px; + padding-right: 10px; + } + + .u-section-1 .u-container-layout-3 { + padding-left: 10px; + padding-right: 10px; + } +} + +@media (max-width: 575px) { + .u-section-1 .u-sheet-1 { + min-height: 478px; + } + + .u-section-1 .u-layout-cell-1 { + min-height: 84px; + } + + .u-section-1 .u-table-1 { + width: 340px; + } +} \ No newline at end of file diff --git a/Hotel/HotelRestApi/Controllers/MainController.cs b/Hotel/HotelRestApi/Controllers/MainController.cs index 7bda859..9430de1 100644 --- a/Hotel/HotelRestApi/Controllers/MainController.cs +++ b/Hotel/HotelRestApi/Controllers/MainController.cs @@ -2,6 +2,7 @@ using HotelContracts.BusinessLogicsContracts; using HotelContracts.SearchModels; using HotelContracts.ViewModels; +using HotelDataBaseImplement.Models; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System.IO.Packaging; @@ -149,6 +150,66 @@ namespace HotelRestApi.Controllers } } + [HttpPost] + public void UpdateConference(ConferenceBindingModel model) + { + try + { + model.ConferenceMembers = null!; + _conference.Update(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка обновления данных"); + throw; + } + } + + [HttpGet] + public Tuple>>? GetConference(int conferenceId) + { + try + { + var elem = _conference.ReadElement(new ConferenceSearchModel { Id = conferenceId }); + if (elem == null) + return null; + return Tuple.Create(elem, elem.ConferenceMembers.Select(x => Tuple.Create(x.Value.MemberFIO, x.Value.Citizenship)).ToList()); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка получения конференции по id={Id}", conferenceId); + throw; + } + } + + [HttpPost] + public void DeleteConference(ConferenceBindingModel model) + { + try + { + _conference.Delete(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка удаления конференции"); + throw; + } + } + + [HttpPost] + public void AddMemberToConference(Tuple model) + { + try + { + _conference.AddMemberToConference(model.Item1, model.Item2); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка добавления участника в конференцию."); + throw; + } + } + [HttpPost] public void CreateMealPlan(MealPlanBindingModel model) { diff --git a/Hotel/HotelRestApi/HotelRestApi.csproj b/Hotel/HotelRestApi/HotelRestApi.csproj index e15bcd4..6b15cdf 100644 --- a/Hotel/HotelRestApi/HotelRestApi.csproj +++ b/Hotel/HotelRestApi/HotelRestApi.csproj @@ -13,7 +13,6 @@ - diff --git a/Hotel/HotelRestApi/log4net.config b/Hotel/HotelRestApi/log4net.config index 43b77f9..565f19f 100644 --- a/Hotel/HotelRestApi/log4net.config +++ b/Hotel/HotelRestApi/log4net.config @@ -1,7 +1,7 @@  - +