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 static ManagerService.Data.SectionText; namespace ManagerService.Data.SubSection { /// /// Section quiz /// public class SectionQuiz : Section { [Required] public List QuizQuestions { get; set; } [Required] [Column(TypeName = "jsonb")] public List QuizBadLevel { get; set; } [Required] [Column(TypeName = "jsonb")] public List QuizMediumLevel { get; set; } [Required] [Column(TypeName = "jsonb")] public List QuizGoodLevel { get; set; } [Required] [Column(TypeName = "jsonb")] public List QuizGreatLevel { get; set; } // Les réponses ne sont pas indexées : le guide les réciterait au premier visiteur qui // demande. Les libellés de questions, eux, portent le sujet et rendent la section // trouvable. Les messages de niveau sont des félicitations, sans valeur informative. public override string GetEmbeddableText(string language) => JoinText(new[] { BaseText(language) } .Concat((QuizQuestions ?? new List()) .OrderBy(q => q.Order) .Select(q => Translate(q.Label, language))) .ToArray()); public override IEnumerable GetReferencedResourceIds(string language = null) => BaseResourceIds() .Concat(ResourceIds(QuizBadLevel, language)) .Concat(ResourceIds(QuizMediumLevel, language)) .Concat(ResourceIds(QuizGoodLevel, language)) .Concat(ResourceIds(QuizGreatLevel, language)) .Concat((QuizQuestions ?? new List()) .SelectMany(q => q.GetReferencedResourceIds(language))); public QuizDTO ToDTO() { return new QuizDTO() { id = Id, label = Label, title = Title.ToList(), description = Description.ToList(), 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, bad_level = QuizBadLevel.ToList(), medium_level = QuizMediumLevel.ToList(), good_level = QuizGoodLevel.ToList(), great_level = QuizGreatLevel.ToList() }; } } }