Quand l'utilisateur confirme « Oui, payé » via check-in (lien email ou modale in-app) ou marque une facture encaissée manuellement, on envoie automatiquement un email de remerciement chaleureux au client final. Subject + body éditables par plan (mêmes variables que les relances), avec fallback hardcodé si vide. Gardé par la transition `* → paid` pour idempotence ; envoi async via BullMQ avec retry exponentiel ; capture en mode démo. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
51 lines
1.8 KiB
TypeScript
51 lines
1.8 KiB
TypeScript
/*
|
|
|--------------------------------------------------------------------------
|
|
| Queue workers
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Boot des workers BullMQ. V1 : on les démarre dans le même process que
|
|
| l'API HTTP (simple, suffisant tant que le volume reste petit). En prod
|
|
| K3s on les extraira dans un Deployment séparé (cf. backend.md §13.4).
|
|
|
|
|
| Tolérance Redis : si Redis n'est pas joignable au boot, on log un
|
|
| warning et l'API HTTP démarre quand même. Les jobs ne tourneront pas
|
|
| mais le reste de l'app reste utilisable (utile en dev quand docker-
|
|
| compose n'est pas up).
|
|
|
|
|
*/
|
|
|
|
import app from '@adonisjs/core/services/app'
|
|
import logger from '@adonisjs/core/services/logger'
|
|
import { registerWorker, shutdownQueue } from '#services/queue'
|
|
import { sendRelanceJob } from '#jobs/send_relance_job'
|
|
import { sendCheckinJob } from '#jobs/send_checkin_job'
|
|
import { sendPaymentThanksJob } from '#jobs/send_payment_thanks_job'
|
|
|
|
if (app.getEnvironment() === 'web') {
|
|
try {
|
|
registerWorker<{ taskId: string }>('relances', async (job) => {
|
|
await sendRelanceJob(job.data)
|
|
})
|
|
|
|
registerWorker<{ taskId: string; plain: string }>('checkins', async (job) => {
|
|
await sendCheckinJob(job.data)
|
|
})
|
|
|
|
registerWorker<{ invoiceId: string }>('payment-thanks', async (job) => {
|
|
await sendPaymentThanksJob(job.data)
|
|
})
|
|
|
|
logger.info('BullMQ workers ready (relances, checkins, payment-thanks)')
|
|
|
|
app.terminating(async () => {
|
|
logger.info('shutting down BullMQ workers')
|
|
await shutdownQueue()
|
|
})
|
|
} catch (err) {
|
|
logger.warn(
|
|
{ err },
|
|
"BullMQ workers couldn't start — Redis injoignable. L'API démarre quand même mais les jobs ne tourneront pas tant que Redis n'est pas up + serveur restart."
|
|
)
|
|
}
|
|
}
|