using ManagerService.Data; using ManagerService.DTOs; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations; using System.Linq; namespace ManagerService.Data.SubSection { public class GuidedPath // Parcours { [Key] public string Id { get; set; } [Required] public string InstanceId { get; set; } [Required] [Column(TypeName = "jsonb")] public List Title { get; set; } [Column(TypeName = "jsonb")] public List Description { get; set; } // Lié à un événement (optionnel) public string? SectionEventId { get; set; } [ForeignKey("SectionEventId")] public SectionEvent? SectionEvent { get; set; } // Lié à une section parcours (FK principale) public string? SectionParcoursId { get; set; } [ForeignKey("SectionParcoursId")] public SectionParcours? SectionParcours { get; set; } // Type de parcours public bool IsLinear { get; set; } = true; // Avancer dans l’ordre - Ordre obligatoire public bool RequireSuccessToAdvance { get; set; } = false; // Par exemple: résoudre une énigme public bool HideNextStepsUntilComplete { get; set; } = false; // Étapes cachées tant que non terminées public int? EstimatedDurationMinutes { get; set; } public string? ImageResourceId { get; set; } [ForeignKey("ImageResourceId")] public Resource? ImageResource { get; set; } public int Order { get; set; } public bool IsGameMode { get; set; } = false; [Column(TypeName = "jsonb")] public List GameMessageDebut { get; set; } = new(); [Column(TypeName = "jsonb")] public List GameMessageFin { get; set; } = new(); public List Steps { get; set; } = new(); public GuidedPathDTO ToDTO() { return new GuidedPathDTO { id = Id, instanceId = InstanceId, title = Title, description = Description, sectionEventId = SectionEventId, sectionParcoursId = SectionParcoursId, isLinear = IsLinear, requireSuccessToAdvance = RequireSuccessToAdvance, hideNextStepsUntilComplete = HideNextStepsUntilComplete, estimatedDurationMinutes = EstimatedDurationMinutes, imageResourceId = ImageResourceId, imageUrl = ImageResource?.Url, order = Order, isGameMode = IsGameMode, gameMessageDebut = GameMessageDebut, gameMessageFin = GameMessageFin, steps = Steps?.OrderBy(s => s.Order).Select(s => s.ToDTO()).ToList() }; } public GuidedPath FromDTO(GuidedPathDTO dto) { if (dto == null) return null; InstanceId = dto.instanceId; Title = dto.title ?? new List(); Description = dto.description ?? new List(); SectionEventId = dto.sectionEventId; SectionParcoursId = dto.sectionParcoursId; IsLinear = dto.isLinear; RequireSuccessToAdvance = dto.requireSuccessToAdvance; HideNextStepsUntilComplete = dto.hideNextStepsUntilComplete; EstimatedDurationMinutes = dto.estimatedDurationMinutes; ImageResourceId = dto.imageResourceId; Order = dto.order.GetValueOrDefault(); IsGameMode = dto.isGameMode; GameMessageDebut = dto.gameMessageDebut ?? new List(); GameMessageFin = dto.gameMessageFin ?? new List(); //Steps = dto.Steps?.Select(s => s.FromDTO()).ToList() ?? new List() // Other method return this; } } }