From 8b68ebe8c9b0ec342b3c2437b76a5922a4820e69 Mon Sep 17 00:00:00 2001 From: Thomas Fransolet Date: Wed, 19 Mar 2025 11:57:53 +0100 Subject: [PATCH] Device controller done --- .../Controllers/DeviceController.cs | 73 +- .../Controllers/InstanceController.cs | 1 - ManagerService/DTOs/DeviceDTO.cs | 4 +- ManagerService/Data/Device.cs | 27 +- ...pdateConfigurationLinkInDevice.Designer.cs | 835 ++++++++++++++++++ ...9105313_UpdateConfigurationLinkInDevice.cs | 49 + .../MyInfoMateDbContextModelSnapshot.cs | 16 +- 7 files changed, 974 insertions(+), 31 deletions(-) create mode 100644 ManagerService/Migrations/20250319105313_UpdateConfigurationLinkInDevice.Designer.cs create mode 100644 ManagerService/Migrations/20250319105313_UpdateConfigurationLinkInDevice.cs diff --git a/ManagerService/Controllers/DeviceController.cs b/ManagerService/Controllers/DeviceController.cs index e20c0f1..d22884c 100644 --- a/ManagerService/Controllers/DeviceController.cs +++ b/ManagerService/Controllers/DeviceController.cs @@ -4,8 +4,10 @@ using System.Linq; using Manager.Services; using ManagerService.Data; using ManagerService.DTOs; +using ManagerService.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using Mqtt.Client.AspNetCore.Services; using Newtonsoft.Json; @@ -21,12 +23,15 @@ namespace ManagerService.Controllers private DeviceDatabaseService _deviceService; private ConfigurationDatabaseService _configurationService; private readonly ILogger _logger; + private readonly MyInfoMateDbContext _myInfoMateDbContext; + IHexIdGeneratorService idService = new HexIdGeneratorService(); - public DeviceController(ILogger logger, DeviceDatabaseService deviceService, ConfigurationDatabaseService configurationService) + public DeviceController(ILogger logger, DeviceDatabaseService deviceService, ConfigurationDatabaseService configurationService, MyInfoMateDbContext myInfoMateDbContext) { _logger = logger; _deviceService = deviceService; _configurationService = configurationService; + _myInfoMateDbContext = myInfoMateDbContext; } /// @@ -40,7 +45,8 @@ namespace ManagerService.Controllers { try { - List devices = _deviceService.GetAll(instanceId); + //List devices = _deviceService.GetAll(instanceId); + List devices = _myInfoMateDbContext.Devices.Include(d => d.Configuration).ToList(); return new OkObjectResult(devices.Select(d => d.ToDTO())); } @@ -64,7 +70,8 @@ namespace ManagerService.Controllers { try { - OldDevice device = _deviceService.GetById(id); + //OldDevice device = _deviceService.GetById(id); + Device device = _myInfoMateDbContext.Devices.Include(d => d.Configuration).FirstOrDefault(i => i.Id == id); if (device == null) throw new KeyNotFoundException("This device was not found"); @@ -99,27 +106,33 @@ namespace ManagerService.Controllers if (newDevice == null) throw new ArgumentNullException("Device param is null"); - var configuration = _configurationService.GetById(newDevice.configurationId); + //var configuration = _configurationService.GetById(newDevice.configurationId); + var configuration = _myInfoMateDbContext.Configurations.FirstOrDefault(c => c.Id == newDevice.configurationId); if (configuration == null) throw new KeyNotFoundException("Configuration does not exist"); - OldDevice device = new OldDevice(); - if (_deviceService.IsExistIdentifier(newDevice.identifier)) + //OldDevice device = new OldDevice(); + Device device = new Device().FromDTO(newDevice); + device.Id = idService.GenerateHexId(); + + var deviceDB = _myInfoMateDbContext.Devices.FirstOrDefault(d => d.Identifier == newDevice.identifier); + + if (deviceDB != null) { // Update info - device = _deviceService.GetByIdentifier(newDevice.identifier); - device.DateUpdate = DateTime.Now; + device = deviceDB; + //device = _deviceService.GetByIdentifier(newDevice.identifier); + device.DateUpdate = DateTime.Now.ToUniversalTime(); } else { // Creation device.Identifier = newDevice.identifier; - device.DateCreation = DateTime.Now; + device.DateCreation = DateTime.Now.ToUniversalTime(); } device.InstanceId = newDevice.instanceId; device.Name = newDevice.name; - device.Configuration = configuration.Label; device.ConfigurationId = newDevice.configurationId; device.IpAddressETH = newDevice.ipAddressETH; device.IpAddressWLAN = newDevice.ipAddressWLAN; @@ -129,9 +142,16 @@ namespace ManagerService.Controllers device.BatteryLevel = newDevice.batteryLevel; device.LastBatteryLevel = newDevice.lastBatteryLevel; - OldDevice deviceCreated = _deviceService.IsExistIdentifier(newDevice.identifier) ? _deviceService.Update(device.Id, device) : _deviceService.Create(device); + //OldDevice deviceCreated = _deviceService.IsExistIdentifier(newDevice.identifier) ? _deviceService.Update(device.Id, device) : _deviceService.Create(device); + if (deviceDB != null) + { + _myInfoMateDbContext.Update(device); + } else { + _myInfoMateDbContext.Add(device); + } + _myInfoMateDbContext.SaveChanges(); - return new OkObjectResult(deviceCreated.ToDTO()); + return new OkObjectResult(device.ToDTO()); } catch (ArgumentNullException ex) { @@ -168,7 +188,8 @@ namespace ManagerService.Controllers if (updatedDevice == null) throw new ArgumentNullException("Device param is null"); - OldDevice device = _deviceService.GetById(updatedDevice.id); + //OldDevice device = _deviceService.GetById(updatedDevice.id); + Device device = _myInfoMateDbContext.Devices.FirstOrDefault(d => d.Id == updatedDevice.id); if (device == null) throw new KeyNotFoundException("Device does not exist"); @@ -185,9 +206,10 @@ namespace ManagerService.Controllers device.BatteryLevel = updatedDevice.batteryLevel; device.LastBatteryLevel = updatedDevice.lastBatteryLevel; - OldDevice deviceModified = _deviceService.Update(updatedDevice.id, device); + //OldDevice deviceModified = _deviceService.Update(updatedDevice.id, device); + _myInfoMateDbContext.SaveChanges(); - return new OkObjectResult(deviceModified.ToDTO()); + return new OkObjectResult(device.ToDTO()); } catch (ArgumentNullException ex) { @@ -219,12 +241,14 @@ namespace ManagerService.Controllers if (deviceIn == null) throw new ArgumentNullException("Device param is null"); - OldDevice device = _deviceService.GetById(deviceIn.id); + //OldDevice device = _deviceService.GetById(deviceIn.id); + Device device = _myInfoMateDbContext.Devices.FirstOrDefault(d => d.Id == deviceIn.id); if (device == null) throw new KeyNotFoundException("Device does not exist"); - var configuration = _configurationService.GetById(deviceIn.configurationId); + //var configuration = _configurationService.GetById(deviceIn.configurationId); + var configuration = _myInfoMateDbContext.Configurations.FirstOrDefault(c => c.Id == deviceIn.configurationId); if (configuration == null) throw new KeyNotFoundException("Configuration does not exist"); @@ -232,14 +256,15 @@ namespace ManagerService.Controllers // Todo add some verification ? device.Name = deviceIn.name; device.Connected = deviceIn.connected; - device.Configuration = configuration.Label; + //device.Configuration = configuration.Label; device.ConfigurationId = deviceIn.configurationId; - OldDevice deviceModified = _deviceService.Update(device.Id, device); + //OldDevice deviceModified = _deviceService.Update(device.Id, device); + _myInfoMateDbContext.SaveChanges(); MqttClientService.PublishMessage($"player/{device.Id}", JsonConvert.SerializeObject(new PlayerMessageDTO() { configChanged = true })); - return new OkObjectResult(deviceModified.ToDTO()); + return new OkObjectResult(device.ToDTO()); } catch (ArgumentNullException ex) { @@ -272,10 +297,14 @@ namespace ManagerService.Controllers if (id == null) throw new ArgumentNullException("Device param is null"); - if (!_deviceService.IsExist(id)) + Device device = _myInfoMateDbContext.Devices.FirstOrDefault(d => d.Id == id); + + if (device == null) throw new KeyNotFoundException("Device does not exist"); - _deviceService.Remove(id); + _myInfoMateDbContext.Remove(device); + _myInfoMateDbContext.SaveChanges(); + //_deviceService.Remove(id); return new ObjectResult("The device has been deleted") { StatusCode = 202 }; diff --git a/ManagerService/Controllers/InstanceController.cs b/ManagerService/Controllers/InstanceController.cs index 9e5c75c..794f25a 100644 --- a/ManagerService/Controllers/InstanceController.cs +++ b/ManagerService/Controllers/InstanceController.cs @@ -48,7 +48,6 @@ namespace ManagerService.Controllers //List instances = _instanceService.GetAll(); List instances = _myInfoMateDbContext.Instances.ToList(); - return new OkObjectResult(instances); } catch (Exception ex) diff --git a/ManagerService/DTOs/DeviceDTO.cs b/ManagerService/DTOs/DeviceDTO.cs index a8a15f2..475e34e 100644 --- a/ManagerService/DTOs/DeviceDTO.cs +++ b/ManagerService/DTOs/DeviceDTO.cs @@ -12,8 +12,8 @@ namespace ManagerService.DTOs public string configurationId { get; set; } public string configuration { get; set; } public bool connected{ get; set; } - public DateTime dateCreation{ get; set; } - public DateTime dateUpdate { get; set; } + public DateTime? dateCreation{ get; set; } + public DateTime? dateUpdate { get; set; } public string instanceId { get; set; } } diff --git a/ManagerService/Data/Device.cs b/ManagerService/Data/Device.cs index ceab8d9..60bfb8a 100644 --- a/ManagerService/Data/Device.cs +++ b/ManagerService/Data/Device.cs @@ -32,7 +32,7 @@ namespace ManagerService.Data public string IpAddressETH { get; set; } //[BsonElement("Configuration")] - public string Configuration { get; set; } + public Configuration Configuration { get; set; } //[BsonElement("ConfigurationId")] //[BsonRequired] @@ -79,7 +79,7 @@ namespace ManagerService.Data ipAddressWLAN = IpAddressWLAN, ipAddressETH = IpAddressETH, connected = Connected, - configuration = Configuration, + configuration = Configuration.Label, configurationId = ConfigurationId, dateUpdate = DateUpdate, dateCreation = DateCreation, @@ -97,7 +97,7 @@ namespace ManagerService.Data ipAddressWLAN = IpAddressWLAN, ipAddressETH = IpAddressETH, connected = Connected, - configuration = Configuration, + configuration = Configuration.Label, configurationId = ConfigurationId, connectionLevel = ConnectionLevel, lastConnectionLevel = LastConnectionLevel, @@ -108,5 +108,26 @@ namespace ManagerService.Data instanceId = InstanceId }; } + + public Device FromDTO(DeviceDetailDTO deviceDetailDTO) + { + return new Device() + { + Id = deviceDetailDTO.id, + Name = deviceDetailDTO.name, + DateCreation = deviceDetailDTO.dateCreation != null ? deviceDetailDTO.dateCreation.Value : DateTime.Now.ToUniversalTime(), + Identifier = deviceDetailDTO.identifier, + IpAddressWLAN = deviceDetailDTO.ipAddressWLAN, + IpAddressETH = deviceDetailDTO.ipAddressETH, + Connected = deviceDetailDTO.connected, + ConfigurationId = deviceDetailDTO.configurationId, + ConnectionLevel = deviceDetailDTO.connectionLevel, + LastConnectionLevel = deviceDetailDTO.lastConnectionLevel, + BatteryLevel = deviceDetailDTO.batteryLevel, + LastBatteryLevel = deviceDetailDTO.lastBatteryLevel, + DateUpdate = deviceDetailDTO.dateUpdate != null ? deviceDetailDTO.dateUpdate.Value : DateTime.Now.ToUniversalTime(), + InstanceId = deviceDetailDTO.instanceId + }; + } } } \ No newline at end of file diff --git a/ManagerService/Migrations/20250319105313_UpdateConfigurationLinkInDevice.Designer.cs b/ManagerService/Migrations/20250319105313_UpdateConfigurationLinkInDevice.Designer.cs new file mode 100644 index 0000000..9afb05c --- /dev/null +++ b/ManagerService/Migrations/20250319105313_UpdateConfigurationLinkInDevice.Designer.cs @@ -0,0 +1,835 @@ +// +using System; +using System.Collections.Generic; +using Manager.DTOs; +using ManagerService.DTOs; +using ManagerService.Data; +using ManagerService.Data.SubSection; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace ManagerService.Migrations +{ + [DbContext(typeof(MyInfoMateDbContext))] + [Migration("20250319105313_UpdateConfigurationLinkInDevice")] + partial class UpdateConfigurationLinkInDevice + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + 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("IsDate") + .HasColumnType("boolean"); + + b.Property("IsHour") + .HasColumnType("boolean"); + + b.Property("IsMobile") + .HasColumnType("boolean"); + + b.Property("IsOffline") + .HasColumnType("boolean"); + + b.Property("IsSectionImageBackground") + .HasColumnType("boolean"); + + b.Property("IsTablet") + .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("RoundedValue") + .HasColumnType("integer"); + + b.Property("ScreenPercentageSectionsMainPage") + .HasColumnType("integer"); + + b.Property("SecondaryColor") + .HasColumnType("text"); + + b.Property>("Title") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("WeatherCity") + .HasColumnType("text"); + + b.Property("WeatherResult") + .HasColumnType("text"); + + b.Property("WeatherUpdatedDate") + .HasColumnType("timestamp with time zone"); + + 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") + .IsRequired() + .HasColumnType("text"); + + b.Property("IpAddressWLAN") + .IsRequired() + .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("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(8) + .HasColumnType("character varying(8)"); + + b.Property("ImageId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ImageSource") + .IsRequired() + .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.HasKey("Id"); + + b.HasIndex("SectionMenuId"); + + b.ToTable("Sections"); + + b.HasDiscriminator().HasValue("Base"); + + b.UseTphMappingStrategy(); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.Categorie", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Icon") + .HasColumnType("text"); + + b.Property>("Label") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Order") + .HasColumnType("integer"); + + b.Property("ResourceId") + .HasColumnType("text"); + + b.Property("SectionMapId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ResourceId"); + + b.HasIndex("SectionMapId"); + + b.ToTable("Categorie"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.Content", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property>("Description") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Order") + .HasColumnType("integer"); + + b.Property("ResourceId") + .HasColumnType("text"); + + b.Property("SectionArticleId") + .HasColumnType("text"); + + b.Property("SectionSliderId") + .HasColumnType("text"); + + b.Property>("Title") + .IsRequired() + .HasColumnType("jsonb"); + + b.HasKey("Id"); + + b.HasIndex("ResourceId"); + + b.HasIndex("SectionArticleId"); + + b.HasIndex("SectionSliderId"); + + b.ToTable("Content"); + }); + + 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("ImageResourceId") + .HasColumnType("text"); + + b.Property("ImageUrl") + .HasColumnType("text"); + + b.Property("Latitude") + .HasColumnType("text"); + + b.Property("Longitude") + .HasColumnType("text"); + + b.Property>("Phone") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property>("Prices") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property>("Schedules") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("SectionMapId") + .HasColumnType("text"); + + b.Property>("Site") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property>("Title") + .IsRequired() + .HasColumnType("jsonb"); + + b.HasKey("Id"); + + b.HasIndex("SectionMapId"); + + b.ToTable("GeoPoint"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.OrderedTranslationAndResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Order") + .HasColumnType("integer"); + + b.Property("SectionPdfId") + .HasColumnType("text"); + + b.Property>("TranslationAndResources") + .IsRequired() + .HasColumnType("jsonb"); + + b.HasKey("Id"); + + b.HasIndex("SectionPdfId"); + + b.ToTable("OrderedTranslationAndResource"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.QuizQuestion", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property>("Label") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Order") + .HasColumnType("integer"); + + b.Property("ResourceId") + .HasColumnType("text"); + + b.Property>("Responses") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("SectionQuizId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ResourceId"); + + b.HasIndex("SectionQuizId"); + + b.ToTable("QuizQuestion"); + }); + + 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("mapProvider") + .HasColumnType("integer"); + + b.Property>("resourceIds") + .IsRequired() + .HasColumnType("jsonb"); + + b.HasDiscriminator().HasValue("Agenda"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionArticle", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.Property>("audioIds") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property>("content") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("isContentTop") + .HasColumnType("boolean"); + + b.Property("isReadAudioAuto") + .HasColumnType("boolean"); + + b.HasDiscriminator().HasValue("Article"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionMap", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.Property("CenterLatitude") + .HasColumnType("text"); + + b.Property("CenterLongitude") + .HasColumnType("text"); + + b.Property("MapProvider") + .HasColumnType("integer"); + + b.Property("MapType") + .HasColumnType("integer"); + + b.Property("MapTypeMapbox") + .HasColumnType("integer"); + + b.Property("ResourceId") + .HasColumnType("text"); + + b.Property("Zoom") + .HasColumnType("integer"); + + b.HasIndex("ResourceId"); + + 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.HasDiscriminator().HasValue("PDF"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionPuzzle", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.Property("Cols") + .HasColumnType("integer"); + + b.Property("ContentId") + .HasColumnType("text"); + + b.Property("ContentId1") + .HasColumnType("integer"); + + b.Property>("MessageDebut") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property>("MessageFin") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Rows") + .HasColumnType("integer"); + + b.HasIndex("ContentId1"); + + b.HasDiscriminator().HasValue("Puzzle"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionQuiz", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.Property>("BadLevel") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property>("GoodLevel") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property>("GreatLevel") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property>("MediumLevel") + .IsRequired() + .HasColumnType("jsonb"); + + b.HasDiscriminator().HasValue("Quiz"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionSlider", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.HasDiscriminator().HasValue("Slider"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionVideo", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.Property("Source") + .IsRequired() + .HasColumnType("text"); + + b.HasDiscriminator().HasValue("Video"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionWeather", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.Property("City") + .HasColumnType("text"); + + b.Property("Result") + .HasColumnType("text"); + + b.Property("UpdatedDate") + .HasColumnType("timestamp with time zone"); + + b.HasDiscriminator().HasValue("Weather"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionWeb", b => + { + b.HasBaseType("ManagerService.Data.Section"); + + b.Property("Source") + .IsRequired() + .HasColumnType("text"); + + b.ToTable("Sections", t => + { + t.Property("Source") + .HasColumnName("SectionWeb_Source"); + }); + + b.HasDiscriminator().HasValue("Web"); + }); + + 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("Sections") + .HasForeignKey("SectionMenuId"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.Categorie", b => + { + b.HasOne("ManagerService.Data.Resource", "Resource") + .WithMany() + .HasForeignKey("ResourceId"); + + b.HasOne("ManagerService.Data.SubSection.SectionMap", null) + .WithMany("Categories") + .HasForeignKey("SectionMapId"); + + b.Navigation("Resource"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.Content", b => + { + b.HasOne("ManagerService.Data.Resource", "Resource") + .WithMany() + .HasForeignKey("ResourceId"); + + b.HasOne("ManagerService.Data.SubSection.SectionArticle", null) + .WithMany("contents") + .HasForeignKey("SectionArticleId"); + + b.HasOne("ManagerService.Data.SubSection.SectionSlider", null) + .WithMany("Contents") + .HasForeignKey("SectionSliderId"); + + b.Navigation("Resource"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.GeoPoint", b => + { + b.HasOne("ManagerService.Data.SubSection.SectionMap", null) + .WithMany("Points") + .HasForeignKey("SectionMapId"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.OrderedTranslationAndResource", b => + { + b.HasOne("ManagerService.Data.SubSection.SectionPdf", null) + .WithMany("orderedTranslationAndResources") + .HasForeignKey("SectionPdfId"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.QuizQuestion", b => + { + b.HasOne("ManagerService.Data.Resource", "Resource") + .WithMany() + .HasForeignKey("ResourceId"); + + b.HasOne("ManagerService.Data.SubSection.SectionQuiz", null) + .WithMany("Questions") + .HasForeignKey("SectionQuizId"); + + b.Navigation("Resource"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionMap", b => + { + b.HasOne("ManagerService.Data.Resource", "Resource") + .WithMany() + .HasForeignKey("ResourceId"); + + b.Navigation("Resource"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionPuzzle", b => + { + b.HasOne("ManagerService.Data.SubSection.Content", "Content") + .WithMany() + .HasForeignKey("ContentId1"); + + b.Navigation("Content"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionArticle", b => + { + b.Navigation("contents"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionMap", b => + { + b.Navigation("Categories"); + + b.Navigation("Points"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionMenu", b => + { + b.Navigation("Sections"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionPdf", b => + { + b.Navigation("orderedTranslationAndResources"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionQuiz", b => + { + b.Navigation("Questions"); + }); + + modelBuilder.Entity("ManagerService.Data.SubSection.SectionSlider", b => + { + b.Navigation("Contents"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/ManagerService/Migrations/20250319105313_UpdateConfigurationLinkInDevice.cs b/ManagerService/Migrations/20250319105313_UpdateConfigurationLinkInDevice.cs new file mode 100644 index 0000000..f4c8dbe --- /dev/null +++ b/ManagerService/Migrations/20250319105313_UpdateConfigurationLinkInDevice.cs @@ -0,0 +1,49 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace ManagerService.Migrations +{ + /// + public partial class UpdateConfigurationLinkInDevice : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Configuration", + table: "Devices"); + + migrationBuilder.CreateIndex( + name: "IX_Devices_ConfigurationId", + table: "Devices", + column: "ConfigurationId"); + + migrationBuilder.AddForeignKey( + name: "FK_Devices_Configurations_ConfigurationId", + table: "Devices", + column: "ConfigurationId", + principalTable: "Configurations", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Devices_Configurations_ConfigurationId", + table: "Devices"); + + migrationBuilder.DropIndex( + name: "IX_Devices_ConfigurationId", + table: "Devices"); + + migrationBuilder.AddColumn( + name: "Configuration", + table: "Devices", + type: "text", + nullable: true); + } + } +} diff --git a/ManagerService/Migrations/MyInfoMateDbContextModelSnapshot.cs b/ManagerService/Migrations/MyInfoMateDbContextModelSnapshot.cs index 9cd95f9..7e8b869 100644 --- a/ManagerService/Migrations/MyInfoMateDbContextModelSnapshot.cs +++ b/ManagerService/Migrations/MyInfoMateDbContextModelSnapshot.cs @@ -113,9 +113,6 @@ namespace ManagerService.Migrations b.Property("BatteryLevel") .HasColumnType("text"); - b.Property("Configuration") - .HasColumnType("text"); - b.Property("ConfigurationId") .IsRequired() .HasColumnType("text"); @@ -158,6 +155,8 @@ namespace ManagerService.Migrations b.HasKey("Id"); + b.HasIndex("ConfigurationId"); + b.ToTable("Devices"); }); @@ -703,6 +702,17 @@ namespace ManagerService.Migrations b.HasDiscriminator().HasValue("Web"); }); + 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)