261 lines
8.4 KiB
Markdown
261 lines
8.4 KiB
Markdown
# Indice de Requerimientos Funcionales - MGN-002 Users
|
|
|
|
## Resumen del Modulo
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **Codigo** | MGN-002 |
|
|
| **Nombre** | Users - Gestion de Usuarios |
|
|
| **Prioridad** | P0 - Critica |
|
|
| **Total RFs** | 5 |
|
|
| **Estado** | En documentacion |
|
|
| **Fecha** | 2025-12-05 |
|
|
|
|
---
|
|
|
|
## Descripcion General
|
|
|
|
El modulo de usuarios gestiona el ciclo de vida completo de los usuarios del sistema, incluyendo:
|
|
|
|
- **CRUD de Usuarios**: Crear, listar, actualizar y eliminar usuarios (admin)
|
|
- **Perfil Personal**: Cada usuario gestiona su propia informacion
|
|
- **Cambio de Email**: Proceso seguro con verificacion
|
|
- **Cambio de Password**: Autoservicio con validaciones
|
|
- **Preferencias**: Personalizacion de la experiencia
|
|
|
|
---
|
|
|
|
## Lista de Requerimientos Funcionales
|
|
|
|
| ID | Nombre | Prioridad | Complejidad | Estado | Story Points |
|
|
|----|--------|-----------|-------------|--------|--------------|
|
|
| [RF-USER-001](./RF-USER-001.md) | CRUD de Usuarios | P0 | Media | Aprobado | 13 |
|
|
| [RF-USER-002](./RF-USER-002.md) | Perfil de Usuario | P1 | Baja | Aprobado | 7 |
|
|
| [RF-USER-003](./RF-USER-003.md) | Cambio de Email | P1 | Media | Aprobado | 6 |
|
|
| [RF-USER-004](./RF-USER-004.md) | Cambio de Password | P0 | Baja | Aprobado | 4 |
|
|
| [RF-USER-005](./RF-USER-005.md) | Preferencias de Usuario | P2 | Baja | Aprobado | 7 |
|
|
|
|
**Total Story Points:** 37
|
|
|
|
---
|
|
|
|
## Grafo de Dependencias
|
|
|
|
```
|
|
RF-AUTH-001 (Login)
|
|
│
|
|
▼
|
|
RF-USER-001 (CRUD Usuarios) ─────────────────────────┐
|
|
│ │
|
|
├──────────────────┬──────────────────┐ │
|
|
│ │ │ │
|
|
▼ ▼ ▼ │
|
|
RF-USER-002 RF-USER-003 RF-USER-004 │
|
|
(Perfil) (Cambio Email) (Cambio Pass) │
|
|
│ │ │
|
|
└────────┬─────────┘ │
|
|
│ │
|
|
▼ │
|
|
RF-USER-005 ◄───────────────────────────────┘
|
|
(Preferencias)
|
|
```
|
|
|
|
### Orden de Implementacion Recomendado
|
|
|
|
1. **RF-USER-001** - CRUD de usuarios (base)
|
|
2. **RF-USER-004** - Cambio de password (seguridad basica)
|
|
3. **RF-USER-002** - Perfil de usuario (autoservicio)
|
|
4. **RF-USER-003** - Cambio de email (proceso complejo)
|
|
5. **RF-USER-005** - Preferencias (personalizacion)
|
|
|
|
---
|
|
|
|
## Endpoints del Modulo
|
|
|
|
### Gestion de Usuarios (Admin)
|
|
|
|
| Metodo | Endpoint | RF | Descripcion | Permisos |
|
|
|--------|----------|-----|-------------|----------|
|
|
| POST | `/api/v1/users` | RF-USER-001 | Crear usuario | users:create |
|
|
| GET | `/api/v1/users` | RF-USER-001 | Listar usuarios | users:read |
|
|
| GET | `/api/v1/users/:id` | RF-USER-001 | Obtener usuario | users:read |
|
|
| PATCH | `/api/v1/users/:id` | RF-USER-001 | Actualizar usuario | users:update |
|
|
| DELETE | `/api/v1/users/:id` | RF-USER-001 | Eliminar usuario | users:delete |
|
|
| POST | `/api/v1/users/:id/activate` | RF-USER-001 | Activar usuario | users:update |
|
|
| POST | `/api/v1/users/:id/deactivate` | RF-USER-001 | Desactivar usuario | users:update |
|
|
|
|
### Perfil Personal (Self-service)
|
|
|
|
| Metodo | Endpoint | RF | Descripcion |
|
|
|--------|----------|-----|-------------|
|
|
| GET | `/api/v1/users/me` | RF-USER-002 | Obtener mi perfil |
|
|
| PATCH | `/api/v1/users/me` | RF-USER-002 | Actualizar mi perfil |
|
|
| POST | `/api/v1/users/me/avatar` | RF-USER-002 | Subir avatar |
|
|
| DELETE | `/api/v1/users/me/avatar` | RF-USER-002 | Eliminar avatar |
|
|
| POST | `/api/v1/users/me/email/request-change` | RF-USER-003 | Solicitar cambio email |
|
|
| GET | `/api/v1/users/email/verify-change` | RF-USER-003 | Verificar cambio email |
|
|
| POST | `/api/v1/users/me/password` | RF-USER-004 | Cambiar password |
|
|
| GET | `/api/v1/users/me/preferences` | RF-USER-005 | Obtener preferencias |
|
|
| PATCH | `/api/v1/users/me/preferences` | RF-USER-005 | Actualizar preferencias |
|
|
| POST | `/api/v1/users/me/preferences/reset` | RF-USER-005 | Reset preferencias |
|
|
|
|
---
|
|
|
|
## Tablas de Base de Datos
|
|
|
|
| Tabla | Schema | RF | Descripcion |
|
|
|-------|--------|-----|-------------|
|
|
| `users` | core_users | RF-USER-001 | Tabla principal de usuarios |
|
|
| `user_avatars` | core_users | RF-USER-002 | Historial de avatares |
|
|
| `email_change_requests` | core_users | RF-USER-003 | Solicitudes de cambio email |
|
|
| `password_history` | core_auth | RF-USER-004 | Historial de passwords |
|
|
| `user_preferences` | core_users | RF-USER-005 | Preferencias por usuario |
|
|
|
|
---
|
|
|
|
## Modelo de Datos Principal
|
|
|
|
```mermaid
|
|
erDiagram
|
|
users ||--o| user_preferences : "has"
|
|
users ||--o{ user_avatars : "has"
|
|
users ||--o{ email_change_requests : "requests"
|
|
users ||--o{ password_history : "has"
|
|
users }o--|| tenants : "belongs to"
|
|
|
|
users {
|
|
uuid id PK
|
|
uuid tenant_id FK
|
|
varchar email
|
|
varchar password_hash
|
|
varchar first_name
|
|
varchar last_name
|
|
varchar phone
|
|
varchar avatar_url
|
|
enum status
|
|
boolean is_active
|
|
timestamptz email_verified_at
|
|
timestamptz last_login_at
|
|
integer failed_login_attempts
|
|
timestamptz locked_until
|
|
jsonb metadata
|
|
timestamptz created_at
|
|
uuid created_by
|
|
timestamptz updated_at
|
|
uuid updated_by
|
|
timestamptz deleted_at
|
|
uuid deleted_by
|
|
}
|
|
|
|
user_preferences {
|
|
uuid id PK
|
|
uuid user_id FK
|
|
uuid tenant_id FK
|
|
varchar language
|
|
varchar timezone
|
|
varchar date_format
|
|
varchar time_format
|
|
varchar theme
|
|
jsonb notifications
|
|
jsonb dashboard
|
|
timestamptz updated_at
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Estados de Usuario
|
|
|
|
| Estado | Descripcion | Puede Login |
|
|
|--------|-------------|-------------|
|
|
| `pending_activation` | Recien creado, esperando activacion | No |
|
|
| `active` | Usuario activo y funcional | Si |
|
|
| `inactive` | Desactivado por admin | No |
|
|
| `locked` | Bloqueado por intentos fallidos | No |
|
|
| `deleted` | Soft deleted | No |
|
|
|
|
---
|
|
|
|
## Criterios de Aceptacion Consolidados
|
|
|
|
### Seguridad
|
|
|
|
- [ ] Soft delete en lugar de hard delete
|
|
- [ ] Solo admins gestionan otros usuarios
|
|
- [ ] Email verificado antes de cambio efectivo
|
|
- [ ] Password actual requerido para cambios sensibles
|
|
- [ ] Historial de passwords para evitar reuso
|
|
- [ ] Rate limiting en operaciones sensibles
|
|
|
|
### Funcionalidad
|
|
|
|
- [ ] CRUD completo con paginacion y filtros
|
|
- [ ] Perfil autoservicio funcional
|
|
- [ ] Avatar upload con resize automatico
|
|
- [ ] Cambio de email con doble verificacion
|
|
- [ ] Cambio de password con politica de complejidad
|
|
- [ ] Preferencias persistentes y aplicadas
|
|
|
|
### Auditoria
|
|
|
|
- [ ] created_by/updated_by en todas las operaciones
|
|
- [ ] deleted_by en soft deletes
|
|
- [ ] Historial de cambios de email
|
|
- [ ] Historial de passwords
|
|
|
|
---
|
|
|
|
## Estimacion Total
|
|
|
|
| Capa | Story Points |
|
|
|------|--------------|
|
|
| Database | 6 |
|
|
| Backend | 15 |
|
|
| Frontend | 16 |
|
|
| **Total** | **37** |
|
|
|
|
---
|
|
|
|
## Riesgos Identificados
|
|
|
|
| Riesgo | Probabilidad | Impacto | Mitigacion |
|
|
|--------|--------------|---------|------------|
|
|
| Spam de cambio de email | Media | Bajo | Rate limiting 3/dia |
|
|
| Storage de avatares lleno | Baja | Medio | Cleanup job, limites |
|
|
| Performance en listados | Media | Medio | Paginacion, indices |
|
|
| Enumeracion de usuarios | Baja | Alto | Permisos estrictos |
|
|
|
|
---
|
|
|
|
## Referencias
|
|
|
|
### Documentacion Relacionada
|
|
|
|
- [DDL-SPEC-core_users.md](../../02-modelado/database-design/DDL-SPEC-core_users.md) - Especificacion de base de datos
|
|
- [ET-users-backend.md](../../02-modelado/especificaciones-tecnicas/ET-users-backend.md) - Especificacion tecnica backend
|
|
- [TP-users.md](../../04-test-plans/TP-users.md) - Plan de pruebas
|
|
|
|
### Dependencias con Otros Modulos
|
|
|
|
- **MGN-001 (Auth)**: Autenticacion y tokens
|
|
- **MGN-003 (Roles)**: Asignacion de roles a usuarios
|
|
- **MGN-004 (Tenants)**: Aislamiento multi-tenant
|
|
|
|
---
|
|
|
|
## Historial de Cambios
|
|
|
|
| Version | Fecha | Autor | Cambios |
|
|
|---------|-------|-------|---------|
|
|
| 1.0 | 2025-12-05 | System | Creacion inicial con 5 RFs |
|
|
|
|
---
|
|
|
|
## Aprobaciones
|
|
|
|
| Rol | Nombre | Fecha | Firma |
|
|
|-----|--------|-------|-------|
|
|
| Analista | System | 2025-12-05 | [x] |
|
|
| Tech Lead | - | - | [ ] |
|
|
| Product Owner | - | - | [ ] |
|