VOLTA · 04-user-flows.md · 6 de 22

En esta página Convenciones 0%

04 — Flujos de usuario — VOLTA

Convenciones

  • Actor: Guest | COACH
  • Éxito: resultado observable
  • Errores: UI + código HTTP cuando aplica

F1 — Descubrimiento (Guest)

Home (/) → anclas #clases / #horarios
        → CTA "Quiero una plaza" | "Apuntarme"
        → /apuntarme
        → (nav) "Coach" → /login
PasoAcciónSistema
1Lee valor, clases y horarios teaserRender estático
2Click CTA plazaRouter → /apuntarme
3Opcional: coach entra al panelRouter → /login

Éxito: form de plaza o login visible.


F2 — Solicitar plaza (Guest, público)

/apuntarme → validación cliente
          → POST /api/requests { fullName, email, phone?, classType, preferredDay, preferredSlot, notes? }
          → 201 ClassRequest { code, ... }
          → /ok (state o query con code)
CampoValidación cliente (mín.)API
fullNamerequired, min 2@MinLength(2)
emailrequired, email@IsEmail()
phoneoptional@IsOptional()
classTypeenum HIIT…OPEN@IsEnum(ClassType)
preferredDayrequired (date string)@MinLength(4)
preferredSlotrequired@MinLength(2)
notesoptionaldefault ""

Éxito: registro status=NEW, código VO-MMDD-XXX, pantalla success.
Errores:

CasoComportamiento
Validación DTO400 + mensaje form
Red caídaError de red en UI form
Email mal formado400

No hay cuenta de socio en v1.


F3 — Success (Guest)

/ok → muestra copy de confirmación + code
    → CTA volver home o "seguir explorando"
PasoAcciónSistema
1Lee acuseUI
2Copia mental del código
3Espera contacto del clubFuera de app (WhatsApp/llamada)

F4 — Login JWT (COACH)

/login → POST /api/auth/login { email, password }
      → 200 { accessToken, user } → localStorage → /inbox
      → 401 → mensaje error en form
CampoValidación clienteAPI
emailrequired, email@IsEmail()
passwordrequired, min 6@MinLength(6)

Éxito: token guardado; user role=COACH, nombre Nora Beltrán.
Errores:

CasoComportamiento
Credenciales inválidas401 + mensaje
Red caídaError de red en UI
Token caducado en inbox401 en GET → re-login

F5 — Inbox + stats (COACH)

/inbox (token en cliente)
  → GET /api/requests
  → GET /api/requests/stats/summary
  → Render cards + métricas
CasoComportamiento
Lista con itemsCards: code, nombre, classType, status, preferencias
Lista vacíaEmpty state (sin CTA público desde inbox)
Fallo red / 401Error + reintentar / re-login
Statstotal, open (NEW+CONTACTED), byStatus

F6 — Detalle y cambio de estado (COACH)

/inbox/:id
  → GET /api/requests/:id
  → UI: datos contacto + preferencias + notas
  → PATCH /api/requests/:id/status { status }
  → 200 ClassRequest actualizado

Transiciones permitidas (modelo v1)

Cualquier status del enum puede asignarse vía PATCH (máquina simple L1):

DesdeHacia típicoIntención
NEWCONTACTEDCoach inició contacto
CONTACTEDCONFIRMEDPlaza cerrada
CONTACTEDCANCELLEDNo contesta / sin hueco
NEWCANCELLEDSpam / error
CONFIRMEDCANCELLEDBaja posterior
**Corrección operativa

Éxito: badge de estado actualizado; lista refleja al volver.
Errores: 404 id inexistente; 401 sin token; 400 status inválido.


F7 — Logout (COACH)

Click "Salir" → limpia localStorage (token + user) → /login

Matriz de errores global

CódigoCuándoUI
400DTO inválidoMensaje campo / genérico
401Sin/mal tokenRe-login
404id no existeMensaje detalle
5xx / networkAPI caídaEmpty error + retry

Flujos fuera de alcance v1

  • Registro de socio
  • Recuperación de password
  • Notificación email automática al coach
  • Filtros multi-criterio en inbox
  • Asignación multi-coach