Template base para proyectos SaaS multi-tenant. Estructura inicial: - apps/backend (NestJS API) - apps/frontend (React/Vite) - apps/database (PostgreSQL DDL) - docs/ (Documentación) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
281 lines
8.1 KiB
Markdown
281 lines
8.1 KiB
Markdown
# TRAZA DE TAREAS - DATABASE
|
|
|
|
**Proyecto:** template-saas
|
|
**Capa:** Database
|
|
**Version:** 1.0.0
|
|
**Inicio:** 2026-01-07
|
|
|
|
---
|
|
|
|
## HISTORIAL
|
|
|
|
### [2026-01-07] SAAS-001-DDL
|
|
**Estado:** completado
|
|
**Agente:** Database-Agent
|
|
**Duracion:** ~2h
|
|
**SP:** 8
|
|
|
|
#### Descripcion
|
|
Creacion de DDL para schemas core: auth, tenants, users (incluyendo roles y permisos).
|
|
|
|
#### Archivos Creados
|
|
- `apps/database/ddl/00-extensions.sql` - Extensiones PostgreSQL
|
|
- `apps/database/ddl/01-schemas.sql` - Creacion de 9 schemas
|
|
- `apps/database/ddl/02-enums.sql` - 25 tipos enum
|
|
- `apps/database/ddl/schemas/tenants/tables/01-tenants.sql` - Tabla tenants
|
|
- `apps/database/ddl/schemas/tenants/tables/02-tenant-settings.sql` - Settings por tenant
|
|
- `apps/database/ddl/schemas/users/tables/01-users.sql` - Tabla users con RLS
|
|
- `apps/database/ddl/schemas/users/tables/02-roles.sql` - Roles, user_roles, permissions
|
|
- `apps/database/ddl/schemas/users/tables/03-invitations.sql` - Invitaciones
|
|
- `apps/database/ddl/schemas/auth/tables/01-sessions.sql` - Sesiones activas
|
|
- `apps/database/ddl/schemas/auth/tables/02-tokens.sql` - Tokens y refresh tokens
|
|
- `apps/database/ddl/schemas/auth/tables/03-oauth.sql` - Conexiones OAuth
|
|
|
|
#### Resultado
|
|
- 11 tablas creadas
|
|
- 12 RLS policies implementadas
|
|
- 6 triggers de updated_at
|
|
- Funciones de contexto de tenant
|
|
|
|
#### Notas
|
|
- RLS usa `current_setting('app.current_tenant_id')` para aislamiento
|
|
- Tabla `tenants.tenants` no tiene RLS (es la base del multi-tenancy)
|
|
- OAuth soporta: google, microsoft, github, apple
|
|
|
|
---
|
|
|
|
### [2026-01-07] SAAS-002-DDL
|
|
**Estado:** completado
|
|
**Agente:** Database-Agent
|
|
**Duracion:** ~1.5h
|
|
**SP:** 5
|
|
|
|
#### Descripcion
|
|
Creacion de DDL para schemas de billing y plans.
|
|
|
|
#### Archivos Creados
|
|
- `apps/database/ddl/schemas/plans/tables/01-plans.sql` - Plans y plan_features
|
|
- `apps/database/ddl/schemas/billing/tables/01-subscriptions.sql` - Subscriptions
|
|
- `apps/database/ddl/schemas/billing/tables/02-invoices.sql` - Invoices, payments
|
|
|
|
#### Resultado
|
|
- 7 tablas creadas (plans, plan_features, subscriptions, subscription_items, invoices, invoice_items, payments)
|
|
- 5 RLS policies para billing
|
|
- Secuencia para invoice_number
|
|
- Funcion generate_invoice_number()
|
|
|
|
#### Notas
|
|
- Plans no usa RLS (datos globales)
|
|
- Billing completamente aislado por tenant
|
|
- Soporte para metered billing con subscription_items
|
|
|
|
---
|
|
|
|
### [2026-01-07] SAAS-003-DDL
|
|
**Estado:** completado
|
|
**Agente:** Database-Agent
|
|
**Duracion:** ~1.5h
|
|
**SP:** 5
|
|
|
|
#### Descripcion
|
|
Creacion de DDL para schemas de features: notifications, feature_flags, audit.
|
|
|
|
#### Archivos Creados
|
|
- `apps/database/ddl/schemas/audit/tables/01-audit-logs.sql` - Audit y activity logs
|
|
- `apps/database/ddl/schemas/notifications/tables/01-notifications.sql` - Templates, notifications, preferences
|
|
- `apps/database/ddl/schemas/feature_flags/tables/01-flags.sql` - Flags, tenant_flags, user_flags, evaluations
|
|
|
|
#### Resultado
|
|
- 10 tablas creadas
|
|
- 6 RLS policies
|
|
- Funcion evaluate_flag() para evaluacion de feature flags
|
|
- Funcion log_event() para auditoria
|
|
- Funciones de cleanup para retencion
|
|
|
|
#### Notas
|
|
- Feature flags soporta: disabled, enabled, percentage, user_list
|
|
- Audit logs con cleanup configurable por dias
|
|
- Notifications con templates y variables dinamicas
|
|
|
|
---
|
|
|
|
### [2026-01-07] SAAS-004-RLS
|
|
**Estado:** completado
|
|
**Agente:** Database-Agent
|
|
**Duracion:** ~30m
|
|
**SP:** 5
|
|
|
|
#### Descripcion
|
|
Implementacion de RLS policies en todos los schemas y funciones de contexto.
|
|
|
|
#### Archivos Creados
|
|
- `apps/database/ddl/03-functions.sql` - Funciones de contexto y utilidad
|
|
|
|
#### Resultado
|
|
- 20+ RLS policies totales
|
|
- Funciones de contexto:
|
|
- `auth.set_current_tenant(uuid)`
|
|
- `auth.get_current_tenant()`
|
|
- `auth.set_current_user(uuid)`
|
|
- `auth.clear_context()`
|
|
- Funciones de utilidad:
|
|
- `plans.get_tenant_limits(uuid)`
|
|
- `plans.check_limit(uuid, varchar, int)`
|
|
- `plans.has_feature(uuid, varchar)`
|
|
- `users.count_active_users(uuid)`
|
|
- `users.can_add_user(uuid)`
|
|
- `public.slugify(varchar)`
|
|
- `public.generate_token(int)`
|
|
- `public.hash_token(varchar)`
|
|
|
|
#### Notas
|
|
- Todas las tablas con datos de tenant tienen RLS habilitado
|
|
- Contexto se establece via set_config() para transaccion
|
|
|
|
---
|
|
|
|
### [2026-01-07] SAAS-005-SEEDS
|
|
**Estado:** completado
|
|
**Agente:** Database-Agent
|
|
**Duracion:** ~1h
|
|
**SP:** 3
|
|
|
|
#### Descripcion
|
|
Seeds de produccion con datos base del sistema.
|
|
|
|
#### Archivos Creados
|
|
- `apps/database/seeds/prod/01-plans.sql` - 4 planes SaaS
|
|
- `apps/database/seeds/prod/02-permissions.sql` - 21 permisos + 8 feature flags
|
|
- `apps/database/seeds/prod/03-notification-templates.sql` - 6 email templates
|
|
|
|
#### Resultado
|
|
- **Plans:** Free, Starter ($29), Pro ($79), Enterprise
|
|
- **Permissions:** users:*, roles:*, billing:*, settings:*, api_keys:*, audit:*, features:*, notifications:*
|
|
- **Feature Flags:** dark_mode, api_access, analytics_basic/advanced, ai_assistant, slack/zapier integration
|
|
- **Templates:** welcome, email_verification, password_reset, invitation, invoice_paid, trial_ending
|
|
|
|
#### Notas
|
|
- Plans incluyen limits JSONB para enforcement
|
|
- Permissions con categorias y flags is_sensitive/requires_owner
|
|
- Templates con variables para renderizado dinamico
|
|
|
|
---
|
|
|
|
### [2026-01-07] SAAS-006-SCRIPTS
|
|
**Estado:** completado
|
|
**Agente:** Database-Agent
|
|
**Duracion:** ~30m
|
|
**SP:** 1
|
|
|
|
#### Descripcion
|
|
Creacion de scripts de creacion y recreacion de base de datos.
|
|
|
|
#### Archivos Creados
|
|
- `apps/database/scripts/create-database.sh` - Script de creacion completa
|
|
- `apps/database/scripts/drop-and-recreate.sh` - Script de drop y recreacion
|
|
|
|
#### Resultado
|
|
- Script de 7 pasos: conexion, usuario, database, extensions, DDL, tables, seeds
|
|
- Soporte para variables de entorno configurables
|
|
- Manejo de usuarios sin privilegio CREATEROLE
|
|
- Verificacion automatica de tablas y seeds
|
|
|
|
#### Notas
|
|
- Usa gamilit_user con CREATEDB como admin alternativo
|
|
- FORCE=1 para skip confirmacion en drop-and-recreate
|
|
|
|
---
|
|
|
|
### [2026-01-07] SAAS-007-VALIDATE
|
|
**Estado:** completado
|
|
**Agente:** Database-Agent
|
|
**Duracion:** ~15m
|
|
**SP:** 1
|
|
|
|
#### Descripcion
|
|
Validacion de DDL ejecutando recreacion completa de la base de datos.
|
|
|
|
#### Resultado
|
|
- 27 tablas creadas exitosamente
|
|
- 4 planes cargados
|
|
- 21 permisos cargados
|
|
- 8 feature flags cargados
|
|
- 6 notification templates cargados
|
|
|
|
#### Correcciones Aplicadas
|
|
- UUIDs en seeds corregidos (p0000000 -> a0000001, nt000000 -> b0000001)
|
|
|
|
---
|
|
|
|
## TAREAS PENDIENTES
|
|
|
|
| ID | Tarea | Prioridad | SP | Dependencias |
|
|
|----|-------|-----------|-----|--------------|
|
|
| SAAS-008-STORAGE | DDL schema storage | P2 | 2 | - |
|
|
|
|
---
|
|
|
|
## METRICAS
|
|
|
|
| Metrica | Valor |
|
|
|---------|-------|
|
|
| Tablas creadas | 27 |
|
|
| RLS policies | 20+ |
|
|
| Funciones | 22 |
|
|
| Triggers | 14 |
|
|
| Enums | 19 |
|
|
| Seeds (prod) | 3 archivos |
|
|
| Scripts | 2 (create, drop-recreate) |
|
|
| SP completados | 28/28 (100% Fase 1 DDL + Scripts) |
|
|
|
|
---
|
|
|
|
## ARCHIVOS CREADOS (RESUMEN)
|
|
|
|
```
|
|
apps/database/
|
|
├── ddl/
|
|
│ ├── 00-extensions.sql
|
|
│ ├── 01-schemas.sql
|
|
│ ├── 02-enums.sql
|
|
│ ├── 03-functions.sql
|
|
│ └── schemas/
|
|
│ ├── auth/tables/
|
|
│ │ ├── 01-sessions.sql
|
|
│ │ ├── 02-tokens.sql
|
|
│ │ └── 03-oauth.sql
|
|
│ ├── tenants/tables/
|
|
│ │ ├── 01-tenants.sql
|
|
│ │ └── 02-tenant-settings.sql
|
|
│ ├── users/tables/
|
|
│ │ ├── 01-users.sql
|
|
│ │ ├── 02-roles.sql
|
|
│ │ └── 03-invitations.sql
|
|
│ ├── billing/tables/
|
|
│ │ ├── 01-subscriptions.sql
|
|
│ │ └── 02-invoices.sql
|
|
│ ├── plans/tables/
|
|
│ │ └── 01-plans.sql
|
|
│ ├── audit/tables/
|
|
│ │ └── 01-audit-logs.sql
|
|
│ ├── notifications/tables/
|
|
│ │ └── 01-notifications.sql
|
|
│ └── feature_flags/tables/
|
|
│ └── 01-flags.sql
|
|
├── seeds/
|
|
│ ├── prod/
|
|
│ │ ├── 01-plans.sql
|
|
│ │ ├── 02-permissions.sql
|
|
│ │ └── 03-notification-templates.sql
|
|
│ └── dev/
|
|
├── scripts/
|
|
│ ├── create-database.sh
|
|
│ └── drop-and-recreate.sh
|
|
└── README.md
|
|
```
|
|
|
|
---
|
|
|
|
**Ultima actualizacion:** 2026-01-07
|
|
**Actualizado por:** Orquestador
|