Flux de génération d’image à cinq crédits
Suivez une tâche payante asynchrone à travers auth, droits, crédits idempotents, worker durable, stockage privé et compensation.
Vérifié avec le commit
2a1a04a.
La génération d’image est l’exemple minimal d’un flux payant de forme production. Le fournisseur local génère un SVG sans appeler de modèle commercial ; la valeur est la chaîne autour. Chaque requête acceptée coûte exactement cinq crédits mutualisés.
ENABLE_DEMO_FEATURES=true
ENABLE_IMAGE_GENERATION_MOCK=true
IMAGE_GENERATION_MOCK_FAILURES=0Lancez pnpm dev:all, connectez-vous avec le compte démo et ouvrez /fr/tasks/image-generation. L’UI garde une clé idempotente et interroge l’état tenant-scoped.
- L’API vérifie origine, limite, auth,
tasks.image_generationet quota mensuel. (user_uuid, type, idempotency_key)identifie la tâche ; une empreinte refuse un autre prompt avec la même clé.task_image:<task uuid>identifie la dépense de cinq crédits ; les rejeux concurrents retournent le débit existant.task_image_generation:<task uuid>déduplique le job et répare une panne entre tâche, dépense et distribution.- Le worker appelle le fournisseur avec un UUID stable, écrit et vérifie un objet Garage/S3 privé, puis active le fichier.
- La lecture signe une URL courte après résolution du fichier dans l’organisation.
pending_payment → queued → running → succeeded
↘ refunding → failedLe fournisseur a cinq essais et le job huit, réservant trois essais à la compensation. L’échec terminal passe en refunding, écrit un remboursement déterministe, puis seulement en failed. Le rejeu ne double ni fournisseur ni remboursement.
Utilisez IMAGE_GENERATION_MOCK_FAILURES=5 pour tester l’échec. La base réelle prouve une dépense et un remboursement ; Playwright prouve rejeu, variation exacte de cinq crédits, worker, Garage et téléchargement signé.
Remplacez seulement src/services/ai/image.ts par le vrai fournisseur et conservez idempotence, AbortSignal et contrats tâche, crédit, job, stockage et erreur.
Liens : Registre de crédits, Stockage privé, Jobs durables, Tests et CI.