Type de ressource : Schéma Sanity (Document)
Fichier source :apps/studio/schemaTypes/author.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 profils dâauteurs dâarticles de blog. Contient le nom, le slug, lâimage de profil et une biographie en Portable Text simplifiĂ©.
1.2. Objectif
Section titled â1.2. Objectifâ- ModĂ©liser les profils dâauteurs avec leurs informations de base
- Permettre lâassociation dâauteurs aux articles de blog
- Supporter une biographie simple pour présenter les auteurs
- Faciliter lâaffichage des informations dâauteur sur les articles
1.3. Cas dâusage
Section titled â1.3. Cas dâusageâ- CrĂ©ation de profils dâauteurs
- Association aux articles de blog via le champ
authordu schĂ©mapost - Affichage des informations de lâauteur sur les pages dâarticles
- Gestion des biographies dâauteurs
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 auteurs via le champ author |
| 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 |
|---|---|---|---|---|
name |
string |
â | Nom complet de lâauteur | Aucune |
slug |
slug |
â | Slug URL gĂ©nĂ©rĂ© depuis le nom | source: 'name', maxLength: 96 |
image |
image |
â | Photo de profil de lâauteur | Hotspot activĂ© |
bio |
array |
â | Biographie de lâauteur | Portable Text simplifiĂ© |
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â| Nom du champ | Type | Description |
|---|---|---|
bio |
array |
Biographie en Portable Text simplifié (style normal uniquement, pas de listes) |
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 |
|---|---|---|---|
name |
string |
Aucune | Nom complet de lâauteur |
slug |
slug |
source: 'name', maxLength: 96 |
Généré automatiquement depuis le nom |
image |
image |
Aucune | Photo de profil (optionnel) |
bio |
array |
Aucune | Biographie en Portable Text simplifié (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 (author) |
_createdAt |
string |
Date de création (généré par Sanity) |
_updatedAt |
string |
Date de derniÚre modification (généré par Sanity) |
name |
string |
Nom complet de lâauteur |
slug |
{ _type: 'slug'; current: string } |
Slug URL |
image |
ImageAsset |
Photo de profil (optionnel) |
bio |
PortableTextBlock[] |
Biographie (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: 'author', title: 'Author', type: 'document', fields: [ defineField({ name: 'name', title: 'Name', type: 'string', }), defineField({ name: 'slug', title: 'Slug', type: 'slug', options: { source: 'name', maxLength: 96, }, }), defineField({ name: 'image', title: 'Image', type: 'image', options: { hotspot: true, }, }), defineField({ name: 'bio', title: 'Bio', type: 'array', of: [ { title: 'Block', type: 'block', styles: [{title: 'Normal', value: 'normal'}], lists: [], }, ], }), ], preview: { select: { title: 'name', media: 'image', }, },})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 == "author"] { _id, name, slug, image} | order(name asc)RequĂȘte dĂ©taillĂ©e (page unitaire)
Section titled âRequĂȘte dĂ©taillĂ©e (page unitaire)â*[_type == "author" && slug.current == $slug][0] { _id, name, slug, image, bio}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 Author = { _id: string; _type: 'author'; name: string; slug: { _type: 'slug'; current: string }; image?: ImageAsset; bio?: PortableTextBlock[];};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 nom | Créer un document sans nom | Erreur de validation |
| Génération du slug | Créer un document avec nom | Slug généré automatiquement depuis le nom |
| Limite du slug | Créer un nom de plus de 96 caractÚres | Slug tronqué à 96 caractÚres |
| Bio simplifiée | Créer une bio avec listes | Les listes ne sont pas disponibles (style normal uniquement) |
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 + author | Créer un article avec cet auteur | Référence fonctionnelle |
| Affichage dans article | Route blog/[âŠslug].astro | Afficher les infos de lâauteur | Nom et image affichĂ©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 un auteur et lâassocier Ă un article | Auteur visible sur lâarticle |
| Modification â Propagation | Studio â Build â Site | Modifier la bio de lâauteur | 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 lâauteur | Champ author de type reference |
| Route Astro (blog/[âŠslug].astro) | L2 | Affichage de lâauteur | RequĂȘte GROQ avec jointure vers author |
| Layout (BlogPost.astro) | L2 | Rendu des infos auteur | Props passées depuis la route |
6.2. Points dâattention
Section titled â6.2. Points dâattentionâ- Le champ
bioutilise un Portable Text simplifiĂ© (style normal uniquement, pas de listes) - Ce schĂ©ma nâa pas de slug dans lâURL actuelle (utilise lâ_id pour les rĂ©fĂ©rences)
- Lâimage est optionnelle mais recommandĂ©e pour lâaffichage dans les articles
- Les auteurs peuvent ĂȘtre associĂ©s Ă plusieurs articles
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 images sont stockĂ©es dans Sanity Asset API avec accĂšs contrĂŽlĂ©
- â 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 name est obligatoire
- â Les slugs sont uniques et valides
- â 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 bio 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
- â Portable Text simplifiĂ© pour rĂ©duire la complexitĂ©
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) |
| Auteur non affichĂ© dans article | RĂ©fĂ©rence cassĂ©e | VĂ©rifier que lâauteur existe et nâest pas supprimĂ© |
| Bio avec listes ne fonctionne pas | Limitation du schéma simplifié | Utiliser uniquement le style normal |
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 les profils dâauteurs
- Support de la bio avec Portable Text complet (listes, styles)
- 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 champs SEO spĂ©cifiques
- â Types TypeScript non gĂ©nĂ©rĂ©s automatiquement
- â Bio simplifiĂ©e (pas de listes ni styles avancĂ©s)
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/[...slug].astro - Composants dâaffichage :
apps/web/src/layouts/BlogPost.astro
13. Historique des modifications
Section titled â13. Historique des modificationsâ| Date | Version | Description | Auteur |
|---|---|---|---|
| 2026-09-15 | 1.0 | Création initiale | Devin |