Etapa 7 — Motor de alertas (BullMQ)
Adiciona um processo worker separado do processo web (src/worker.ts, WorkerModule) com dois crons diários e processors do BullMQ para alertas de mensalidade (master→tenant) e cobrança (tenant→customer): marca faturas/parcelas atrasadas, resolve template com fallback tenant→master por canal, renderiza placeholders, dispara WhatsApp/e-mail com retry e backoff exponencial, e grava alert_logs com idempotência por dia. Módulo alerts (web) traz o CRUD de alert_templates (master e tenant) e a consulta de alert_logs com filtros. alert_templates/alert_logs não têm RLS no schema, então o isolamento entre tenants é feito manualmente (PrismaMasterService + filtro por tenant_id), coberto por teste e2e dedicado. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -20,6 +20,25 @@ services:
|
||||
retries: 5
|
||||
start_period: 10s
|
||||
|
||||
worker:
|
||||
build:
|
||||
context: .
|
||||
target: production
|
||||
command: ['node', 'dist/worker']
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- .env
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
# Sem HTTP: os dois crons diários (`AlertSchedulerService`) e os
|
||||
# processors do BullMQ mantêm o processo vivo. Escala independente do
|
||||
# `app` — ex: `docker compose up --scale worker=3` — sem duplicar o
|
||||
# disparo dos crons (eles não vivem no processo `app`, ver
|
||||
# `src/worker/worker.module.ts`).
|
||||
|
||||
postgres:
|
||||
image: postgres:16-alpine
|
||||
restart: unless-stopped
|
||||
|
||||
Reference in New Issue
Block a user