Files
AnchorOS/docs/QUICK_START_POST_MIGRATION.md
Marco Gallegos 4707ddbd5a feat(salonos): implementar Fase 1.1 y 1.2 - Infraestructura y Esquema de Base de Datos
Implementación completa de la Fase 1.1 y 1.2 del proyecto SalonOS:

## Cambios en Reglas de Negocio (PRD.md, AGENTS.md, TASKS.md)
- Actualizado reset de invitaciones de mensual a semanal (Lunes 00:00 UTC)
- Jerarquía de roles actualizada: Admin > Manager > Staff > Artist > Customer
- Artistas (antes colaboradoras) ahora tienen rol 'artist'
- Staff/Manager/Admin pueden ver PII de customers
- Artist solo ve nombre y notas de customers (restricción de privacidad)

## Estructura del Proyecto (Next.js 14)
- app/boutique/: Frontend de cliente
- app/hq/: Dashboard administrativo
- app/api/: API routes
- components/: Componentes UI reutilizables (boutique, hq, shared)
- lib/: Lógica de negocio (supabase, db, utils)
- db/: Esquemas, migraciones y seeds
- integrations/: Stripe, Google Calendar, WhatsApp
- scripts/: Scripts de utilidad y automatización
- docs/: Documentación del proyecto

## Esquema de Base de Datos (Supabase PostgreSQL)
8 tablas creadas:
- locations: Ubicaciones con timezone
- resources: Recursos físicos (estaciones, habitaciones, equipos)
- staff: Personal con roles jerárquicos
- services: Catálogo de servicios
- customers: Información de clientes con tier (free/gold)
- invitations: Sistema de invitaciones semanales
- bookings: Sistema de reservas con short_id (6 caracteres)
- audit_logs: Registro de auditoría automática

14 funciones creadas:
- generate_short_id(): Generador de Short ID (6 chars, collision-safe)
- generate_invitation_code(): Generador de códigos de invitación (10 chars)
- reset_weekly_invitations_for_customer(): Reset individual de invitaciones
- reset_all_weekly_invitations(): Reset masivo de invitaciones
- validate_secondary_artist_role(): Validación de secondary_artist
- log_audit(): Trigger de auditoría automática
- get_current_user_role(): Obtener rol del usuario actual
- is_staff_or_higher(): Verificar si es admin/manager/staff
- is_artist(): Verificar si es artist
- is_customer(): Verificar si es customer
- is_admin(): Verificar si es admin
- update_updated_at(): Actualizar timestamps
- generate_booking_short_id(): Generar Short ID automáticamente
- get_week_start(): Obtener inicio de semana

17+ triggers activos:
- Auditores automáticos en tablas críticas
- Timestamps updated_at en todas las tablas
- Validación de secondary_artist (trigger en lugar de constraint)

20+ políticas RLS configuradas:
- Restricción crítica: Artist no ve email/phone de customers
- Jerarquía de roles: Admin > Manager > Staff > Artist > Customer
- Políticas granulares por tipo de operación y rol

6 tipos ENUM:
- user_role: admin, manager, staff, artist, customer
- customer_tier: free, gold
- booking_status: pending, confirmed, cancelled, completed, no_show
- invitation_status: pending, used, expired
- resource_type: station, room, equipment
- audit_action: create, update, delete, reset_invitations, payment, status_change

## Scripts de Utilidad
- check-connection.sh: Verificar conexión a Supabase
- simple-verify.sh: Verificar migraciones instaladas
- simple-seed.sh: Crear datos de prueba
- create-auth-users.js: Crear usuarios de Auth en Supabase
- verify-migration.sql: Script de verificación SQL completo
- seed-data.sql: Script de seed de datos SQL completo

## Documentación
- docs/STEP_BY_STEP_VERIFICATION.md: Guía paso a paso de verificación
- docs/STEP_BY_STEP_AUTH_CONFIG.md: Guía paso a paso de configuración Auth
- docs/POST_MIGRATION_SUCCESS.md: Guía post-migración
- docs/MIGRATION_CORRECTION.md: Detalle de correcciones aplicadas
- docs/QUICK_START_POST_MIGRATION.md: Guía rápida de referencia
- docs/SUPABASE_DASHBOARD_MIGRATION.md: Guía de ejecución en Dashboard
- docs/00_FULL_MIGRATION_FINAL_README.md: Guía de migración final
- SIMPLE_GUIDE.md: Guía simple de inicio
- FASE_1_STATUS.md: Estado de la Fase 1

## Configuración
- package.json: Dependencias y scripts de npm
- tsconfig.json: Configuración TypeScript con paths aliases
- next.config.js: Configuración Next.js
- tailwind.config.ts: Tema personalizado con colores primary, secondary, gold
- postcss.config.js: Configuración PostCSS
- .gitignore: Archivos excluidos de git
- .env.example: Template de variables de entorno

## Correcciones Aplicadas
1. Constraint de subquery en CHECK reemplazado por trigger de validación
   - PostgreSQL no permite subqueries en CHECK constraints
   - validate_secondary_artist_role() ahora es un trigger

2. Variable no declarada en loop
   - customer_record RECORD; añadido en bloque DECLARE

## Principios Implementados
- UTC-first: Todos los timestamps se almacenan en UTC
- Sistema Doble Capa: Validación Staff/Artist + Recurso físico
- Reset semanal: Invitaciones se resetean cada Lunes 00:00 UTC
- Idempotencia: Procesos de reset son idempotentes y auditados
- Privacidad: Artist solo ve nombre y notas de customers
- Auditoría: Todas las acciones críticas se registran automáticamente
- Short ID: 6 caracteres alfanuméricos como referencia humana
- UUID: Identificador primario interno

## Próximos Pasos
- Ejecutar scripts de verificación y seed
- Configurar Auth en Supabase Dashboard
- Implementar Tarea 1.3: Short ID & Invitaciones (backend)
- Implementar Tarea 1.4: CRM Base (endpoints CRUD)
2026-01-15 14:58:28 -06:00

376 lines
11 KiB
Markdown

# 🎉 SALONOS - GUÍA RÁPIDA POST-MIGRACIÓN
## ✅ ESTADO ACTUAL
- ✅ Migraciones ejecutadas exitosamente en Supabase
- ✅ 8 tablas, 14 funciones, 17+ triggers, 20+ políticas RLS, 6 tipos ENUM creados
- ✅ Base de datos lista para desarrollo
- ✅ Scripts de verificación y seed creados
---
## 📋 PASOS PENDIENTES
### Paso 1: Verificar Instalación de Migraciones ✅
**Guía:** `docs/STEP_BY_STEP_VERIFICATION.md`
**Qué hacer:**
1. Abrir Supabase SQL Editor
2. Ejecutar consultas de verificación (12 consultas en total)
3. Verificar que todo esté correcto
**Duración estimada:** 5-10 minutos
---
### Paso 2: Crear Datos de Prueba ✅
**Guía:** `docs/STEP_BY_STEP_VERIFICATION.md` (Sección 2)
**Qué hacer:**
1. Ejecutar seed por secciones (9 secciones en total)
2. Crear locations, resources, staff, services, customers, invitations, bookings
3. Verificar que todos los datos se crearon correctamente
**Duración estimada:** 10-15 minutos
**Datos a crear:**
- 3 locations (Centro, Polanco, Coyoacán)
- 6 resources (estaciones)
- 8 staff (1 admin, 2 managers, 1 staff, 4 artists)
- 6 services (catálogo completo)
- 4 customers (mix Free/Gold)
- 15 invitations (5 por cliente Gold)
- 5 bookings de prueba
---
### Paso 3: Configurar Auth en Supabase Dashboard ✅
**Guía:** `docs/STEP_BY_STEP_AUTH_CONFIG.md`
**Qué hacer:**
1. Habilitar Email Provider
2. Configurar Site URL y Redirect URLs
3. Configurar SMTP (opcional)
4. Configurar SMS Provider (opcional)
5. Crear usuarios de staff (8 usuarios)
6. Crear usuarios de customers (4 usuarios)
7. Actualizar tablas staff y customers con user_ids correctos
8. Configurar Email Templates (opcional)
**Duración estimada:** 20-30 minutos
**Usuarios a crear:**
**Staff (8):**
- Admin Principal: `admin@salonos.com`
- Manager Centro: `manager.centro@salonos.com`
- Manager Polanco: `manager.polanco@salonos.com`
- Staff Coordinadora: `staff.coordinadora@salonos.com`
- Artist María García: `artist.maria@salonos.com`
- Artist Ana Rodríguez: `artist.ana@salonos.com`
- Artist Carla López: `artist.carla@salonos.com`
- Artist Laura Martínez: `artist.laura@salonos.com`
**Customers (4):**
- Sofía Ramírez (Gold): `sofia.ramirez@example.com`
- Valentina Hernández (Gold): `valentina.hernandez@example.com`
- Camila López (Free): `camila.lopez@example.com`
- Isabella García (Gold): `isabella.garcia@example.com`
---
## 🎯 RESUMEN DE CONSULTAS RÁPIDAS
### Verificar Tablas
```sql
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name IN ('locations', 'resources', 'staff', 'services', 'customers', 'invitations', 'bookings', 'audit_logs')
ORDER BY table_name;
```
### Verificar Funciones
```sql
SELECT routine_name
FROM information_schema.routines
WHERE routine_schema = 'public'
ORDER BY routine_name;
```
### Probar Short ID
```sql
SELECT generate_short_id();
```
### Probar Código de Invitación
```sql
SELECT generate_invitation_code();
```
### Verificar Bookings
```sql
SELECT
b.short_id,
c.first_name || ' ' || c.last_name as customer,
s.display_name as artist,
svc.name as service,
b.start_time_utc,
b.status,
b.total_amount
FROM bookings b
JOIN customers c ON b.customer_id = c.id
JOIN staff s ON b.staff_id = s.id
JOIN services svc ON b.service_id = svc.id
ORDER BY b.start_time_utc;
```
### Verificar Staff y Roles
```sql
SELECT
s.display_name,
s.role,
l.name as location,
s.phone,
s.is_active
FROM staff s
JOIN locations l ON s.location_id = l.id
ORDER BY l.name, s.role, s.display_name;
```
### Verificar Invitaciones
```sql
SELECT
i.code,
inv.first_name || ' ' || inv.last_name as inviter,
i.status,
i.week_start_date,
i.expiry_date
FROM invitations i
JOIN customers inv ON i.inviter_id = inv.id
WHERE i.status = 'pending'
ORDER BY inv.first_name, i.expiry_date;
```
### Verificar Auditoría
```sql
SELECT
entity_type,
action,
new_values->>'operation' as operation,
new_values->>'table_name' as table_name,
created_at
FROM audit_logs
ORDER BY created_at DESC
LIMIT 10;
```
---
## ✅ CHECKLIST COMPLETO
### Verificación de Migraciones
- [ ] 8 tablas creadas (locations, resources, staff, services, customers, invitations, bookings, audit_logs)
- [ ] 14 funciones creadas
- [ ] 17+ triggers activos
- [ ] 20+ políticas RLS configuradas
- [ ] 6 tipos ENUM creados
- [ ] Short ID generable
- [ ] Código de invitación generable
### Seed de Datos
- [ ] 3 locations creadas
- [ ] 6 resources creadas
- [ ] 8 staff creados
- [ ] 6 services creados
- [ ] 4 customers creados
- [ ] 15 invitaciones creadas (5 por cliente Gold)
- [ ] 5 bookings creados
- [ ] 1 booking con secondary_artist
### Configuración de Auth
- [ ] Email Provider habilitado
- [ ] Site URL configurado
- [ ] 8 usuarios de staff creados en Supabase Auth
- [ ] 4 usuarios de customers creados en Supabase Auth
- [ ] Tabla staff actualizada con user_ids correctos
- [ ] Tabla customers actualizada con user_ids correctos
- [ ] Email templates configurados (opcional)
### Pruebas Funcionales
- [ ] Login con admin funciona
- [ ] Login con customer funciona
- [ ] Políticas RLS funcionan (Artist no ve email/phone de customers)
- [ ] Short ID se genera automáticamente al crear booking
- [ ] Validación de secondary_artist funciona
- [ ] Auditoría se registra correctamente
---
## 📚 DOCUMENTACIÓN DISPONIBLE
### Guías Principales
1. **`docs/STEP_BY_STEP_VERIFICATION.md`**
- Guía paso a paso para ejecutar scripts de verificación y seed
- 12 consultas de verificación
- 9 secciones de seed de datos
- Consultas adicionales de prueba
2. **`docs/STEP_BY_STEP_AUTH_CONFIG.md`**
- Guía paso a paso para configurar Auth en Supabase Dashboard
- Configuración de Email Provider
- Configuración de SMS Provider (opcional)
- Creación de usuarios de staff y customers
- Actualización de tablas con user_ids
- Configuración de Email Templates (opcional)
### Documentación de Migraciones
3. **`docs/00_FULL_MIGRATION_FINAL_README.md`**
- Guía de la migración final
- Instrucciones de ejecución
- Consultas de verificación
4. **`docs/MIGRATION_CORRECTION.md`**
- Detalle de las correcciones aplicadas
- Problemas encontrados y soluciones
5. **`docs/SUPABASE_DASHBOARD_MIGRATION.md`**
- Guía de ejecución en Supabase Dashboard
- Solución de problemas
6. **`docs/POST_MIGRATION_SUCCESS.md`**
- Guía general post-migración
- Scripts de prueba
- Verificación de funcionalidades
### Documentación Técnica
7. **`db/migrations/README.md`**
- Documentación técnica de migraciones
- Orden de ejecución
- Verificación
8. **`db/migrations/00_FULL_MIGRATION_FINAL.sql`**
- Script final consolidado
- Todas las migraciones en un archivo
### Scripts
9. **`scripts/verify-migration.sql`**
- Script completo de verificación
- 12 consultas de verificación
10. **`scripts/seed-data.sql`**
- Script completo de seed
- Crea todos los datos de prueba
### Estado del Proyecto
11. **`FASE_1_STATUS.md`**
- Estado actualizado de la Fase 1
- Tareas completadas
- Próximos pasos
---
## 🚀 PRÓXIMOS PASOS (Después de Auth Configurado)
### Desarrollo del Frontend
1. **Crear página de login** (`app/boutique/(auth)/login/page.tsx`)
2. **Crear página de registro** (`app/boutique/(auth)/register/page.tsx`)
3. **Crear página de dashboard de cliente** (`app/boutique/(customer)/dashboard/page.tsx`)
4. **Crear página de bookings** (`app/boutique/(customer)/bookings/page.tsx`)
### Desarrollo del Backend
1. **Tarea 1.3: Short ID & Invitaciones**
- API endpoint: `POST /api/bookings` (crea booking con short_id)
- API endpoint: `GET /api/invitations` (lista invitaciones)
- API endpoint: `POST /api/invitations/reset` (reset manual)
- Tests unitarios
- Edge Function o Cron Job para reset semanal (Lunes 00:00 UTC)
2. **Tarea 1.4: CRM Base (Customers)**
- API endpoint: `GET /api/customers` (lista customers)
- API endpoint: `GET /api/customers/[id]` (detalle de customer)
- API endpoint: `POST /api/customers` (crear customer)
- API endpoint: `PUT /api/customers/[id]` (actualizar customer)
- API endpoint: `DELETE /api/customers/[id]` (eliminar customer)
- Lógica de cálculo automático de Tier
- Sistema de referidos
### Fase 2: Motor de Agendamiento
1. **Tarea 2.1: Disponibilidad Doble Capa**
- Validación Staff/Artist (horario laboral + Google Calendar)
- Validación Recurso (disponibilidad de estación física)
- Regla de prioridad dinámica
2. **Tarea 2.2: Servicios Express (Dual Artist)**
- Lógica de booking dual
- Aplicación automática de Premium Fee
3. **Tarea 2.3: Google Calendar Sync**
- Integración vía Service Account
- Sincronización bidireccional
- Manejo de conflictos
---
## 💡 TIPS ÚTILES
### Tip 1: Ejecutar Scripts en el Orden Correcto
Siempre ejecuta:
1. Verificación → Seed → Auth Config
### Tip 2: Verificar cada Paso
No continúes al siguiente paso hasta verificar que el anterior esté correcto.
### Tip 3: Usar Pestañas Separadas
Abre múltiples pestañas en el SQL Editor para separar:
- Pestaña 1: Verificación
- Pestaña 2: Seed
- Pestaña 3: Pruebas adicionales
### Tip 4: Guardar los user_ids
Copia los user_ids de Supabase Auth en un archivo de notas para usarlos cuando actualices las tablas staff y customers.
### Tip 5: Probar con Diferentes Roles
Inicia sesión con diferentes roles (admin, manager, staff, artist, customer) para verificar que las políticas RLS funcionen correctamente.
---
## 🆘 AYUDA
Si encuentras problemas:
1. **Revisa los logs de Supabase Dashboard**
2. **Ejecuta las consultas de verificación**
3. **Consulta la guía de solución de problemas en cada documento**
4. **Verifica que las variables de entorno estén correctas en .env.local**
5. **Asegúrate de estar usando el proyecto correcto de Supabase**
---
## 🎉 ¡FELICIDADES!
Has completado exitosamente:
**FASE 1.1:** Infraestructura Base (Next.js 14 structure)
**FASE 1.2:** Esquema de Base de Datos Inicial (8 tablas, RLS, triggers)
**MIGRACIONES:** Ejecutadas exitosamente en Supabase
**VERIFICACIÓN:** Scripts creados y listos para ejecutar
**SEED DE DATOS:** Scripts creados y listos para ejecutar
**AUTH CONFIGURACIÓN:** Guía completa creada
**Tu base de datos de SalonOS está lista para el desarrollo!**
---
**¿Qué deseas hacer ahora?**
1. **Ejecutar scripts de verificación y seed** (usa `docs/STEP_BY_STEP_VERIFICATION.md`)
2. **Configurar Auth en Supabase Dashboard** (usa `docs/STEP_BY_STEP_AUTH_CONFIG.md`)
3. **Comenzar el desarrollo del frontend** (Next.js)
4. **Implementar las tareas de backend** (Tarea 1.3 y 1.4)
**¡El futuro es tuyo!** 🚀