US-MGN002-002: Perfil de Usuario
Identificacion
| Campo |
Valor |
| ID |
US-MGN002-002 |
| Modulo |
MGN-002 Users |
| Sprint |
Sprint 2 |
| Prioridad |
P1 - Alta |
| Story Points |
5 |
| Estado |
Ready |
| Autor |
System |
| Fecha |
2025-12-05 |
Historia de Usuario
Como usuario autenticado del sistema
Quiero poder ver y editar mi informacion personal
Para mantener mis datos actualizados y personalizar mi experiencia
Criterios de Aceptacion
Escenario 1: Ver mi perfil
Given un usuario autenticado
When accede a GET /api/v1/users/me
Then el sistema retorna su perfil completo
And incluye firstName, lastName, email, phone
And incluye avatarUrl, avatarThumbnailUrl
And incluye createdAt, lastLoginAt
And incluye sus roles asignados
And NO incluye passwordHash
Escenario 2: Actualizar nombre
Given un usuario autenticado con nombre "Juan"
When actualiza su nombre a "Carlos"
Then el sistema guarda el cambio
And responde con el perfil actualizado
And firstName es "Carlos"
Escenario 3: Subir avatar
Given un usuario autenticado
And una imagen JPG de 2MB
When sube la imagen como avatar
Then el sistema redimensiona a 200x200 px
And genera thumbnail de 50x50 px
And actualiza avatarUrl en su perfil
And responde con las URLs generadas
Escenario 4: Avatar muy grande
Given un usuario autenticado
And una imagen de 15MB
When intenta subir como avatar
Then el sistema responde con status 400
And el mensaje es "Imagen excede tamaño maximo (10MB)"
Escenario 5: Eliminar avatar
Given un usuario con avatar
When elimina su avatar
Then avatarUrl se establece a null
And avatarThumbnailUrl se establece a null
And el avatar anterior se marca como no actual
Mockup / Wireframe
+------------------------------------------------------------------+
| [Logo] Mi Perfil |
+------------------------------------------------------------------+
| |
| +-------+ |
| | | Juan Perez |
| | FOTO | juan@empresa.com |
| | | Admin, Manager |
| +-------+ |
| [Cambiar foto] |
| |
| ┌─────────────────────────────────────────────────────────┐ |
| │ INFORMACION PERSONAL │ |
| ├─────────────────────────────────────────────────────────┤ |
| │ Nombre [Juan ] │ |
| │ Apellido [Perez ] │ |
| │ Telefono [+521234567890 ] │ |
| │ Email juan@empresa.com [Cambiar email] │ |
| │ │ |
| │ [ Cancelar ] [ Guardar Cambios ] │ |
| └─────────────────────────────────────────────────────────┘ |
| |
| ┌─────────────────────────────────────────────────────────┐ |
| │ SEGURIDAD │ |
| ├─────────────────────────────────────────────────────────┤ |
| │ Contraseña •••••••• [Cambiar contraseña] │ |
| │ Ultimo login 05/12/2025 10:30 │ |
| │ Miembro desde 01/01/2025 │ |
| └─────────────────────────────────────────────────────────┘ |
+------------------------------------------------------------------+
Modal: Subir Avatar
┌──────────────────────────────────────────────────────────────────┐
│ CAMBIAR FOTO │
├──────────────────────────────────────────────────────────────────┤
│ │
│ +------------------+ │
│ | | Arrastra una imagen o │
│ | [ + ] | [Selecciona archivo] │
│ | | │
│ +------------------+ Formatos: JPG, PNG, WebP │
│ Tamaño max: 10MB │
│ │
│ [ Cancelar ] [ Subir ] │
└──────────────────────────────────────────────────────────────────┘
Notas Tecnicas
API Endpoints
// Obtener perfil
GET /api/v1/users/me
// Response 200
{
"id": "user-uuid",
"email": "juan@empresa.com",
"firstName": "Juan",
"lastName": "Perez",
"phone": "+521234567890",
"avatarUrl": "https://storage.../avatar-200.jpg",
"avatarThumbnailUrl": "https://storage.../avatar-50.jpg",
"status": "active",
"emailVerifiedAt": "2025-01-01T00:00:00Z",
"lastLoginAt": "2025-12-05T10:30:00Z",
"createdAt": "2025-01-01T00:00:00Z",
"roles": [{ "id": "...", "name": "admin" }]
}
// Actualizar perfil
PATCH /api/v1/users/me
{
"firstName": "Carlos",
"lastName": "Lopez",
"phone": "+521234567890"
}
// Subir avatar
POST /api/v1/users/me/avatar
Content-Type: multipart/form-data
avatar: [file]
// Response 200
{
"avatarUrl": "https://storage.../avatar-200.jpg",
"avatarThumbnailUrl": "https://storage.../avatar-50.jpg"
}
Validaciones de Avatar
| Validacion |
Valor |
| Formatos |
image/jpeg, image/png, image/webp |
| Tamaño max |
10MB |
| Resize main |
200x200 px |
| Resize thumb |
50x50 px |
Definicion de Done
Estimacion
| Tarea |
Horas |
| Backend: Profile endpoints |
3h |
| Backend: Avatar upload + resize |
4h |
| Backend: Tests |
2h |
| Frontend: ProfilePage |
4h |
| Frontend: AvatarUploader |
3h |
| Frontend: Tests |
2h |
| Total |
18h |
Historial
| Version |
Fecha |
Autor |
Cambios |
| 1.0 |
2025-12-05 |
System |
Creacion inicial |