Type de ressource : Schéma Sanity (Document)
Fichier source :apps/studio/schemaTypes/category.ts
Statut : Actif
Slice : 2 (Blog)
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 pour les catĂ©gories dâarticles de blog. Contient le titre et une description de la catĂ©gorie.
1.2. Objectif
Section titled â1.2. Objectifâ- ModĂ©liser les catĂ©gories pour organiser les articles de blog
- Permettre la classification des articles par thématique
- Faciliter la navigation et le filtrage des articles
- Supporter une description pour chaque catégorie
1.3. Cas dâusage
Section titled â1.3. Cas dâusageâ- Classification des articles de blog par thĂ©matique
- Navigation par catégorie sur le blog
- Filtrage des articles par catégorie
- Organisation du contenu du blog
1.4. Relations avec dâautres schĂ©mas
Section titled â1.4. Relations avec dâautres schĂ©masâ| Relation | SchĂ©ma | Type | Description |
|---|---|---|---|
| Utilisé par | post |
Référence | Les articles référencent les catégories via le champ categories |
| Dépend de | Aucun | - | Schéma indépendant |
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 |
|---|---|---|---|---|
title |
string |
â | Titre de la catĂ©gorie | Aucune |
description |
text |
â | Description de la catĂ©gorie | Aucune |
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 |
|---|---|---|---|
title |
string |
Aucune | Titre de la catégorie |
description |
text |
Aucune | Description de la catégorie (optionnel) |
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 (category) |
_createdAt |
string |
Date de création (généré par Sanity) |
_updatedAt |
string |
Date de derniÚre modification (généré par Sanity) |
title |
string |
Titre de la catégorie |
description |
string |
Description de la catégorie (optionnel) |
3.3. Ătats du document
Section titled â3.3. Ătats du documentâNon implĂ©mentĂ© - ce schĂ©ma nâa pas de champ status. Les documents sont toujours considĂ©rĂ©s comme publiĂ©s.
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: 'category', title: 'Category', type: 'document', fields: [ defineField({ name: 'title', title: 'Title', type: 'string', }), defineField({ name: 'description', title: 'Description', type: 'text', }), ],})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 == "category"] { _id, title, description} | order(title asc)RequĂȘte dĂ©taillĂ©e (page unitaire)
Section titled âRequĂȘte dĂ©taillĂ©e (page unitaire)â*[_type == "category" && _id == $categoryId][0] { _id, title, description}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 Category = { _id: string; _type: 'category'; title: string; description?: string;};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 |
| Description optionnelle | Créer un document sans description | Document créé avec succÚs |
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 des données via GROQ | Données récupérées et typées correctement |
| Référence depuis post | Schéma post + category | Créer un article avec cette catégorie | Référence fonctionnelle |
| Filtrage par catégorie | Route blog avec filtre | Filtrer les articles par catégorie | Articles filtrés correctement |
5.3. Tests E2E
Section titled â5.3. Tests E2Eâ| ScĂ©nario | Parcours utilisateur | Description | RĂ©sultat attendu |
|---|---|---|---|
| CrĂ©ation â Association | Sanity Studio â Article | CrĂ©er une catĂ©gorie et lâassocier Ă un article | CatĂ©gorie visible sur lâarticle |
| Modification â Propagation | Studio â Build â Site | Modifier la description de la catĂ©gorie | Modification visible sur tous les articles |
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 |
|---|---|---|---|
| Schéma post | L1 | Référence vers les catégories | Champ categories de type array de references |
| Route Astro (blog/index.astro) | L2 | Affichage des catĂ©gories | RequĂȘte GROQ avec jointure vers category |
6.2. Points dâattention
Section titled â6.2. Points dâattentionâ- Ce schĂ©ma nâa pas de slug (utilise lâ_id pour les rĂ©fĂ©rences)
- Ce schéma est référencé par le schéma
postvia un champ array - Les catĂ©gories peuvent ĂȘtre associĂ©es Ă plusieurs articles
- Un article peut avoir plusieurs catégories
- Pas de preview configuré (structure simple)
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)
- Les références depuis post fonctionnent 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Ă©â- â Les permissions Sanity sont configurĂ©es par rĂŽle
- â Les rĂ©fĂ©rences depuis post sont validĂ©es par Sanity
7.2. Validation des entrées
Section titled â7.2. Validation des entrĂ©esâ- â Le champ title est obligatoire
- â Les rĂ©fĂ©rences depuis post pointent vers des documents existants
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 description 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 (à implémenter) |
| CatĂ©gorie non affichĂ©e dans article | RĂ©fĂ©rence cassĂ©e | VĂ©rifier que la catĂ©gorie existe et nâest pas supprimĂ©e |
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 - â 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 dâun champ slug pour les URLs de catĂ©gories
- Ajout de champs SEO pour les catégories
- Centralisation des requĂȘtes GROQ dans un fichier dĂ©diĂ©
11.2. Limitations connues
Section titled â11.2. Limitations connuesâ- â Pas de support pour les drafts (pas de champ status)
- â Pas de slug pour les URLs
- â Pas de champs SEO spĂ©cifiques
- â Types TypeScript non gĂ©nĂ©rĂ©s automatiquement
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)
- Schémas référençant :
post - Pages Astro consommatrices :
apps/web/src/pages/blog/index.astro
13. Historique des modifications
Section titled â13. Historique des modificationsâ| Date | Version | Description | Auteur |
|---|---|---|---|
| 2026-09-15 | 1.0 | Création initiale | Devin |