Type de ressource : Schéma Sanity (Document)
Fichier source :apps/studio/schemaTypes/amn.ts
Statut : Actif
Slice : 1 (Page dâaccueil)
Version : 1.0
1. Vue dâensemble (DOC)
Section titled â1. Vue dâensemble (DOC)â1.1. Description
Section titled â1.1. DescriptionâSchĂ©ma singleton pour la page dâaccueil/welcome. Contient un message personnalisĂ© et un statut dâactivation. UtilisĂ© pour afficher un message contextuel sur la page dâaccueil.
1.2. Objectif
Section titled â1.2. Objectifâ- ModĂ©liser un message singleton pour la page dâaccueil
- Permettre lâactivation/dĂ©sactivation du message sans le supprimer
- Faciliter la communication contextuelle avec les visiteurs
- Supporter les avertissements ou annonces temporaires
1.3. Cas dâusage
Section titled â1.3. Cas dâusageâ- Affichage dâun message de bienvenue personnalisĂ© sur la page dâaccueil
- Gestion de lâactivation/dĂ©sactivation du message
- Communication contextuelle avec les visiteurs
- Avertissements ou annonces temporaires
1.4. Relations avec dâautres schĂ©mas
Section titled â1.4. Relations avec dâautres schĂ©masâ| Relation | SchĂ©ma | Type | Description |
|---|---|---|---|
| Dépend de | Aucun | - | Schéma singleton indépendant |
| Utilisé par | Aucun | - | Schéma singleton non référencé |
2. Structure des données (DOC)
Section titled â2. Structure des donnĂ©es (DOC)â2.1. Champs principaux
Section titled â2.1. Champs principauxâ| Nom du champ | Type | Obligatoire | Description | Validation |
|---|---|---|---|---|
message |
string |
â | Message Ă afficher sur la page welcome | Rule.required() |
status |
string |
â | Statut dâactivation du message | Options: active, inactive |
2.2. Champs SEO
Section titled â2.2. Champs SEOâAucun champ SEO spĂ©cifique nâest implĂ©mentĂ© dans ce schĂ©ma.
2.3. Champs de contenu riche
Section titled â2.3. Champs de contenu richeâAucun champ de contenu riche nâest implĂ©mentĂ© dans ce schĂ©ma.
3. Contrats dâEntrĂ©e/Sortie (SPEC)
Section titled â3. Contrats dâEntrĂ©e/Sortie (SPEC)â3.1. Inputs (crĂ©ation/modification)
Section titled â3.1. Inputs (crĂ©ation/modification)â| Champ | Type | Validation | Description |
|---|---|---|---|
message |
string |
Rule.required() | Message Ă afficher |
status |
string |
Options: active, inactive |
Statut dâactivation |
3.2. Outputs (structure du document)
Section titled â3.2. Outputs (structure du document)â| Champ | Type | Description |
|---|---|---|
_id |
string |
ID unique du document |
_type |
string |
Type du document (amn) |
_createdAt |
string |
Date de création (généré par Sanity) |
_updatedAt |
string |
Date de derniÚre modification (généré par Sanity) |
message |
string |
Message Ă afficher |
status |
string |
Statut dâactivation (active ou inactive) |
3.3. Ătats du document
Section titled â3.3. Ătats du documentâ| Ătat | Description | Transition |
|---|---|---|
active |
Message activĂ© et affichĂ© | â inactive |
inactive |
Message dĂ©sactivĂ© et masquĂ© | â active |
4. Implémentation (CODE)
Section titled â4. ImplĂ©mentation (CODE)â4.1. Code du schĂ©ma
Section titled â4.1. Code du schĂ©maâimport { defineType, defineField } from 'sanity'
export default defineType({ name: 'amn', title: 'AMN', type: 'document', fields: [ defineField({ name: 'message', title: 'Message', type: 'string', description: 'Le message Ă afficher sur la page welcome', validation: (Rule) => Rule.required(), }), defineField({ name: 'status', title: 'Status', type: 'string', options: { list: [ { title: 'Active', value: 'active' }, { title: 'Inactive', value: 'inactive' }, ], layout: 'radio', }, initialValue: 'active', }), ], preview: { select: { title: 'message', subtitle: 'status', }, },})4.2. RequĂȘtes GROQ associĂ©es
Section titled â4.2. RequĂȘtes GROQ associĂ©esâRequĂȘte principale (message actif)
Section titled âRequĂȘte principale (message actif)â*[_type == "amn" && status == "active"][0] { _id, message, status}RequĂȘte dĂ©taillĂ©e (page unitaire)
Section titled âRequĂȘte dĂ©taillĂ©e (page unitaire)â*[_type == "amn" && _id == $id][0] { _id, message, status}4.3. Types TypeScript (gĂ©nĂ©ration automatique)
Section titled â4.3. Types TypeScript (gĂ©nĂ©ration automatique)âNon implĂ©mentĂ© - sanity-typegen nâest pas configurĂ© dans le projet actuel.
// Types à implémenter manuellement si nécessaireexport type Amn = { _id: string; _type: 'amn'; message: string; status: 'active' | 'inactive';};5. Tests attendus (TEST)
Section titled â5. Tests attendus (TEST)â5.1. Tests unitaires
Section titled â5.1. Tests unitairesâ| ScĂ©nario | Description | RĂ©sultat attendu |
|---|---|---|
| Validation du message | Créer un document sans message | Erreur de validation |
| Validation du status | Créer un document sans status | Valeur par défaut active appliquée |
| Changement de status | Passer de active Ă inactive |
Status changé avec succÚs |
| Message vide | Créer un document avec message vide | Erreur de validation (required) |
5.2. Tests dâintĂ©gration
Section titled â5.2. Tests dâintĂ©grationâ| ScĂ©nario | DĂ©pendances | Description | RĂ©sultat attendu |
|---|---|---|---|
| Consommation Astro | Route Astro + Sanity API | Récupération du message via getAmn() | Message récupéré si status == active |
| Preview Sanity | Sanity Studio + Preview API | Mode preview pour le schéma amn | Preview fonctionne avec le secret |
| Affichage index | Route index.astro | Afficher le message sur la page dâaccueil | Message affichĂ© si actif |
5.3. Tests E2E
Section titled â5.3. Tests E2Eâ| ScĂ©nario | Parcours utilisateur | Description | RĂ©sultat attendu |
|---|---|---|---|
| CrĂ©ation â Affichage | Studio â Build â Site | CrĂ©er un message avec status active |
Message visible sur la page dâaccueil |
| DĂ©sactivation â Masquage | Studio â Build â Site | Passer le status Ă inactive |
Message masquĂ© sur la page dâaccueil |
| Preview â VĂ©rification | Studio â Preview | VĂ©rifier le preview du message | Preview affiche le message correctement |
6. IntĂ©gration (INTĂG)
Section titled â6. IntĂ©gration (INTĂG)â6.1. IntĂ©gration avec les composants
Section titled â6.1. IntĂ©gration avec les composantsâ| Composant | Type | RĂŽle | MĂ©thode dâintĂ©gration |
|---|---|---|---|
| Fonction getAmn() | L2 | RĂ©cupĂ©ration du message | RequĂȘte GROQ avec filtre status == active |
| Route index.astro | L2 | Affichage du message | Appel de getAmn() et rendu conditionnel |
| Route welcome.astro | L2 | Affichage du message | Appel de getAmn() et rendu conditionnel |
| Preview Sanity | L1 | Génération URL preview | productionUrl configuré pour type amn |
6.2. Points dâattention
Section titled â6.2. Points dâattentionâ- Ce schĂ©ma est conçu comme un singleton (un seul document actif)
- La requĂȘte filtre sur
status == "active"pour nâafficher que le message actif - UtilisĂ© dans la fonction
getAmn()du fichierlib/sanity.ts - Le preview Sanity est configuré pour rediriger vers
/welcomepour ce type - Supporte le mode preview avec
isPreviewparameter dansgetAmn() - Le preview affiche le message comme titre et le statut comme sous-titre
6.3. Vérification de cohérence
Section titled â6.3. VĂ©rification de cohĂ©renceâ- Le schĂ©ma ne casse aucun schĂ©ma existant
- Les requĂȘtes GROQ retournent les donnĂ©es attendues
- Les types TypeScript sont générés correctement (à implémenter)
- Le preview fonctionne correctement
7. Sécurité
Section titled â7. SĂ©curitĂ©â7.1. MĂ©canismes de sĂ©curitĂ©
Section titled â7.1. MĂ©canismes de sĂ©curitĂ©â- â
Le preview est protégé par un secret (
SANITY_PREVIEW_SECRET) - â Les permissions Sanity sont configurĂ©es par rĂŽle
- â Le champ message est validĂ© (required)
7.2. Validation des entrées
Section titled â7.2. Validation des entrĂ©esâ- â Le champ message est obligatoire (Rule.required())
- â
Le champ status est limité aux options
activeetinactive - â
Le status a une valeur par défaut
active
8. Performance et limites
Section titled â8. Performance et limitesâ8.1. Limites Sanity
Section titled â8.1. Limites Sanityâ| Limite | Valeur | StratĂ©gie dâoptimisation |
|---|---|---|
| Taille du document | 16 MB | Ăviter les messages trop volumineux |
| Profondeur des références | 10 niveaux | Pas applicable (pas de références) |
8.2. Optimisations appliquées
Section titled â8.2. Optimisations appliquĂ©esâ- â Utilisation de projections GROQ pour rĂ©duire la taille des rĂ©ponses
- â Mise en cache CDN pour les requĂȘtes en production
- â Filtre sur status pour Ă©viter de rĂ©cupĂ©rer les messages inactifs
9. Débogage et troubleshooting
Section titled â9. DĂ©bogage et troubleshootingâ9.1. ProblĂšmes courants
Section titled â9.1. ProblĂšmes courantsâ| SymptĂŽme | Cause probable | Solution |
|---|---|---|
| Message non affiché | Status != active |
Vérifier le statut du document |
| Preview ne fonctionne pas | Secret non configuré | Vérifier SANITY_PREVIEW_SECRET |
| RequĂȘte vide | Aucun document avec status active |
Créer un document avec status active |
9.2. Commandes de debug
Section titled â9.2. Commandes de debugâ# Extraire le schĂ©ma depuis Sanitynpx sanity schema extract
# Générer les types TypeScript (à implémenter)npx sanity typegen generate10. Bonnes pratiques
Section titled â10. Bonnes pratiquesâ10.1. Architecture
Section titled â10.1. Architectureâ- â Toujours utiliser des types gĂ©nĂ©rĂ©s par sanity-typegen (Ă implĂ©menter)
- â
Centraliser les requĂȘtes GROQ dans
src/lib/queries.ts(Ă implĂ©menter) - â Documenter les champs et leurs validations
10.2. Code
Section titled â10.2. Codeâ- â
Utiliser
defineFieldpour chaque champ - â Configurer le preview pour une meilleure UX dans Studio
- â Utiliser des validations appropriĂ©es
10.3. Maintenance
Section titled â10.3. Maintenanceâ- â Mettre Ă jour ce fichier lors de toute modification du schĂ©ma
- â RĂ©gĂ©nĂ©rer les types aprĂšs modification (Ă implĂ©menter)
- â Tester les requĂȘtes GROQ aprĂšs modification
11. Ăvolutions et roadmap
Section titled â11. Ăvolutions et roadmapâ11.1. AmĂ©liorations planifiĂ©es
Section titled â11.1. AmĂ©liorations planifiĂ©esâ- ImplĂ©mentation de sanity-typegen pour la gĂ©nĂ©ration de types
- Ajout de champs SEO pour le message
- Support de plusieurs messages actifs (array au lieu de singleton)
- Centralisation des requĂȘtes GROQ dans un fichier dĂ©diĂ©
11.2. Limitations connues
Section titled â11.2. Limitations connuesâ- â Singleton (un seul document actif)
- â Pas de champs SEO spĂ©cifiques
- â Types TypeScript non gĂ©nĂ©rĂ©s automatiquement
- â Pas dâhistorique des messages prĂ©cĂ©dents
12. Ressources liées
Section titled â12. Ressources liĂ©esâ- Documentation Sanity : Schema Types
- DAT L1 : §4 - Modélisation et Schémas des Données
- Schémas dépendants : Aucun (schéma indépendant)
- Pages Astro consommatrices :
apps/web/src/pages/index.astro,apps/web/src/pages/welcome.astro - Utilitaires :
apps/web/src/lib/sanity.ts(fonction getAmn) - Configuration Preview :
apps/studio/sanity.config.ts(productionUrl pour type âamnâ)
13. Historique des modifications
Section titled â13. Historique des modificationsâ| Date | Version | Description | Auteur |
|---|---|---|---|
| 2026-09-15 | 1.0 | Création initiale | Devin |