using System; using System.Collections.Generic; namespace ManagerService.DTOs { /// /// Le contenu complet d'une configuration, en un seul appel — le contrat public /// entre le back-office et tout ce qui affiche une visite. /// /// Trois consommateurs, et c'est ce qui en fait un contrat plutôt qu'un DTO interne : /// la visite hors ligne de mymuseum-visitapp, l'import/export du back-office, /// et l'app Unity du canal VR — qui n'a pas de client généré et lit ce JSON tel quel. /// /// Règles de compatibilité, à tenir tant que le numéro ne change pas : /// /// on ajoute des champs, on n'en retire ni n'en renomme aucun ; /// les valeurs d'enum s'ajoutent en fin — elles sont persistées en int /// et un client plus ancien doit pouvoir ignorer ce qu'il ne connaît pas ; /// un champ absent vaut « pas de valeur », jamais « valeur par défaut » /// différente de celle du client. /// /// /// Documentation complète : DOCS/export-contract.md. /// public class ExportConfigurationDTO : ConfigurationDTO { /// /// Version du format, pas du contenu. Un client qui lit un numéro plus /// grand que celui qu'il connaît doit le dire à l'utilisateur plutôt que de /// deviner — c'est exactement ce que fait ManifestReader côté casque. /// public int exportVersion { get; set; } = CurrentExportVersion; /// Quand ce JSON a été produit. Sert au diagnostic d'un cache périmé. public DateTime generatedAt { get; set; } public List sections { get; set; } public List resources { get; set; } /// /// 1 — version initiale, figée le 2026-09-12. L'export existait avant, sans /// numéro : un client qui n'en trouve pas lit un export antérieur à cette date, et /// doit le traiter comme la version 1. /// public const int CurrentExportVersion = 1; } }