3.3 KiB
US-MGN-001-003-002: Gestión de Perfil Propio y Cambio de Contraseña
RF Asociado: RF-MGN-001-003 Módulo: MGN-001 - Fundamentos Epic: Gestión de Usuarios Prioridad: P0 (MVP) Story Points: 3 Sprint: Sprint 2 Estado: Ready for Development Fecha: 2025-11-24
User Story
Como usuario autenticado, Quiero editar mi perfil (nombre, foto, idioma) y cambiar mi contraseña, Para personalizar mi cuenta y mantener mi seguridad.
Descripción Detallada
Usuario puede actualizar su propio perfil (NO email ni roles, solo admin puede). Cambio de contraseña requiere contraseña actual, revoca refresh tokens existentes.
Criterios de Aceptación
Escenario 1: Actualizar perfil propio
Dado que estoy autenticado, Cuando actualizo nombre, teléfono, foto, idioma, Entonces cambios se guardan, NO puedo cambiar email ni roles.
Escenario 2: Cambiar contraseña
Dado que ingreso contraseña actual correcta y nueva contraseña válida, Cuando cambio mi contraseña, Entonces password_hash actualizado, refresh tokens revocados, sesiones en otros dispositivos cerradas.
Escenario 3: Contraseña actual incorrecta
Dado que ingreso contraseña actual incorrecta, Cuando intento cambiar contraseña, Entonces retorna error 401 "Contraseña actual incorrecta".
Escenario 4: Nueva contraseña no cumple política
Dado que nueva contraseña tiene menos de 8 chars o sin mayúscula, Cuando intento cambiarla, Entonces retorna error 400 con política de contraseñas.
Reglas de Negocio
- RN-1: Usuario NO puede cambiar su email ni roles (solo admin)
- RN-2: Cambio de contraseña requiere contraseña actual
- RN-3: Nueva contraseña: 8+ chars, 1 mayúscula, 1 número, 1 símbolo
- RN-4: Al cambiar contraseña: revocar todos los refresh tokens
Tareas Técnicas
Backend
- GET /api/v1/auth/me - Obtener perfil propio
- PATCH /api/v1/auth/me - Actualizar perfil
- POST /api/v1/auth/me/change-password - Cambiar contraseña
- UsersService.updateProfile/changePassword
- Validar contraseña actual con bcrypt.compare
- Revocar refresh tokens al cambiar contraseña
- Unit + Integration tests (8 casos)
Frontend
- ProfilePage con formulario de perfil
- ChangePasswordModal con 3 campos (actual, nueva, confirmar)
- Upload de foto con preview
- Selector de idioma (es, en)
- API client + Zustand store
- Tests
Database
- Actualizar auth.users (name, phone, avatar, language)
- DELETE FROM auth.sessions WHERE user_id=X al cambiar password
Estimación: 3 SP (6 horas)
Definition of Done
- Perfil propio editable
- Cambio de contraseña funcionando
- Revocación de tokens funcionando
- Tests pasando
- Code review aprobado