feat(club-001): club core backend: anonymous members, devices, ledger, cashback config

This commit is contained in:
Deploy
2026-08-26 18:55:00 +02:00
parent c19626bea3
commit b2ccc70dc6
8 changed files with 306 additions and 86 deletions

View File

@@ -0,0 +1,45 @@
{
"feature_id": "CLUB-001",
"agent": "reviewer",
"stage": "review_gate",
"verdict": "APPROVED",
"summary": "Revisión técnica aprobada: CLUB-001 entrega el core backend del Club con módulo aislado, ledger idempotente, settings reutilizando store_settings y cobertura de tests real sobre PostgreSQL.",
"checks": [
{
"item": "El módulo club sigue la arquitectura del proyecto (api/application/domain/infrastructure/index) y queda registrado en build-app.ts sin acoplarse a internals de otros módulos.",
"ok": true
},
{
"item": "La persistencia usa club_transactions como source of truth y mantiene current_balance_cents como cache transaccional con control de saldo negativo e idempotency_key.",
"ok": true
},
{
"item": "Los endpoints de Fase 1 cubren config, join, me, movements y settings admin con validación zod/parseJson y mapeo explícito de errores AppError.",
"ok": true
},
{
"item": "La feature quedó validada con typecheck, build, tests unitarios/boundary y una itest real PostgreSQL para join, reuse, movements y settings admin.",
"ok": true
}
],
"issues": [],
"notes": [
"Las migraciones 057 y 058 corregidas por el implementer son necesarias para que las itest reales del Club migren hasta 066_club_core; no cambian la intención funcional previa.",
"La semántica de bloqueo/merge de miembros queda modelada en schema pero la aplicación operativa de esos estados se puede profundizar en fases posteriores cuando exista linking/admin completo."
],
"evidence": [
"work/artifacts/CLUB-001/architect.md",
"work/artifacts/CLUB-001/implementer.md",
"project/src/modules/club/api/club.routes.ts",
"project/src/modules/club/application/club-service.ts",
"project/src/modules/club/infrastructure/pg-club-repository.ts",
"project/migrations/066_club_core.js",
"project/src/app/tests/club.itest.ts",
"cd project && npm run typecheck",
"cd project && npm run build",
"cd project && npx vitest run src/modules/club/tests/token-and-code.test.ts src/modules/club/tests/boundary.test.ts",
"cd project && TEST_DATABASE_URL=postgres://mdv:mdv_dev_only@localhost:5432/mercadodevida_test npx vitest run src/app/tests/club.itest.ts --no-file-parallelism",
"git diff --check"
],
"timestamp": "2026-08-26T16:52:50Z"
}