Pourquoi une tâche de cinq crédits teste tout le SaaS
Un fournisseur image simple révèle les liens difficiles entre identité, crédits, jobs, stockage, opérations et reprise.
Basé sur le commit
b16b416.
Beaucoup de démos prouvent seulement qu’un bouton appelle une API. Elles ne prouvent pas le rejeu navigateur, une panne entre écritures, un fournisseur qui accepte avant timeout, un objet stocké avant l’échec DB ou un remboursement temporairement impossible.
Sushi SaaS utilise une tâche image volontairement simple pour tester ces jointures. L’image est un SVG local ; le workflow autour est la référence.
La requête traverse origine, rate limit, Better Auth, organisation, entitlement, quota, registre mutualisé, tâche, file durable, idempotence fournisseur, stockage S3 privé, URL signée, erreurs traduites, reprise admin, logs et tests.
Une Idempotency-Key et une empreinte identifient la requête. L’UUID de tâche dérive transaction, déduplication job, identité fournisseur, fichier et objet. Un replay peut donc terminer l’effet existant.
- panne après insertion : un seul débit déterministe ;
- panne après débit : un seul job ;
- objet actif sans tâche terminée : le worker répare ;
- refund écrit sans état final : le replay retrouve le refund.
Un budget réservé à la compensation
Le fournisseur a cinq tentatives, le job huit. Les trois restantes compensent une indisponibilité PostgreSQL pendant le remboursement, elles ne rappellent pas le fournisseur. La tâche passe en refunding et ne devient failed qu’après le refund déterministe.
Le mock évite coût, secrets et non-déterminisme. E2E rejoue la requête, confirme exactement cinq crédits, exécute le worker et lit l’objet Garage signé. Un test DB force l’échec terminal et prouve un débit/un refund.
Le fournisseur réel appartient à src/services/ai/image.ts, en conservant clé idempotente, AbortSignal et erreurs publiques. L’adoption en production exige aussi une admission explicite dans la page, l’API et le service : leurs contrôles de démonstration sont toujours fermés en production. Le type de sortie actuel se limite au SVG et au fournisseur mock ; définissez et validez donc le format réel et les métadonnées du fichier. Une fois ces frontières adaptées, les contrats de crédits, exécution durable, stockage privé, interrogation et reprise peuvent rester indépendants du modèle.
Voilà le sens de « pensé pour la production » : rendre les pannes coûteuses visibles et testables, pas certifier automatiquement un clone.
Lisez Flux image et Tests et CI.