[Nom du Schéma]
Type de ressource : Schéma Sanity (Document / Object / Block)
Fichier source :sanity-studio/schemas/[filename].ts
Statut : [Actif / Déprécié / En développement]
Slice : [Numéro de la tranche verticale]
Version : 1.0
1. Vue d’ensemble (DOC)
Section titled “1. Vue d’ensemble (DOC)”1.1. Description
Section titled “1.1. Description”[Description concise du rôle de ce schéma dans l’architecture du site]
1.2. Objectif
Section titled “1.2. Objectif”- [Objectif principal : ce que le schéma permet de modéliser]
- [Bénéfice pour l’architecture ou les utilisateurs]
1.3. Cas d’usage
Section titled “1.3. Cas d’usage”- [Cas d’usage principal]
- [Cas d’usage secondaire si applicable]
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 | [Nom] | [Référence/Composition] | [Description] |
| Utilisé par | [Nom] | [Référence] | [Description] |
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 |
|---|---|---|---|---|
fieldName |
string |
✅ | [Description] | [Règles de validation] |
slug |
slug |
✅ | [Description] | source: 'title' |
status |
string |
✅ | [Description] | Options: draft, published, archived |
2.2. Champs SEO (si applicable)
Section titled “2.2. Champs SEO (si applicable)”| Nom du champ | Type | Obligatoire | Description | Fallback |
|---|---|---|---|---|
seo.metaTitle |
string |
❌ | Meta title pour SEO | title |
seo.metaDescription |
text |
❌ | Meta description | excerpt |
seo.ogImage |
image |
❌ | Image Open Graph | mainImage |
2.3. Champs de contenu riche (si applicable)
Section titled “2.3. Champs de contenu riche (si applicable)”| Nom du champ | Type | Description |
|---|---|---|
body |
array |
Contenu Portable Text (blocs + spans) |
pageBuilder |
array |
Liste de blocs PageBuilder (hero, features, etc.) |
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 |
|---|---|---|---|
title |
string |
Rule.required() | Titre obligatoire |
slug |
slug |
source: 'title' |
Généré automatiquement depuis le titre |
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 |
_createdAt |
string |
Date de création |
_updatedAt |
string |
Date de dernière modification |
3.3. États du document
Section titled “3.3. États du document”| État | Description | Transition |
|---|---|---|
draft |
Document en brouillon | → published |
published |
Document publié | → archived |
archived |
Document archivé | → published |
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 { defineField, defineType } from 'sanity';
export default defineType({ name: '[schemaName]', title: '[Titre lisible]', type: 'document', // ou 'object', 'block' fields: [ defineField({ name: 'title', title: 'Titre', type: 'string', validation: (Rule) => Rule.required(), }), defineField({ name: 'slug', title: 'Slug', type: 'slug', options: { source: 'title' }, validation: (Rule) => Rule.required(), }), // ... autres champs ], preview: { select: { title: 'title', subtitle: 'publishedAt', media: 'mainImage', }, },});4.2. Requêtes GROQ associées
Section titled “4.2. Requêtes GROQ associées”Requête principale (listing)
Section titled “Requête principale (listing)”*[_type == "[schemaName]" && status == "published"] { _id, title, slug, publishedAt, mainImage, excerpt} | order(publishedAt desc)Requête détaillée (page unitaire)
Section titled “Requête détaillée (page unitaire)”*[_type == "[schemaName]" && slug.current == $slug][0] { ..., author->{name, image}, categories[]->{title, slug}}4.3. Types TypeScript (génération automatique)
Section titled “4.3. Types TypeScript (génération automatique)”// src/types/sanity.d.ts (généré via sanity-typegen)export type [SchemaName] = { _id: string; _type: '[schemaName]'; title: string; slug: { _type: 'slug'; current: string }; publishedAt: string; status: 'draft' | 'published' | 'archived'; mainImage?: ImageAsset; excerpt?: string; seo?: SeoObject;};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 titre | Créer un document sans titre | Erreur de validation |
| Génération du slug | Créer un document avec titre | Slug généré automatiquement |
| Publication | Changer le statut de draft à published | Document passe en published |
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 | Récupération des données via GROQ | Données typées correctement |
| Indexation Pagefind | Build Astro | Indexation du contenu généré | Contenu indexé et searchable |
5.3. Tests E2E
Section titled “5.3. Tests E2E”| Scénario | Parcours utilisateur | Description | Résultat attendu |
|---|---|---|---|
| Création → Publication | Sanity Studio → Build → Site | Créer et publier un document | Document visible sur le site |
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 |
|---|---|---|---|
| Route Astro | L2 | Rendu du contenu | Requête GROQ via getSanityClient() |
| Pagefind | L2 | Indexation | Indexation du HTML généré |
| Webhook | L3 | Déclenchement rebuild | Événement publish |
6.2. Points d’attention
Section titled “6.2. Points d’attention”- Le schéma doit être compatible avec sanity-typegen
- Les requêtes GROQ doivent utiliser les projections explicites
- Le statut
publisheddoit être filtré en production
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
- Les tests E2E passent
7. Sécurité
Section titled “7. Sécurité”7.1. Mécanismes de sécurité
Section titled “7.1. Mécanismes de sécurité”- ✅ Les documents draft ne sont accessibles qu’en mode preview
- ✅ Les permissions Sanity sont configurées par rôle
- ✅ Les tokens API ont les permissions minimales nécessaires
7.2. Validation des entrées
Section titled “7.2. Validation des entrées”- ✅ Les champs obligatoires sont validés côté Sanity
- ✅ Les slugs sont uniques et valides
- ✅ Les statuts suivent le cycle draft → published → archived
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 champs trop volumineux |
| Profondeur des références | 10 niveaux | Limiter les références imbriquées |
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
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 |
|---|---|---|
| Schéma non visible dans Studio | Cache du navigateur | Vider le cache et rafraîchir |
| Types TypeScript incorrects | Schéma modifié sans régénération | Exécuter sanity typegen generate |
| Requête GROQ vide | Filtre incorrect | Vérifier la syntaxe GROQ |
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 TypeScriptnpx 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
- ✅ Centraliser les requêtes GROQ dans
src/lib/queries.ts - ✅ 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
- ✅ 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”- [Évolution 1]
- [Évolution 2]
11.2. Limitations connues
Section titled “11.2. Limitations connues”- ❌ [Limitation 1]
- ❌ [Limitation 2]
12. Ressources liées
Section titled “12. Ressources liées”- Documentation Sanity : [Lien vers docs officielles]
- DAT L1 : §4 - Modélisation et Schémas des Données
- Schémas dépendants : [Liste]
- Pages Astro consommatrices : [Liste des fichiers .astro]
13. Historique des modifications
Section titled “13. Historique des modifications”| Date | Version | Description | Auteur |
|---|---|---|---|
| YYYY-MM-DD | 1.0 | Création initiale | [Nom] |