Skip to content

Type de ressource : Schéma Sanity (Document)
Fichier source : apps/studio/schemaTypes/category.ts
Statut : Actif
Slice : 2 (Blog)
Version : 1.0


SchĂ©ma pour les catĂ©gories d’articles de blog. Contient le titre et une description de la catĂ©gorie.

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

Nom du champ Type Obligatoire Description Validation
title string ✅ Titre de la catĂ©gorie Aucune
description text ❌ Description de la catĂ©gorie Aucune

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

Aucun champ de contenu riche n’est implĂ©mentĂ© dans ce schĂ©ma.


Champ Type Validation Description
title string Aucune Titre de la catégorie
description text Aucune Description de la catégorie (optionnel)
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)

Non implĂ©mentĂ© - ce schĂ©ma n’a pas de champ status. Les documents sont toujours considĂ©rĂ©s comme publiĂ©s.


apps/studio/schemaTypes/category.ts
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',
}),
],
})
*[_type == "category"] {
_id,
title,
description
} | order(title asc)
*[_type == "category" && _id == $categoryId][0] {
_id,
title,
description
}

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

// Types à implémenter manuellement si nécessaire
export type Category = {
_id: string;
_type: 'category';
title: string;
description?: string;
};

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

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
  • 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 post via 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)
  • 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

  • ✅ Les permissions Sanity sont configurĂ©es par rĂŽle
  • ✅ Les rĂ©fĂ©rences depuis post sont validĂ©es par Sanity
  • ✅ Le champ title est obligatoire
  • ✅ Les rĂ©fĂ©rences depuis post pointent vers des documents existants

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
  • ✅ Utilisation de projections GROQ pour rĂ©duire la taille des rĂ©ponses
  • ✅ Mise en cache CDN pour les requĂȘtes en production

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
Terminal window
# Extraire le schéma depuis Sanity
npx sanity schema extract
# Générer les types TypeScript (à implémenter)
npx sanity typegen generate

  • ✅ 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
  • ✅ Utiliser defineField pour chaque champ
  • ✅ Utiliser des validations appropriĂ©es
  • ✅ 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

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

  • 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

Date Version Description Auteur
2026-09-15 1.0 Création initiale Devin
Edit page

Last updated: