using Manager.DTOs; using ManagerService.DTOs; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using Microsoft.EntityFrameworkCore; namespace ManagerService.Data { /// /// Section Information /// [Index(nameof(InstanceId))] public abstract class Section : IAuditableEntity { [Key] [Required] public string Id { get; set; } [Required] public string Label { get; set; } // Use in manager [Required] [Column(TypeName = "jsonb")] public List Title { get; set; } [Column(TypeName = "jsonb")] public List Description { get; set; } public int Order { get; set; } [Required] public string ConfigurationId { get; set; } // Parent id public string ImageId { get; set; } public string ImageSource { get; set; } [Required] public SectionType Type { get; set; } [Required] public bool IsSubSection { get; set; } public string ParentId { get; set; } // only if it's an subsection public DateTime DateCreation { get; set; } public DateTime DateUpdate { get; set; } [Required] public string InstanceId { get; set; } public bool IsBeacon { get; set; } public int? BeaconId { get; set; } public string Latitude { get; set; } public string Longitude { get; set; } public int? MeterZoneGPS { get; set; } public bool IsActive { get; set; } = true; /// /// Texte de la section dans une langue, tel qu'il sera indexé pour le guide IA. /// Rend une chaîne vide quand la section ne porte rien d'exploitable dans cette langue. /// /// /// Abstraite, et pas virtuelle avec un comportement par défaut : la collecte des /// ressources vivait dans un switch centralisé, un nouveau sous-type n'obligeait /// personne à le mettre à jour, et il est devenu faux en silence. Ici le compilateur /// réclame l'implémentation. /// public abstract string GetEmbeddableText(string language); /// /// Ids des ressources référencées par la section, pour l'export hors ligne. /// null rend toutes les langues. /// public abstract IEnumerable GetReferencedResourceIds(string language = null); /// Titre et description, communs à tous les sous-types. protected string BaseText(string language) => SectionText.JoinText(SectionText.Translate(Title, language), SectionText.Translate(Description, language)); /// Vignette de la section, commune à tous les sous-types. protected IEnumerable BaseResourceIds() => SectionText.ResourceId(ImageId); public SectionDTO ToDTO() { return new SectionDTO() { id = Id, label = Label, title = Title, description = Description, isActive = IsActive, order = Order, type = Type, imageId = ImageId, imageSource = ImageSource, configurationId = ConfigurationId, isSubSection = IsSubSection, parentId = ParentId, dateCreation = DateCreation, instanceId = InstanceId, isBeacon = IsBeacon, beaconId = BeaconId, latitude = Latitude, longitude = Longitude, meterZoneGPS = MeterZoneGPS, }; } } }