1.7 KiB
1.7 KiB
Architect — CLUB-005
Objetivo
Vincular socios anónimos a cuentas registradas de usuario, restaurar la tarjeta automáticamente al login y manejar fusión segura de membresías.
Diseño
1. Restauración automática de tarjeta al login
El endpoint GET /club/me ya lo hace — comprueba userId primero, luego cae back a device token. No se necesita cambio.
2. Vincular miembro anónimo a cuenta registrada (PATCH /club/me)
- El frontend llama a este endpoint después de login/register cuando hay cookie
mdv_club - Requiere sesión (autenticado)
- Usa el device token de la cookie para encontrar el socio anónimo
- Actualiza
user_iddel socio anónimo al userId de la sesión - Si el usuario ya tiene un socio vinculado → retorna
linked: false, no sobreescribe
3. Fusión de membresías (POST /club/merge)
- Para cuando el usuario tiene un socio anónimo (device) Y un socio registrado (userId)
- El socio registrado es el primario (se conserva)
- El socio anónimo se marca como
merged, su saldo se suma al primario - Los dispositivos del anónimo se transfieren al primario
- Los recovery codes del anónimo expiran (no se transfieren)
Seguridad
PATCH /club/merequiere sesión — no se puede vincular sin estar autenticadoPOST /club/mergerequiere sesión y solo usa el socio del usuario autenticado como primario- La transacción de merge usa
FOR UPDATEpara evitar race conditions
Endpoints nuevos
| Método | Ruta | Auth | Descripción |
|---|---|---|---|
| PATCH | /club/me |
sesión | Vincular miembro anónimo a cuenta |
| POST | /club/merge |
sesión | Fusionar miembro anónimo en el registrado |