243 lines
7.0 KiB
Markdown
243 lines
7.0 KiB
Markdown
# Plan de Sprints - Fase 1 Foundation
|
|
|
|
## Resumen Ejecutivo
|
|
|
|
| Metrica | Valor |
|
|
|---------|-------|
|
|
| **Fase** | 1 - Foundation |
|
|
| **Modulos** | MGN-001, MGN-002, MGN-003, MGN-004 |
|
|
| **Story Points Total** | 150 SP |
|
|
| **Sprints Planificados** | 5 |
|
|
| **Velocidad Estimada** | 30 SP/sprint |
|
|
| **Duracion Sprint** | 2 semanas |
|
|
|
|
---
|
|
|
|
## Dependencias entre Modulos
|
|
|
|
```
|
|
MGN-001 (Auth)
|
|
|
|
|
v
|
|
MGN-002 (Users) <--+
|
|
| |
|
|
v |
|
|
MGN-003 (Roles) ---+
|
|
|
|
|
v
|
|
MGN-004 (Tenants)
|
|
```
|
|
|
|
**Orden de implementacion:**
|
|
1. Auth (login basico, JWT)
|
|
2. Users (CRUD basico)
|
|
3. Roles (RBAC)
|
|
4. Tenants (multi-tenancy)
|
|
5. Integracion completa
|
|
|
|
---
|
|
|
|
## Sprint 1: Autenticacion Core
|
|
|
|
**Objetivo:** Implementar login basico y manejo de tokens JWT
|
|
|
|
| ID | User Story | SP | Prioridad |
|
|
|----|------------|-----|-----------|
|
|
| US-MGN001-001 | Login con email y password | 8 | P0 |
|
|
| US-MGN001-003 | Logout y cierre de sesion | 2 | P0 |
|
|
| US-MGN001-004 | Renovacion automatica de tokens | 5 | P0 |
|
|
| - | Setup proyecto backend (NestJS) | 5 | P0 |
|
|
| - | Setup proyecto frontend (React) | 5 | P0 |
|
|
| - | Setup base de datos PostgreSQL | 5 | P0 |
|
|
| **Total** | | **30 SP** | |
|
|
|
|
**Entregables:**
|
|
- [x] Proyecto NestJS configurado con TypeORM
|
|
- [x] Proyecto React configurado con Vite + React Router
|
|
- [x] Esquema `core_auth` en PostgreSQL
|
|
- [x] Tabla `credentials` con RLS
|
|
- [x] Endpoint POST /api/v1/auth/login
|
|
- [x] Endpoint POST /api/v1/auth/refresh
|
|
- [x] Endpoint POST /api/v1/auth/logout
|
|
- [x] Pagina de Login funcional
|
|
- [x] Manejo de tokens en frontend
|
|
|
|
**Criterios de Aceptacion:**
|
|
- Usuario puede iniciar sesion con email/password
|
|
- Access token expira en 15 minutos
|
|
- Refresh token permite renovar sin re-login
|
|
- Logout invalida tokens
|
|
|
|
---
|
|
|
|
## Sprint 2: Password Recovery + Users CRUD
|
|
|
|
**Objetivo:** Recuperacion de password y gestion basica de usuarios
|
|
|
|
| ID | User Story | SP | Prioridad |
|
|
|----|------------|-----|-----------|
|
|
| US-MGN001-002 | Recuperacion de password | 5 | P0 |
|
|
| US-MGN002-001 | CRUD de usuarios (Admin) | 8 | P0 |
|
|
| US-MGN002-002 | Perfil de usuario | 5 | P0 |
|
|
| US-MGN002-003 | Cambio de password | 3 | P0 |
|
|
| - | Configuracion de email (SMTP/SendGrid) | 4 | P0 |
|
|
| - | Tests unitarios Auth | 5 | P1 |
|
|
| **Total** | | **30 SP** | |
|
|
|
|
**Entregables:**
|
|
- [x] Esquema `core_users` en PostgreSQL
|
|
- [x] Tablas: users, user_profiles, user_preferences
|
|
- [x] Endpoint POST /api/v1/auth/forgot-password
|
|
- [x] Endpoint POST /api/v1/auth/reset-password
|
|
- [x] Endpoints CRUD /api/v1/users
|
|
- [x] Endpoint GET/PATCH /api/v1/users/me/profile
|
|
- [x] Endpoint POST /api/v1/users/me/change-password
|
|
- [x] Servicio de email configurado
|
|
- [x] Pagina de usuarios (admin)
|
|
- [x] Pagina de perfil
|
|
|
|
**Criterios de Aceptacion:**
|
|
- Usuario puede solicitar reset de password
|
|
- Email con link de reset se envia correctamente
|
|
- Admin puede crear, editar, eliminar usuarios
|
|
- Usuario puede editar su perfil
|
|
|
|
---
|
|
|
|
## Sprint 3: Roles y Permisos (RBAC)
|
|
|
|
**Objetivo:** Sistema de roles, permisos y guards
|
|
|
|
| ID | User Story | SP | Prioridad |
|
|
|----|------------|-----|-----------|
|
|
| US-MGN003-001 | Crear y gestionar roles | 8 | P0 |
|
|
| US-MGN003-002 | Asignar permisos a roles | 8 | P0 |
|
|
| US-MGN003-003 | Validar permisos en runtime | 5 | P0 |
|
|
| US-MGN003-004 | Asignar roles a usuarios | 5 | P0 |
|
|
| - | Guards de autorizacion | 4 | P0 |
|
|
| **Total** | | **30 SP** | |
|
|
|
|
**Entregables:**
|
|
- [x] Esquema `core_rbac` en PostgreSQL
|
|
- [x] Tablas: roles, permissions, role_permissions, user_roles
|
|
- [x] Endpoints CRUD /api/v1/roles
|
|
- [x] Endpoints CRUD /api/v1/permissions
|
|
- [x] Endpoint POST /api/v1/roles/:id/permissions
|
|
- [x] Endpoint POST /api/v1/users/:id/roles
|
|
- [x] @RequirePermission decorator
|
|
- [x] PermissionsGuard
|
|
- [x] Pagina de roles (admin)
|
|
- [x] Componente de asignacion de permisos
|
|
|
|
**Criterios de Aceptacion:**
|
|
- Admin puede crear roles con permisos
|
|
- Roles se pueden asignar a usuarios
|
|
- Guards bloquean acceso sin permisos
|
|
- Permisos granulares por modulo
|
|
|
|
---
|
|
|
|
## Sprint 4: Multi-tenancy Core
|
|
|
|
**Objetivo:** Aislamiento de datos por tenant y subscripciones
|
|
|
|
| ID | User Story | SP | Prioridad |
|
|
|----|------------|-----|-----------|
|
|
| US-MGN004-001 | Crear tenant | 8 | P0 |
|
|
| US-MGN004-002 | Aislamiento RLS | 8 | P0 |
|
|
| US-MGN004-003 | Cambio de contexto tenant | 5 | P0 |
|
|
| US-MGN004-004 | Planes de subscripcion | 5 | P1 |
|
|
| - | Migracion de tablas existentes a multi-tenant | 4 | P0 |
|
|
| **Total** | | **30 SP** | |
|
|
|
|
**Entregables:**
|
|
- [x] Esquema `core_tenants` en PostgreSQL
|
|
- [x] Tablas: tenants, tenant_users, subscriptions, plans
|
|
- [x] Policies RLS en todas las tablas
|
|
- [x] Middleware de tenant context
|
|
- [x] Endpoints CRUD /api/v1/tenants
|
|
- [x] Endpoint POST /api/v1/tenants/:id/users
|
|
- [x] Contexto de tenant en frontend
|
|
- [x] Selector de tenant (para usuarios multi-tenant)
|
|
|
|
**Criterios de Aceptacion:**
|
|
- Datos aislados por tenant via RLS
|
|
- Usuario solo ve datos de su tenant
|
|
- Super-admin puede ver todos los tenants
|
|
- Usuarios pueden pertenecer a multiples tenants
|
|
|
|
---
|
|
|
|
## Sprint 5: Integracion y Estabilizacion
|
|
|
|
**Objetivo:** Integracion E2E, tests y pulido
|
|
|
|
| ID | User Story | SP | Prioridad |
|
|
|----|------------|-----|-----------|
|
|
| US-MGN002-005 | Cambio de email | 6 | P1 |
|
|
| US-MGN002-004 | Preferencias de usuario | 3 | P1 |
|
|
| - | Tests E2E Auth | 5 | P0 |
|
|
| - | Tests E2E Users | 5 | P0 |
|
|
| - | Tests E2E Roles | 4 | P0 |
|
|
| - | Tests E2E Tenants | 4 | P0 |
|
|
| - | Documentacion Swagger | 3 | P1 |
|
|
| **Total** | | **30 SP** | |
|
|
|
|
**Entregables:**
|
|
- [x] Funcionalidad cambio de email
|
|
- [x] Pagina de preferencias de usuario
|
|
- [x] Suite de tests E2E completa
|
|
- [x] Cobertura > 80% en modulos core
|
|
- [x] Documentacion Swagger actualizada
|
|
- [x] README con instrucciones de setup
|
|
- [x] Seed data para desarrollo
|
|
|
|
**Criterios de Aceptacion:**
|
|
- Todos los tests E2E pasando
|
|
- Cobertura de codigo > 80%
|
|
- Swagger documentado y funcional
|
|
- Flujo completo Auth -> Users -> Roles -> Tenants funcional
|
|
|
|
---
|
|
|
|
## Backlog (Post-Fase 1)
|
|
|
|
Historias que quedan pendientes para fases posteriores:
|
|
|
|
| ID | Historia | SP | Notas |
|
|
|----|----------|-----|-------|
|
|
| US-MGN001-005 | Login con OAuth (Google/Microsoft) | 8 | Requiere configuracion OAuth apps |
|
|
| US-MGN001-006 | 2FA (TOTP) | 5 | Nice to have |
|
|
| US-MGN001-007 | Gestion de sesiones activas | 3 | Bajo impacto |
|
|
|
|
---
|
|
|
|
## Riesgos y Mitigaciones
|
|
|
|
| Riesgo | Probabilidad | Impacto | Mitigacion |
|
|
|--------|--------------|---------|------------|
|
|
| Complejidad RLS | Media | Alto | POC temprano en Sprint 1 |
|
|
| Integracion email | Baja | Medio | Usar servicio externo (SendGrid) |
|
|
| Performance JWT | Baja | Medio | Cache de tokens, indices |
|
|
| Scope creep | Media | Alto | Backlog estricto, no features nuevas |
|
|
|
|
---
|
|
|
|
## Definicion de Done (General)
|
|
|
|
- [ ] Codigo en PR con code review aprobado
|
|
- [ ] Tests unitarios con cobertura > 80%
|
|
- [ ] Tests E2E pasando
|
|
- [ ] Documentacion Swagger actualizada
|
|
- [ ] Sin warnings de linter
|
|
- [ ] Sin vulnerabilidades criticas
|
|
- [ ] Merge a develop
|
|
|
|
---
|
|
|
|
## Historial
|
|
|
|
| Version | Fecha | Autor | Cambios |
|
|
|---------|-------|-------|---------|
|
|
| 1.0 | 2025-12-06 | System | Creacion inicial |
|