petid-wikimemoria rápida, no arquitectura
‹ todos los flujos

Alta de usuario → activación por email

petid-apipetid-crmpetid-landingpetid-client
actualizado 2026-09-02

Objetivo

Que un usuario recién creado pueda fijar su propia contraseña sin que nadie (ni el staff que lo dio de alta) llegue a conocer una temporal.

Cómo empieza

Dos entradas posibles, mismo final:

Pasos principales

  1. RegisterUseCase/ProvisionTenantUseCase generan una password con generateTempPassword() — se hashea y se guarda, pero nunca se devuelve en ninguna respuesta ni se muestra en ningún panel. Solo existe para no dejar el hash vacío.
  2. Se emite UserRegisteredEventSendEmailVerificationUseCaseEmailVerificationRequestedEvent → email con code welcome, verifyUrl: {baseUrl}/activate?token=....
  3. baseUrlFor(role) decide el dominio: Role.USER (dueño de mascota) → petid-landing; cualquier rol de staff → petid-crm. Cada app tiene su propia ruta /activate.
  4. El usuario abre el link → formulario web → POST /auth/activate { token, password }.
  5. ActivateAccountUseCase reutiliza el mismo JWT de verificación de email como prueba de activación (no genera un token nuevo), fija la contraseña real y marca emailVerifiedAt en el mismo paso.

Reglas de negocio

Interacciones

petid-apinotification-api (email welcome) → el usuario abre petid-landing o petid-crmPOST /auth/activate de vuelta a petid-api.

Dónde seguir mirando

Casos especiales