Skip to content

Type de ressource : Schéma Sanity (Document)
Fichier source : apps/studio/schemaTypes/amn.ts
Statut : Actif
Slice : 1 (Page d’accueil)
Version : 1.0


SchĂ©ma singleton pour la page d’accueil/welcome. Contient un message personnalisĂ© et un statut d’activation. UtilisĂ© pour afficher un message contextuel sur la page d’accueil.

  • ModĂ©liser un message singleton pour la page d’accueil
  • Permettre l’activation/dĂ©sactivation du message sans le supprimer
  • Faciliter la communication contextuelle avec les visiteurs
  • Supporter les avertissements ou annonces temporaires
  • Affichage d’un message de bienvenue personnalisĂ© sur la page d’accueil
  • Gestion de l’activation/dĂ©sactivation du message
  • Communication contextuelle avec les visiteurs
  • Avertissements ou annonces temporaires
Relation Schéma Type Description
Dépend de Aucun - Schéma singleton indépendant
Utilisé par Aucun - Schéma singleton non référencé

Nom du champ Type Obligatoire Description Validation
message string ✅ Message à afficher sur la page welcome Rule.required()
status string ✅ Statut d’activation du message Options: active, inactive

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
message string Rule.required() Message Ă  afficher
status string Options: active, inactive Statut d’activation
Champ Type Description
_id string ID unique du document
_type string Type du document (amn)
_createdAt string Date de création (généré par Sanity)
_updatedAt string Date de derniÚre modification (généré par Sanity)
message string Message Ă  afficher
status string Statut d’activation (active ou inactive)
État Description Transition
active Message activĂ© et affichĂ© → inactive
inactive Message dĂ©sactivĂ© et masquĂ© → active

apps/studio/schemaTypes/amn.ts
import { defineType, defineField } from 'sanity'
export default defineType({
name: 'amn',
title: 'AMN',
type: 'document',
fields: [
defineField({
name: 'message',
title: 'Message',
type: 'string',
description: 'Le message Ă  afficher sur la page welcome',
validation: (Rule) => Rule.required(),
}),
defineField({
name: 'status',
title: 'Status',
type: 'string',
options: {
list: [
{ title: 'Active', value: 'active' },
{ title: 'Inactive', value: 'inactive' },
],
layout: 'radio',
},
initialValue: 'active',
}),
],
preview: {
select: {
title: 'message',
subtitle: 'status',
},
},
})
*[_type == "amn" && status == "active"][0] {
_id,
message,
status
}
*[_type == "amn" && _id == $id][0] {
_id,
message,
status
}

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

// Types à implémenter manuellement si nécessaire
export type Amn = {
_id: string;
_type: 'amn';
message: string;
status: 'active' | 'inactive';
};

Scénario Description Résultat attendu
Validation du message Créer un document sans message Erreur de validation
Validation du status Créer un document sans status Valeur par défaut active appliquée
Changement de status Passer de active à inactive Status changé avec succÚs
Message vide Créer un document avec message vide Erreur de validation (required)
Scénario Dépendances Description Résultat attendu
Consommation Astro Route Astro + Sanity API Récupération du message via getAmn() Message récupéré si status == active
Preview Sanity Sanity Studio + Preview API Mode preview pour le schéma amn Preview fonctionne avec le secret
Affichage index Route index.astro Afficher le message sur la page d’accueil Message affichĂ© si actif
Scénario Parcours utilisateur Description Résultat attendu
CrĂ©ation → Affichage Studio → Build → Site CrĂ©er un message avec status active Message visible sur la page d’accueil
DĂ©sactivation → Masquage Studio → Build → Site Passer le status Ă  inactive Message masquĂ© sur la page d’accueil
Preview → VĂ©rification Studio → Preview VĂ©rifier le preview du message Preview affiche le message correctement

Composant Type RĂŽle MĂ©thode d’intĂ©gration
Fonction getAmn() L2 RĂ©cupĂ©ration du message RequĂȘte GROQ avec filtre status == active
Route index.astro L2 Affichage du message Appel de getAmn() et rendu conditionnel
Route welcome.astro L2 Affichage du message Appel de getAmn() et rendu conditionnel
Preview Sanity L1 Génération URL preview productionUrl configuré pour type amn
  • Ce schĂ©ma est conçu comme un singleton (un seul document actif)
  • La requĂȘte filtre sur status == "active" pour n’afficher que le message actif
  • UtilisĂ© dans la fonction getAmn() du fichier lib/sanity.ts
  • Le preview Sanity est configurĂ© pour rediriger vers /welcome pour ce type
  • Supporte le mode preview avec isPreview parameter dans getAmn()
  • Le preview affiche le message comme titre et le statut comme sous-titre
  • 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)
  • Le preview fonctionne correctement

  • ✅ Le preview est protĂ©gĂ© par un secret (SANITY_PREVIEW_SECRET)
  • ✅ Les permissions Sanity sont configurĂ©es par rĂŽle
  • ✅ Le champ message est validĂ© (required)
  • ✅ Le champ message est obligatoire (Rule.required())
  • ✅ Le champ status est limitĂ© aux options active et inactive
  • ✅ Le status a une valeur par dĂ©faut active

Limite Valeur StratĂ©gie d’optimisation
Taille du document 16 MB Éviter les messages trop volumineux
Profondeur des références 10 niveaux Pas applicable (pas de références)
  • ✅ Utilisation de projections GROQ pour rĂ©duire la taille des rĂ©ponses
  • ✅ Mise en cache CDN pour les requĂȘtes en production
  • ✅ Filtre sur status pour Ă©viter de rĂ©cupĂ©rer les messages inactifs

SymptĂŽme Cause probable Solution
Message non affiché Status != active Vérifier le statut du document
Preview ne fonctionne pas Secret non configuré Vérifier SANITY_PREVIEW_SECRET
RequĂȘte vide Aucun document avec status active CrĂ©er un document avec status active
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
  • ✅ Configurer le preview pour une meilleure UX dans Studio
  • ✅ 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 de champs SEO pour le message
  • Support de plusieurs messages actifs (array au lieu de singleton)
  • Centralisation des requĂȘtes GROQ dans un fichier dĂ©diĂ©
  • ❌ Singleton (un seul document actif)
  • ❌ Pas de champs SEO spĂ©cifiques
  • ❌ Types TypeScript non gĂ©nĂ©rĂ©s automatiquement
  • ❌ Pas d’historique des messages prĂ©cĂ©dents

  • Documentation Sanity : Schema Types
  • DAT L1 : §4 - ModĂ©lisation et SchĂ©mas des DonnĂ©es
  • SchĂ©mas dĂ©pendants : Aucun (schĂ©ma indĂ©pendant)
  • Pages Astro consommatrices : apps/web/src/pages/index.astro, apps/web/src/pages/welcome.astro
  • Utilitaires : apps/web/src/lib/sanity.ts (fonction getAmn)
  • Configuration Preview : apps/studio/sanity.config.ts (productionUrl pour type ‘amn’)

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

Last updated: