--- id: "US-AUTH-001" title: "Registro con Email" type: "User Story" status: "Done" priority: "Alta" epic: "OQI-001" story_points: 5 created_date: "2025-12-05" updated_date: "2026-01-04" --- # US-AUTH-001: Registro con Email **Version:** 1.0.0 **Fecha:** 2025-12-05 **Estado:** ✅ Implementado **Story Points:** 5 **Prioridad:** P0 (Crítica) **Épica:** [OQI-001](../_MAP.md) --- ## Historia de Usuario **Como** visitante de Trading Platform **Quiero** poder crear una cuenta usando mi email y contraseña **Para** acceder a las funcionalidades de la plataforma --- ## Criterios de Aceptación ### AC-001: Formulario de registro **Dado** que soy un visitante en la página de registro **Cuando** veo el formulario **Entonces** debería ver campos para: - Email - Contraseña - Confirmar contraseña - Nombre - Apellido - Checkbox de términos y condiciones ### AC-002: Validación de email **Dado** que estoy llenando el formulario de registro **Cuando** ingreso un email inválido **Entonces** debería ver un mensaje de error "Email inválido" **Y** el botón de registro debería estar deshabilitado ### AC-003: Validación de contraseña **Dado** que estoy llenando el formulario de registro **Cuando** ingreso una contraseña que no cumple los requisitos **Entonces** debería ver indicadores visuales de: - ❌/✅ Mínimo 8 caracteres - ❌/✅ Al menos una mayúscula - ❌/✅ Al menos una minúscula - ❌/✅ Al menos un número - ❌/✅ Al menos un carácter especial ### AC-004: Confirmación de contraseña **Dado** que estoy llenando el formulario de registro **Cuando** las contraseñas no coinciden **Entonces** debería ver un mensaje de error "Las contraseñas no coinciden" ### AC-005: Registro exitoso **Dado** que completé el formulario correctamente **Cuando** hago click en "Registrarme" **Entonces** debería: 1. Ver un mensaje "Cuenta creada. Revisa tu email para verificar" 2. Recibir un email de verificación 3. Ser redirigido a una página de confirmación ### AC-006: Email duplicado **Dado** que intento registrarme con un email que ya existe **Cuando** envío el formulario **Entonces** debería ver un mensaje "Este email ya está registrado" ### AC-007: Email de verificación **Dado** que me registré exitosamente **Cuando** reviso mi email **Entonces** debería recibir un email con: - Asunto: "Verifica tu cuenta de Trading Platform" - Un link de verificación válido por 24 horas - Instrucciones claras ### AC-008: Verificación de email **Dado** que recibí el email de verificación **Cuando** hago click en el link de verificación **Entonces** debería: 1. Ver un mensaje "Email verificado exitosamente" 2. Poder hacer login con mis credenciales --- ## Mockup ``` ┌─────────────────────────────────────────────────────────────┐ │ │ │ 🌟 Crea tu cuenta en Trading Platform │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Email │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ │ │ usuario@example.com │ │ │ │ │ └─────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Contraseña │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ │ │ •••••••••••• 👁 │ │ │ │ │ └─────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ ✅ Mínimo 8 caracteres │ │ │ │ ✅ Una mayúscula │ │ │ │ ✅ Una minúscula │ │ │ │ ✅ Un número │ │ │ │ ❌ Un carácter especial │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Confirmar contraseña │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ │ │ •••••••••••• 👁 │ │ │ │ │ └─────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ ┌────────────────────────┐ ┌────────────────────────┐ │ │ │ Nombre │ │ Apellido │ │ │ │ ┌──────────────────┐ │ │ ┌──────────────────┐ │ │ │ │ │ Juan │ │ │ │ Pérez │ │ │ │ │ └──────────────────┘ │ │ └──────────────────┘ │ │ │ └────────────────────────┘ └────────────────────────┘ │ │ │ │ ☐ Acepto los Términos de Servicio y Política de │ │ Privacidad │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Crear mi cuenta │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ ─────────────────── O continúa con ─────────────────── │ │ │ │ [Google] [Facebook] [X] [Apple] [GitHub] │ │ │ │ ¿Ya tienes cuenta? Inicia sesión │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## Notas Técnicas ### Frontend - Componente: `apps/frontend/src/modules/auth/pages/Register.tsx` - Validación en tiempo real con React Hook Form + Zod - Debounce de 300ms para validación de email - Password strength indicator visual ### Backend - Endpoint: `POST /api/v1/auth/register` - Validación con Zod - Hash con bcrypt (cost 12) - Email con Nodemailer + plantilla HTML ### Database - Tabla: `users` - Status inicial: `pending_verification` - Trigger: Crea `user_profiles` automáticamente --- ## Dependencias - Ninguna (primer flujo de auth) --- ## Requerimientos Relacionados - [RF-AUTH-002: Autenticación por Email](../requerimientos/RF-AUTH-002-email.md) ## Especificaciones Relacionadas - [ET-AUTH-002: JWT Tokens](../especificaciones/ET-AUTH-002-jwt.md) - [ET-AUTH-003: Database](../especificaciones/ET-AUTH-003-database.md)