From b81972f7239c1be92fa0d453910dcb40831804fb Mon Sep 17 00:00:00 2001 From: Thomas Fransolet Date: Thu, 14 Aug 2025 16:56:02 +0200 Subject: [PATCH] Updated for kiosk (can assign different config on different device) --- .../DTOs/AppConfigurationLinkDTO.cs | 26 +- ManagerService/DTOs/ApplicationInstanceDTO.cs | 10 - ManagerService/Data/AppConfigurationLink.cs | 46 +- ManagerService/Data/ApplicationInstance.cs | 37 +- ManagerService/Data/Section.cs | 9 +- ...814144439_UpdatedKioskSpecific.Designer.cs | 1231 +++++++++++++++++ .../20250814144439_UpdatedKioskSpecific.cs | 205 +++ .../MyInfoMateDbContextModelSnapshot.cs | 56 +- 8 files changed, 1555 insertions(+), 65 deletions(-) create mode 100644 ManagerService/Migrations/20250814144439_UpdatedKioskSpecific.Designer.cs create mode 100644 ManagerService/Migrations/20250814144439_UpdatedKioskSpecific.cs diff --git a/ManagerService/DTOs/AppConfigurationLinkDTO.cs b/ManagerService/DTOs/AppConfigurationLinkDTO.cs index d2321ab..e68f356 100644 --- a/ManagerService/DTOs/AppConfigurationLinkDTO.cs +++ b/ManagerService/DTOs/AppConfigurationLinkDTO.cs @@ -1,4 +1,6 @@ -namespace ManagerService.DTOs +using ManagerService.Data; + +namespace ManagerService.DTOs { public class AppConfigurationLinkDTO { @@ -14,6 +16,26 @@ public bool isActive { get; set; } = true; - public int? weightMasonryGrid { get; set; } + public int? weightMasonryGrid { get; set; } // Specific Mobile + + public bool isDate { get; set; } // Specific Kiosk + + public bool isHour { get; set; } // Specific Kiosk + + public int? roundedValue { get; set; } // Specific Kiosk + + public int? screenPercentageSectionsMainPage { get; set; } // Specific Kiosk + + public bool isSectionImageBackground { get; set; } // Specific Kiosk + + public string deviceId { get; set; } // Specific Kiosk + + public LayoutMainPageType layoutMainPage { get; set; } // Specific Kiosk + + public string LoaderImageUrl { get; set; } // Specific Kiosk + + public string PrimaryColor { get; set; } // Specific Kiosk + + public string SecondaryColor { get; set; } // Specific Kiosk } } diff --git a/ManagerService/DTOs/ApplicationInstanceDTO.cs b/ManagerService/DTOs/ApplicationInstanceDTO.cs index c294d8d..56cda73 100644 --- a/ManagerService/DTOs/ApplicationInstanceDTO.cs +++ b/ManagerService/DTOs/ApplicationInstanceDTO.cs @@ -21,20 +21,10 @@ namespace ManagerService.DTOs public string loaderImageUrl { get; set; } - public bool isDate { get; set; } - - public bool isHour { get; set; } - public string primaryColor { get; set; } public string secondaryColor { get; set; } - public int? roundedValue { get; set; } - - public int? screenPercentageSectionsMainPage { get; set; } - - public bool isSectionImageBackground { get; set; } - public List languages { get; set; } } } diff --git a/ManagerService/Data/AppConfigurationLink.cs b/ManagerService/Data/AppConfigurationLink.cs index d2654ff..f149101 100644 --- a/ManagerService/Data/AppConfigurationLink.cs +++ b/ManagerService/Data/AppConfigurationLink.cs @@ -1,4 +1,5 @@ -using ManagerService.DTOs; +using ManagerService.Data.SubSection; +using ManagerService.DTOs; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -23,11 +24,31 @@ namespace ManagerService.Data [Required] public string ApplicationInstanceId { get; set; } - public int? Order { get; set; } + public int? Order { get; set; } // Specific Mobile - public bool IsActive { get; set; } = true; + public bool IsActive { get; set; } = true; // Specific Mobile - public int? WeightMasonryGrid { get; set; } + public int? WeightMasonryGrid { get; set; } // Specific Mobile + + public bool IsDate { get; set; } // Specific Kiosk + + public bool IsHour { get; set; } // Specific Kiosk + + public int? RoundedValue { get; set; } // Specific Kiosk + + public int? ScreenPercentageSectionsMainPage { get; set; } // Specific Kiosk + + public bool IsSectionImageBackground { get; set; } // => Chose layout of main page // Specific Kiosk + + public LayoutMainPageType LayoutMainPage { get; set; } = LayoutMainPageType.MasonryGrid; // Specific Kiosk + + public string LoaderImageId { get; set; } // Specific Kiosk + + public string LoaderImageUrl { get; set; } // Specific Kiosk + + public string PrimaryColor { get; set; } // Specific Kiosk + + public string SecondaryColor { get; set; } // Specific Kiosk [ForeignKey(nameof(ConfigurationId))] public Configuration Configuration { get; set; } @@ -35,6 +56,10 @@ namespace ManagerService.Data [ForeignKey(nameof(ApplicationInstanceId))] public ApplicationInstance ApplicationInstance { get; set; } + public string? DeviceId { get; set; } // Specific kiosk + [ForeignKey("DeviceId")] + public Device? Device { get; set; } // Specific kiosk + public AppConfigurationLinkDTO ToDTO() { return new AppConfigurationLinkDTO() @@ -45,7 +70,13 @@ namespace ManagerService.Data applicationInstanceId = ApplicationInstanceId, order = Order, isActive = IsActive, - weightMasonryGrid = WeightMasonryGrid + weightMasonryGrid = WeightMasonryGrid, + isDate = IsDate, + isHour = IsHour, + roundedValue = RoundedValue, + screenPercentageSectionsMainPage = ScreenPercentageSectionsMainPage, + isSectionImageBackground = IsSectionImageBackground, + deviceId = DeviceId, }; } @@ -56,6 +87,11 @@ namespace ManagerService.Data Order = appConfigurationLinkDTO.order; IsActive = appConfigurationLinkDTO.isActive; WeightMasonryGrid = appConfigurationLinkDTO?.weightMasonryGrid; + IsDate = appConfigurationLinkDTO.isDate; + IsHour = appConfigurationLinkDTO.isHour; + RoundedValue = appConfigurationLinkDTO.roundedValue; + ScreenPercentageSectionsMainPage = appConfigurationLinkDTO.screenPercentageSectionsMainPage; + IsSectionImageBackground = appConfigurationLinkDTO.isSectionImageBackground; return this; } diff --git a/ManagerService/Data/ApplicationInstance.cs b/ManagerService/Data/ApplicationInstance.cs index 6fedda4..102d469 100644 --- a/ManagerService/Data/ApplicationInstance.cs +++ b/ManagerService/Data/ApplicationInstance.cs @@ -24,32 +24,23 @@ namespace ManagerService.Data public List Configurations { get; set; } - public string MainImageId { get; set; } + public string MainImageId { get; set; } // Specific Mobile et web(?) - public string MainImageUrl { get; set; } + public string MainImageUrl { get; set; } // Specific Mobile et web(?) - public string LoaderImageId { get; set; } + public string LoaderImageId { get; set; } // Specific Mobile et web - public string LoaderImageUrl { get; set; } + public string LoaderImageUrl { get; set; } // Specific Mobile et web - public bool IsDate { get; set; } + public string PrimaryColor { get; set; } // Specific Mobile et web - public bool IsHour { get; set; } + public string SecondaryColor { get; set; } // Specific Mobile et web - public string PrimaryColor { get; set; } - - public string SecondaryColor { get; set; } - - public int? RoundedValue { get; set; } - - public int? ScreenPercentageSectionsMainPage { get; set; } - - public bool IsSectionImageBackground { get; set; } // => Chose layout of main page - - public LayoutMainPageType LayoutMainPage { get; set; } = LayoutMainPageType.MasonryGrid; + public LayoutMainPageType LayoutMainPage { get; set; } = LayoutMainPageType.MasonryGrid; // Specific Mobile et web public List Languages { get; set; } // All app must support languages, if not, client's problem - public string? SectionEventId { get; set; } + + public string? SectionEventId { get; set; } // Specific Mobile et web(?) [ForeignKey("SectionEventId")] public SectionEvent? SectionEvent { get; set; } // => To Display in large a event with countdown (in mobile app). @@ -66,13 +57,8 @@ namespace ManagerService.Data mainImageUrl = MainImageUrl, loaderImageId = LoaderImageId, loaderImageUrl = LoaderImageUrl, - isDate = IsDate, - isHour = IsHour, primaryColor = PrimaryColor, secondaryColor = SecondaryColor, - roundedValue = RoundedValue, - screenPercentageSectionsMainPage = ScreenPercentageSectionsMainPage, - isSectionImageBackground = IsSectionImageBackground, languages = Languages }; } @@ -85,13 +71,8 @@ namespace ManagerService.Data MainImageUrl = dto.mainImageUrl; LoaderImageId = dto.loaderImageId; LoaderImageUrl = dto.loaderImageUrl; - IsDate = dto.isDate; - IsHour = dto.isHour; PrimaryColor = dto.primaryColor; SecondaryColor = dto.secondaryColor; - RoundedValue = dto.roundedValue; - ScreenPercentageSectionsMainPage = dto.screenPercentageSectionsMainPage; - IsSectionImageBackground = dto.isSectionImageBackground; Languages = dto.languages; Configurations = dto.configurations; diff --git a/ManagerService/Data/Section.cs b/ManagerService/Data/Section.cs index 82bf12c..6943aef 100644 --- a/ManagerService/Data/Section.cs +++ b/ManagerService/Data/Section.cs @@ -1,10 +1,8 @@ -using ManagerService.Data.SubSection; -using ManagerService.DTOs; +using ManagerService.DTOs; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; -using System.Linq; namespace ManagerService.Data @@ -60,7 +58,8 @@ namespace ManagerService.Data public int? MeterZoneGPS { get; set; } - public bool isActive { get; set; } = true; + public bool IsActive { get; set; } = true; + public SectionDTO ToDTO() { @@ -70,7 +69,7 @@ namespace ManagerService.Data label = Label, title = Title, description = Description, - isActive = isActive, + isActive = IsActive, order = Order, type = Type, imageId = ImageId, diff --git a/ManagerService/Migrations/20250814144439_UpdatedKioskSpecific.Designer.cs b/ManagerService/Migrations/20250814144439_UpdatedKioskSpecific.Designer.cs new file mode 100644 index 0000000..c58006f --- /dev/null +++ b/ManagerService/Migrations/20250814144439_UpdatedKioskSpecific.Designer.cs @@ -0,0 +1,1231 @@ +// +using System; +using System.Collections.Generic; +using Manager.DTOs; +using ManagerService.DTOs; +using ManagerService.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using NetTopologySuite.Geometries; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace ManagerService.Migrations +{ + [DbContext(typeof(MyInfoMateDbContext))] + [Migration("20250814144439_UpdatedKioskSpecific")] + partial class UpdatedKioskSpecific + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "postgis"); + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("ManagerService.Data.AppConfigurationLink", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ApplicationInstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ConfigurationId") + .IsRequired() + .HasColumnType("text"); + + b.Property("DeviceId") + .HasColumnType("text"); + + b.Property("IsActive") + .HasColumnType("boolean"); + + b.Property("IsDate") + .HasColumnType("boolean"); + + b.Property("IsHour") + .HasColumnType("boolean"); + + b.Property("IsSectionImageBackground") + .HasColumnType("boolean"); + + b.Property("LayoutMainPage") + .HasColumnType("integer"); + + b.Property("LoaderImageId") + .HasColumnType("text"); + + b.Property("LoaderImageUrl") + .HasColumnType("text"); + + b.Property("Order") + .HasColumnType("integer"); + + b.Property("PrimaryColor") + .HasColumnType("text"); + + b.Property("RoundedValue") + .HasColumnType("integer"); + + b.Property("ScreenPercentageSectionsMainPage") + .HasColumnType("integer"); + + b.Property("SecondaryColor") + .HasColumnType("text"); + + b.Property("WeightMasonryGrid") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ApplicationInstanceId"); + + b.HasIndex("ConfigurationId"); + + b.HasIndex("DeviceId"); + + b.ToTable("AppConfigurationLinks"); + }); + + modelBuilder.Entity("ManagerService.Data.ApplicationInstance", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("AppType") + .HasColumnType("integer"); + + b.Property("InstanceId") + .IsRequired() + .HasColumnType("text"); + + b.PrimitiveCollection>("Languages") + .HasColumnType("text[]"); + + b.Property("LayoutMainPage") + .HasColumnType("integer"); + + b.Property("LoaderImageId") + .HasColumnType("text"); + + b.Property("LoaderImageUrl") + .HasColumnType("text"); + + b.Property("MainImageId") + .HasColumnType("text"); + + b.Property("MainImageUrl") + .HasColumnType("text"); + + b.Property("PrimaryColor") + .HasColumnType("text"); + + b.Property("SecondaryColor") + .HasColumnType("text"); + + b.Property("SectionEventId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("SectionEventId"); + + b.ToTable("ApplicationInstances"); + }); + + modelBuilder.Entity("ManagerService.Data.Configuration", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("DateCreation") + .HasColumnType("timestamp with time zone"); + + b.Property("ImageId") + .HasColumnType("text"); + + b.Property("ImageSource") + .HasColumnType("text"); + + b.Property("InstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("IsOffline") + .HasColumnType("boolean"); + + b.Property("IsQRCode") + .HasColumnType("boolean"); + + b.Property("IsSearchNumber") + .HasColumnType("boolean"); + + b.Property("IsSearchText") + .HasColumnType("boolean"); + + b.Property("Label") + .IsRequired() + .HasColumnType("text"); + + b.PrimitiveCollection>("Languages") + .HasColumnType("text[]"); + + b.Property("LoaderImageId") + .HasColumnType("text"); + + b.Property("LoaderImageUrl") + .HasColumnType("text"); + + b.Property("PrimaryColor") + .HasColumnType("text"); + + b.Property("SecondaryColor") + .HasColumnType("text"); + + b.Property("Title") + .IsRequired() + .HasColumnType("jsonb"); + + b.HasKey("Id"); + + b.ToTable("Configurations"); + }); + + modelBuilder.Entity("ManagerService.Data.Device", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("BatteryLevel") + .HasColumnType("text"); + + b.Property("ConfigurationId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Connected") + .HasColumnType("boolean"); + + b.Property("ConnectionLevel") + .HasColumnType("text"); + + b.Property("DateCreation") + .HasColumnType("timestamp with time zone"); + + b.Property("DateUpdate") + .HasColumnType("timestamp with time zone"); + + b.Property("Identifier") + .HasColumnType("text"); + + b.Property("InstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("IpAddressETH") + .HasColumnType("text"); + + b.Property("IpAddressWLAN") + .HasColumnType("text"); + + b.Property("LastBatteryLevel") + .HasColumnType("timestamp with time zone"); + + b.Property("LastConnectionLevel") + .HasColumnType("timestamp with time zone"); + + b.Property("Name") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ConfigurationId"); + + b.ToTable("Devices"); + }); + + modelBuilder.Entity("ManagerService.Data.Instance", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("DateCreation") + .HasColumnType("timestamp with time zone"); + + b.Property("IsMobile") + .HasColumnType("boolean"); + + b.Property("IsPushNotification") + .HasColumnType("boolean"); + + b.Property("IsStatistic") + .HasColumnType("boolean"); + + b.Property("IsTablet") + .HasColumnType("boolean"); + + b.Property("IsVR") + .HasColumnType("boolean"); + + b.Property("IsWeb") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text"); + + b.Property("PinCode") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Instances"); + }); + + modelBuilder.Entity("ManagerService.Data.Resource", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("DateCreation") + .HasColumnType("timestamp with time zone"); + + b.Property("InstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Label") + .IsRequired() + .HasColumnType("text"); + + b.Property("Type") + .HasColumnType("integer"); + + b.Property("Url") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Resources"); + }); + + modelBuilder.Entity("ManagerService.Data.Section", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("BeaconId") + .HasColumnType("integer"); + + b.Property("ConfigurationId") + .IsRequired() + .HasColumnType("text"); + + b.Property("DateCreation") + .HasColumnType("timestamp with time zone"); + + b.Property("Description") + .HasColumnType("jsonb"); + + b.Property("Discriminator") + .IsRequired() + .HasMaxLength(13) + .HasColumnType("character varying(13)"); + + b.Property("ImageId") + .HasColumnType("text"); + + b.Property("ImageSource") + .HasColumnType("text"); + + b.Property("InstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("IsBeacon") + .HasColumnType("boolean"); + + b.Property("IsSubSection") + .HasColumnType("boolean"); + + b.Property("Label") + .IsRequired() + .HasColumnType("text"); + + b.Property("Latitude") + .HasColumnType("text"); + + b.Property("Longitude") + .HasColumnType("text"); + + b.Property("MeterZoneGPS") + .HasColumnType("integer"); + + b.Property("Order") + .HasColumnType("integer"); + + b.Property("ParentId") + .HasColumnType("text"); + + b.Property("SectionMenuId") + .HasColumnType("text"); + + b.Property("Title") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Type") + .HasColumnType("integer"); + + b.Property("isActive") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.HasIndex("SectionMenuId"); + + b.ToTable("Sections"); + + b.HasDiscriminator().HasValue("Base"); + + b.UseTphMappingStrategy(); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.EventAgenda", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .HasColumnType("jsonb"); + + b.Property("DateAdded") + .HasColumnType("timestamp with time zone"); + + b.Property("DateFrom") + .HasColumnType("timestamp with time zone"); + + b.Property("DateTo") + .HasColumnType("timestamp with time zone"); + + b.Property("Description") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Email") + .HasColumnType("text"); + + b.Property("Label") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Phone") + .HasColumnType("text"); + + b.Property("ResourceId") + .HasColumnType("text"); + + b.Property("SectionAgendaId") + .HasColumnType("text"); + + b.Property("SectionEventId") + .HasColumnType("text"); + + b.Property("Type") + .HasColumnType("text"); + + b.Property("Website") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ResourceId"); + + b.HasIndex("SectionAgendaId"); + + b.HasIndex("SectionEventId"); + + b.ToTable("EventAgendas"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.GeoPoint", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CategorieId") + .HasColumnType("integer"); + + b.Property("Contents") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Description") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Email") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Geometry") + .HasColumnType("geometry"); + + b.Property("ImageResourceId") + .HasColumnType("text"); + + b.Property("ImageUrl") + .HasColumnType("text"); + + b.Property("Phone") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("PolyColor") + .HasColumnType("text"); + + b.Property("Prices") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Schedules") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("SectionEventId") + .HasColumnType("text"); + + b.Property("SectionMapId") + .HasColumnType("text"); + + b.Property("Site") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Title") + .IsRequired() + .HasColumnType("jsonb"); + + b.HasKey("Id"); + + b.HasIndex("SectionEventId"); + + b.HasIndex("SectionMapId"); + + b.ToTable("GeoPoints"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.GuidedPath", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Description") + .HasColumnType("jsonb"); + + b.Property("HideNextStepsUntilComplete") + .HasColumnType("boolean"); + + b.Property("InstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("IsLinear") + .HasColumnType("boolean"); + + b.Property("Order") + .HasColumnType("integer"); + + b.Property("RequireSuccessToAdvance") + .HasColumnType("boolean"); + + b.Property("SectionEventId") + .HasColumnType("text"); + + b.Property("SectionMapId") + .HasColumnType("text"); + + b.Property("Title") + .IsRequired() + .HasColumnType("jsonb"); + + b.HasKey("Id"); + + b.HasIndex("SectionEventId"); + + b.HasIndex("SectionMapId"); + + b.ToTable("GuidedPaths"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.GuidedStep", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Description") + .HasColumnType("jsonb"); + + b.Property("Geometry") + .HasColumnType("geometry"); + + b.Property("GuidedPathId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ImageUrl") + .HasColumnType("text"); + + b.Property("IsHiddenInitially") + .HasColumnType("boolean"); + + b.Property("IsStepLocked") + .HasColumnType("boolean"); + + b.Property("IsStepTimer") + .HasColumnType("boolean"); + + b.Property("Order") + .HasColumnType("integer"); + + b.Property("TimerExpiredMessage") + .HasColumnType("jsonb"); + + b.Property("TimerSeconds") + .HasColumnType("integer"); + + b.Property("Title") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("TriggerGeoPointId") + .HasColumnType("integer"); + + b.Property("ZoneRadiusMeters") + .HasColumnType("double precision"); + + b.HasKey("Id"); + + b.HasIndex("GuidedPathId"); + + b.HasIndex("TriggerGeoPointId"); + + b.ToTable("GuidedSteps"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.QuizQuestion", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("GuidedStepId") + .HasColumnType("text"); + + b.Property("IsSlidingPuzzle") + .HasColumnType("boolean"); + + b.Property>("Label") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Order") + .HasColumnType("integer"); + + b.Property("PuzzleCols") + .HasColumnType("integer"); + + b.Property("PuzzleImageId") + .HasColumnType("text"); + + b.Property("PuzzleRows") + .HasColumnType("integer"); + + b.Property("ResourceId") + .HasColumnType("text"); + + b.Property>("Responses") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("SectionQuizId") + .HasColumnType("text"); + + b.Property("ValidationQuestionType") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("GuidedStepId"); + + b.HasIndex("PuzzleImageId"); + + b.HasIndex("ResourceId"); + + b.HasIndex("SectionQuizId"); + + b.ToTable("QuizQuestions"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionEvent+MapAnnotation", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Geometry") + .HasColumnType("geometry"); + + b.Property("GeometryType") + .HasColumnType("integer"); + + b.Property("Icon") + .HasColumnType("text"); + + b.Property("IconResourceId") + .HasColumnType("text"); + + b.Property>("Label") + .HasColumnType("jsonb"); + + b.Property("PolyColor") + .HasColumnType("text"); + + b.Property("ProgrammeBlockId") + .HasColumnType("text"); + + b.Property>("Type") + .HasColumnType("jsonb"); + + b.HasKey("Id"); + + b.HasIndex("IconResourceId"); + + b.HasIndex("ProgrammeBlockId"); + + b.ToTable("MapAnnotations"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionEvent+ProgrammeBlock", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property>("Description") + .HasColumnType("jsonb"); + + b.Property("EndTime") + .HasColumnType("timestamp with time zone"); + + b.Property("SectionEventId") + .HasColumnType("text"); + + b.Property("StartTime") + .HasColumnType("timestamp with time zone"); + + b.Property>("Title") + .HasColumnType("jsonb"); + + b.HasKey("Id"); + + b.HasIndex("SectionEventId"); + + b.ToTable("ProgrammeBlocks"); + }); + + modelBuilder.Entity("ManagerService.Data.User", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("DateCreation") + .HasColumnType("timestamp with time zone"); + + b.Property("Email") + .IsRequired() + .HasColumnType("text"); + + b.Property("FirstName") + .HasColumnType("text"); + + b.Property("InstanceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("text"); + + b.Property("Password") + .IsRequired() + .HasColumnType("text"); + + b.Property("Token") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionAgenda", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.Property("AgendaMapProvider") + .HasColumnType("integer"); + + b.Property>("AgendaResourceIds") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("IsOnlineAgenda") + .HasColumnType("boolean"); + + b.HasDiscriminator().HasValue("Agenda"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionArticle", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.Property>("ArticleAudioIds") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property>("ArticleContent") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property>("ArticleContents") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("ArticleIsContentTop") + .HasColumnType("boolean"); + + b.Property("ArticleIsReadAudioAuto") + .HasColumnType("boolean"); + + b.HasDiscriminator().HasValue("Article"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionEvent", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.Property("EndDate") + .HasColumnType("timestamp with time zone"); + + b.Property>("ParcoursIds") + .HasColumnType("jsonb"); + + b.Property("StartDate") + .HasColumnType("timestamp with time zone"); + + b.HasDiscriminator().HasValue("SectionEvent"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionMap", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.Property>("MapCategories") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("MapCenterLatitude") + .HasColumnType("text"); + + b.Property("MapCenterLongitude") + .HasColumnType("text"); + + b.Property("MapMapProvider") + .HasColumnType("integer"); + + b.Property("MapMapType") + .HasColumnType("integer"); + + b.Property("MapResourceId") + .HasColumnType("text"); + + b.Property("MapTypeMapbox") + .HasColumnType("integer"); + + b.Property("MapZoom") + .HasColumnType("integer"); + + b.HasIndex("MapResourceId"); + + b.HasDiscriminator().HasValue("Map"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionMenu", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.HasDiscriminator().HasValue("Menu"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionPdf", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.Property>("PDFOrderedTranslationAndResources") + .IsRequired() + .HasColumnType("jsonb"); + + b.HasDiscriminator().HasValue("PDF"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionPuzzle", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.Property("IsSlidingPuzzle") + .HasColumnType("boolean"); + + b.Property("PuzzleCols") + .HasColumnType("integer"); + + b.Property("PuzzleImageId") + .HasColumnType("text"); + + b.Property>("PuzzleMessageDebut") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property>("PuzzleMessageFin") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("PuzzleRows") + .HasColumnType("integer"); + + b.HasIndex("PuzzleImageId"); + + b.HasDiscriminator().HasValue("Puzzle"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionQuiz", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.Property>("QuizBadLevel") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property>("QuizGoodLevel") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property>("QuizGreatLevel") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property>("QuizMediumLevel") + .IsRequired() + .HasColumnType("jsonb"); + + b.HasDiscriminator().HasValue("Quiz"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionSlider", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.Property>("SliderContents") + .IsRequired() + .HasColumnType("jsonb"); + + b.HasDiscriminator().HasValue("Slider"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionVideo", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.Property("VideoSource") + .IsRequired() + .HasColumnType("text"); + + b.HasDiscriminator().HasValue("Video"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionWeather", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.Property("WeatherCity") + .HasColumnType("text"); + + b.Property("WeatherResult") + .HasColumnType("text"); + + b.Property("WeatherUpdatedDate") + .HasColumnType("timestamp with time zone"); + + b.HasDiscriminator().HasValue("Weather"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionWeb", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.Property("WebSource") + .IsRequired() + .HasColumnType("text"); + + b.HasDiscriminator().HasValue("Web"); + }); + + modelBuilder.Entity("ManagerService.Data.AppConfigurationLink", b => + { + b.HasOne("ManagerService.Data.ApplicationInstance", "ApplicationInstance") + .WithMany("Configurations") + .HasForeignKey("ApplicationInstanceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("ManagerService.Data.Configuration", "Configuration") + .WithMany() + .HasForeignKey("ConfigurationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("ManagerService.Data.Device", "Device") + .WithMany() + .HasForeignKey("DeviceId"); + + b.Navigation("ApplicationInstance"); + + b.Navigation("Configuration"); + + b.Navigation("Device"); + }); + + modelBuilder.Entity("ManagerService.Data.ApplicationInstance", b => + { + b.HasOne("ManagerService.Data.SubSection.SectionEvent", "SectionEvent") + .WithMany() + .HasForeignKey("SectionEventId"); + + b.Navigation("SectionEvent"); + }); + + modelBuilder.Entity("ManagerService.Data.Device", b => + { + b.HasOne("ManagerService.Data.Configuration", "Configuration") + .WithMany() + .HasForeignKey("ConfigurationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Configuration"); + }); + + modelBuilder.Entity("ManagerService.Data.Section", b => + { + b.HasOne("ManagerService.Data.SubSection.SectionMenu", null) + .WithMany("MenuSections") + .HasForeignKey("SectionMenuId"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.EventAgenda", b => + { + b.HasOne("ManagerService.Data.Resource", "Resource") + .WithMany() + .HasForeignKey("ResourceId"); + + b.HasOne("ManagerService.Data.SubSection.SectionAgenda", "SectionAgenda") + .WithMany("EventAgendas") + .HasForeignKey("SectionAgendaId"); + + b.HasOne("ManagerService.Data.SubSection.SectionEvent", "SectionEvent") + .WithMany() + .HasForeignKey("SectionEventId"); + + b.Navigation("Resource"); + + b.Navigation("SectionAgenda"); + + b.Navigation("SectionEvent"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.GeoPoint", b => + { + b.HasOne("ManagerService.Data.SubSection.SectionEvent", "SectionEvent") + .WithMany() + .HasForeignKey("SectionEventId"); + + b.HasOne("ManagerService.Data.SubSection.SectionMap", "SectionMap") + .WithMany("MapPoints") + .HasForeignKey("SectionMapId"); + + b.Navigation("SectionEvent"); + + b.Navigation("SectionMap"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.GuidedPath", b => + { + b.HasOne("ManagerService.Data.SubSection.SectionEvent", "SectionEvent") + .WithMany() + .HasForeignKey("SectionEventId"); + + b.HasOne("ManagerService.Data.SubSection.SectionMap", "SectionMap") + .WithMany() + .HasForeignKey("SectionMapId"); + + b.Navigation("SectionEvent"); + + b.Navigation("SectionMap"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.GuidedStep", b => + { + b.HasOne("ManagerService.Data.SubSection.GuidedPath", "GuidedPath") + .WithMany("Steps") + .HasForeignKey("GuidedPathId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("ManagerService.Data.SubSection.GeoPoint", "TriggerGeoPoint") + .WithMany() + .HasForeignKey("TriggerGeoPointId"); + + b.Navigation("GuidedPath"); + + b.Navigation("TriggerGeoPoint"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.QuizQuestion", b => + { + b.HasOne("ManagerService.Data.SubSection.GuidedStep", "GuidedStep") + .WithMany("QuizQuestions") + .HasForeignKey("GuidedStepId"); + + b.HasOne("ManagerService.Data.Resource", "PuzzleImage") + .WithMany() + .HasForeignKey("PuzzleImageId"); + + b.HasOne("ManagerService.Data.Resource", "Resource") + .WithMany() + .HasForeignKey("ResourceId"); + + b.HasOne("ManagerService.Data.SubSection.SectionQuiz", "SectionQuiz") + .WithMany("QuizQuestions") + .HasForeignKey("SectionQuizId"); + + b.Navigation("GuidedStep"); + + b.Navigation("PuzzleImage"); + + b.Navigation("Resource"); + + b.Navigation("SectionQuiz"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionEvent+MapAnnotation", b => + { + b.HasOne("ManagerService.Data.Resource", "IconResource") + .WithMany() + .HasForeignKey("IconResourceId"); + + b.HasOne("ManagerService.Data.SubSection.SectionEvent+ProgrammeBlock", null) + .WithMany("MapAnnotations") + .HasForeignKey("ProgrammeBlockId"); + + b.Navigation("IconResource"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionEvent+ProgrammeBlock", b => + { + b.HasOne("ManagerService.Data.SubSection.SectionEvent", null) + .WithMany("Programme") + .HasForeignKey("SectionEventId"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionMap", b => + { + b.HasOne("ManagerService.Data.Resource", "MapResource") + .WithMany() + .HasForeignKey("MapResourceId"); + + b.Navigation("MapResource"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionPuzzle", b => + { + b.HasOne("ManagerService.Data.Resource", "PuzzleImage") + .WithMany() + .HasForeignKey("PuzzleImageId"); + + b.Navigation("PuzzleImage"); + }); + + modelBuilder.Entity("ManagerService.Data.ApplicationInstance", b => + { + b.Navigation("Configurations"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.GuidedPath", b => + { + b.Navigation("Steps"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.GuidedStep", b => + { + b.Navigation("QuizQuestions"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionEvent+ProgrammeBlock", b => + { + b.Navigation("MapAnnotations"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionAgenda", b => + { + b.Navigation("EventAgendas"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionEvent", b => + { + b.Navigation("Programme"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionMap", b => + { + b.Navigation("MapPoints"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionMenu", b => + { + b.Navigation("MenuSections"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionQuiz", b => + { + b.Navigation("QuizQuestions"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/ManagerService/Migrations/20250814144439_UpdatedKioskSpecific.cs b/ManagerService/Migrations/20250814144439_UpdatedKioskSpecific.cs new file mode 100644 index 0000000..89d0cd3 --- /dev/null +++ b/ManagerService/Migrations/20250814144439_UpdatedKioskSpecific.cs @@ -0,0 +1,205 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace ManagerService.Migrations +{ + /// + public partial class UpdatedKioskSpecific : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsDate", + table: "ApplicationInstances"); + + migrationBuilder.DropColumn( + name: "IsHour", + table: "ApplicationInstances"); + + migrationBuilder.DropColumn( + name: "IsSectionImageBackground", + table: "ApplicationInstances"); + + migrationBuilder.DropColumn( + name: "RoundedValue", + table: "ApplicationInstances"); + + migrationBuilder.DropColumn( + name: "ScreenPercentageSectionsMainPage", + table: "ApplicationInstances"); + + migrationBuilder.AddColumn( + name: "DeviceId", + table: "AppConfigurationLinks", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "IsDate", + table: "AppConfigurationLinks", + type: "boolean", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsHour", + table: "AppConfigurationLinks", + type: "boolean", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsSectionImageBackground", + table: "AppConfigurationLinks", + type: "boolean", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "LayoutMainPage", + table: "AppConfigurationLinks", + type: "integer", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "LoaderImageId", + table: "AppConfigurationLinks", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "LoaderImageUrl", + table: "AppConfigurationLinks", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "PrimaryColor", + table: "AppConfigurationLinks", + type: "text", + nullable: true); + + migrationBuilder.AddColumn( + name: "RoundedValue", + table: "AppConfigurationLinks", + type: "integer", + nullable: true); + + migrationBuilder.AddColumn( + name: "ScreenPercentageSectionsMainPage", + table: "AppConfigurationLinks", + type: "integer", + nullable: true); + + migrationBuilder.AddColumn( + name: "SecondaryColor", + table: "AppConfigurationLinks", + type: "text", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_AppConfigurationLinks_DeviceId", + table: "AppConfigurationLinks", + column: "DeviceId"); + + migrationBuilder.AddForeignKey( + name: "FK_AppConfigurationLinks_Devices_DeviceId", + table: "AppConfigurationLinks", + column: "DeviceId", + principalTable: "Devices", + principalColumn: "Id"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_AppConfigurationLinks_Devices_DeviceId", + table: "AppConfigurationLinks"); + + migrationBuilder.DropIndex( + name: "IX_AppConfigurationLinks_DeviceId", + table: "AppConfigurationLinks"); + + migrationBuilder.DropColumn( + name: "DeviceId", + table: "AppConfigurationLinks"); + + migrationBuilder.DropColumn( + name: "IsDate", + table: "AppConfigurationLinks"); + + migrationBuilder.DropColumn( + name: "IsHour", + table: "AppConfigurationLinks"); + + migrationBuilder.DropColumn( + name: "IsSectionImageBackground", + table: "AppConfigurationLinks"); + + migrationBuilder.DropColumn( + name: "LayoutMainPage", + table: "AppConfigurationLinks"); + + migrationBuilder.DropColumn( + name: "LoaderImageId", + table: "AppConfigurationLinks"); + + migrationBuilder.DropColumn( + name: "LoaderImageUrl", + table: "AppConfigurationLinks"); + + migrationBuilder.DropColumn( + name: "PrimaryColor", + table: "AppConfigurationLinks"); + + migrationBuilder.DropColumn( + name: "RoundedValue", + table: "AppConfigurationLinks"); + + migrationBuilder.DropColumn( + name: "ScreenPercentageSectionsMainPage", + table: "AppConfigurationLinks"); + + migrationBuilder.DropColumn( + name: "SecondaryColor", + table: "AppConfigurationLinks"); + + migrationBuilder.AddColumn( + name: "IsDate", + table: "ApplicationInstances", + type: "boolean", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsHour", + table: "ApplicationInstances", + type: "boolean", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsSectionImageBackground", + table: "ApplicationInstances", + type: "boolean", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "RoundedValue", + table: "ApplicationInstances", + type: "integer", + nullable: true); + + migrationBuilder.AddColumn( + name: "ScreenPercentageSectionsMainPage", + table: "ApplicationInstances", + type: "integer", + nullable: true); + } + } +} diff --git a/ManagerService/Migrations/MyInfoMateDbContextModelSnapshot.cs b/ManagerService/Migrations/MyInfoMateDbContextModelSnapshot.cs index 7c1607e..0b50c24 100644 --- a/ManagerService/Migrations/MyInfoMateDbContextModelSnapshot.cs +++ b/ManagerService/Migrations/MyInfoMateDbContextModelSnapshot.cs @@ -40,12 +40,45 @@ namespace ManagerService.Migrations .IsRequired() .HasColumnType("text"); + b.Property("DeviceId") + .HasColumnType("text"); + b.Property("IsActive") .HasColumnType("boolean"); + b.Property("IsDate") + .HasColumnType("boolean"); + + b.Property("IsHour") + .HasColumnType("boolean"); + + b.Property("IsSectionImageBackground") + .HasColumnType("boolean"); + + b.Property("LayoutMainPage") + .HasColumnType("integer"); + + b.Property("LoaderImageId") + .HasColumnType("text"); + + b.Property("LoaderImageUrl") + .HasColumnType("text"); + b.Property("Order") .HasColumnType("integer"); + b.Property("PrimaryColor") + .HasColumnType("text"); + + b.Property("RoundedValue") + .HasColumnType("integer"); + + b.Property("ScreenPercentageSectionsMainPage") + .HasColumnType("integer"); + + b.Property("SecondaryColor") + .HasColumnType("text"); + b.Property("WeightMasonryGrid") .HasColumnType("integer"); @@ -55,6 +88,8 @@ namespace ManagerService.Migrations b.HasIndex("ConfigurationId"); + b.HasIndex("DeviceId"); + b.ToTable("AppConfigurationLinks"); }); @@ -70,15 +105,6 @@ namespace ManagerService.Migrations .IsRequired() .HasColumnType("text"); - b.Property("IsDate") - .HasColumnType("boolean"); - - b.Property("IsHour") - .HasColumnType("boolean"); - - b.Property("IsSectionImageBackground") - .HasColumnType("boolean"); - b.PrimitiveCollection>("Languages") .HasColumnType("text[]"); @@ -100,12 +126,6 @@ namespace ManagerService.Migrations b.Property("PrimaryColor") .HasColumnType("text"); - b.Property("RoundedValue") - .HasColumnType("integer"); - - b.Property("ScreenPercentageSectionsMainPage") - .HasColumnType("integer"); - b.Property("SecondaryColor") .HasColumnType("text"); @@ -987,9 +1007,15 @@ namespace ManagerService.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + b.HasOne("ManagerService.Data.Device", "Device") + .WithMany() + .HasForeignKey("DeviceId"); + b.Navigation("ApplicationInstance"); b.Navigation("Configuration"); + + b.Navigation("Device"); }); modelBuilder.Entity("ManagerService.Data.ApplicationInstance", b =>