Seeds
Une seed est un fichier du dossier seeds/ d'une Frond, exécuté au démarrage après la
migration. Elle reçoit resolve et appelle les mêmes façades que l'application.
// fronds/blog/seeds/Post.seed.ts
type Facade = Record<string, (inv?: Record<string, unknown>) => Promise<any>>;
export default async (resolve: <T>(name: string) => T) => {
const posts = resolve<Facade>('post');
// Ici, la seed ne s'exécute que si la base est vide.
const existing = await posts.list();
if (existing.length > 0) return [];
const created = await posts.create({
params: {}, query: {},
body: { slug: 'hello', title: 'Hello', body: '…' },
state: { user: { id: 'seed-author' } }, // identité utilisée par la seed
});
// La transition utilise l'opération publish.
await posts.publish({ params: { id: created.id }, query: {}, body: undefined,
state: { user: { id: 'seed-author' } } });
return []; // rien à laisser à la boucle de boot
};
Le contrat
- Export :
default async (resolve) => rows[]. Retourner[]signifie « tout est fait ici ». resolve('<entité>')rend la façade de l'entité — chaque opération prend une invocation complète{ params, query, body, state }.stateest défini par la seed : comme elle s'exécute côté serveur, elle peut fournir l'identité attendue par les opérations. Lepublishci-dessus effectue donc toujours sa vérification d'auteur.- L'idempotence est la responsabilité de la seed ; le garde-fou est un
list()+ retour anticipé.
Passer par la façade applique aux seeds la validation, les règles de cycle de vie et les erreurs utilisées par les appels de l'application.
Suite : Queries & commands — le couple client.