Skip to content

Author

Author

Documentation technique

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)

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

  • 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

  • Création de profils d’auteurs
  • Association aux articles de blog via le champ author du schéma post
  • Affichage des informations de l’auteur sur les pages d’articles
  • Gestion des biographies d’auteurs

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)

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

Aucun champ SEO spécifique n’est implémenté dans ce schéma.

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)

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)1/2

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)

3.2. Outputs (structure du document)2/2

Champ Type Description
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

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)

4.1. Code du schéma1/2

4.1. Code du schéma2/2

apps/studio/schemaTypes/author.ts
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

Requête principale (listing)

*[_type == "author"] {
_id,
name,
slug,
image
} | order(name asc)

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)

Non implémenté - sanity-typegen n’est pas configuré dans le projet actuel.

// Types à implémenter manuellement si nécessaire
export type Author = {
_id: string;
_type: 'author';
name: string;
slug: { _type: 'slug'; current: string };
image?: ImageAsset;
bio?: PortableTextBlock[];
};

5. Tests attendus (TEST)

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

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

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)

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

  • Le champ bio utilise 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

  • 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é

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

  • ✅ 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

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

  • ✅ 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

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

Terminal window
# Extraire le schéma depuis Sanity
npx sanity schema extract
# Générer les types TypeScript (à implémenter)
npx sanity typegen generate

10. Bonnes pratiques

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

  • ✅ Utiliser defineField pour chaque champ
  • ✅ Configurer le preview pour une meilleure UX dans Studio
  • ✅ Utiliser des validations appropriées

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

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

  • ❌ 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

  • 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

Date Version Description Auteur
2026-09-15 1.0 Création initiale Devin
Switch to normal mode

Contents