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)
🚀 Scripts Simples - SalonOS
Este directorio contiene scripts simplificados para facilitar el setup de SalonOS.
📋 Scripts Disponibles
1. check-connection.sh
Qué hace: Verifica la conexión a Supabase y si el puerto 5432 está abierto.
Cómo ejecutar:
./scripts/check-connection.sh
Output esperado:
✅ psql instalado
✅ Host alcanzable
✅ Puerto 5432 está abierto
✅ Conexión a base de datos exitosa
✅ Tablas encontradas: 8/8
✅ Funciones encontradas: 14
Si falla:
- Si el puerto está bloqueado, usa Supabase Dashboard
- Si falla la conexión, verifica las credenciales
2. simple-verify.sh
Qué hace: Verifica que todas las migraciones están correctas.
Cómo ejecutar:
./scripts/simple-verify.sh
Output esperado:
📊 Verificando tablas...
✅ Tablas: 8/8
📊 Verificando funciones...
✅ Funciones: 14/14
📊 Verificando triggers...
✅ Triggers: 17+/17+
📊 Verificando políticas RLS...
✅ Políticas RLS: 24+/20+
📊 Probando generación de Short ID...
✅ Short ID: A3F7X2 (6 caracteres)
📊 Probando generación de código de invitación...
✅ Código de invitación: X9J4K2M5N8 (10 caracteres)
==========================================
RESUMEN
==========================================
🎉 TODAS LAS MIGRACIONES ESTÁN CORRECTAS
==========================================
3. simple-seed.sh
Qué hace: Crea todos los datos de prueba en la base de datos.
Cómo ejecutar:
./scripts/simple-seed.sh
Output esperado:
📍 Creando locations...
✅ Locations: 3/3
🪑 Creando resources...
✅ Resources: 6/6
👥 Creando staff...
✅ Staff: 8/8
💇 Creando services...
✅ Services: 6/6
👩 Creando customers...
✅ Customers: 4/4
💌 Creando invitations...
✅ Invitaciones: 15/15
📅 Creando bookings...
✅ Bookings: 5/5
==========================================
RESUMEN
==========================================
🎉 SEED DE DATOS COMPLETADO EXITOSAMENTE
==========================================
4. create-auth-users.js
Qué hace: Crea usuarios de staff y customers en Supabase Auth automáticamente.
Requiere: npm install @supabase/supabase-js
Cómo ejecutar:
node scripts/create-auth-users.js
Output esperado:
👥 Creando usuarios de staff (8 usuarios)...
✅ Admin Principal creado (ID: ...)
✅ Manager Centro creado (ID: ...)
✅ Manager Polanco creado (ID: ...)
✅ Staff Coordinadora creado (ID: ...)
✅ Artist María García creado (ID: ...)
✅ Artist Ana Rodríguez creado (ID: ...)
✅ Artist Carla López creado (ID: ...)
✅ Artist Laura Martínez creado (ID: ...)
✅ Usuarios de staff creados: 8/8
🔄 Actualizando tabla staff con user_ids...
✅ Admin Principal actualizado con user_id
✅ Manager Centro actualizado con user_id
...
✅ Staff actualizados: 8/8
👩 Creando usuarios de customers (4 usuarios)...
✅ Sofía Ramírez creado (ID: ...)
✅ Valentina Hernández creado (ID: ...)
✅ Camila López creado (ID: ...)
✅ Isabella García creado (ID: ...)
✅ Usuarios de customers creados: 4/4
🔄 Actualizando tabla customers con user_ids...
✅ Sofía Ramírez actualizado con user_id
...
✅ Customers actualizados: 4/4
==========================================
RESUMEN FINAL
==========================================
Staff creados: 8/8
Staff actualizados: 8/8
Customers creados: 4/4
Customers actualizados: 4/4
==========================================
🎉 TODOS LOS USUARIOS HAN SIDO CREADOS Y ACTUALIZADOS
📝 Credenciales de prueba:
ADMIN:
Email: admin@salonos.com
Password: Admin123!
CUSTOMER (Gold):
Email: sofia.ramirez@example.com
Password: Customer123!
🚨 Si el Puerto 5432 Está Bloqueado
Si ejecutas check-connection.sh y el puerto está bloqueado, tienes estas opciones:
Opción A: Usar Supabase Dashboard (Recomendado)
- Ve a: https://supabase.com/dashboard/project/pvvwbnybkadhreuqijsl/sql
- Copia el contenido de:
db/migrations/00_FULL_MIGRATION_FINAL.sql - Pega en el SQL Editor
- Haz clic en "Run"
Opción B: Usar SQL desde Dashboard
Para el seed, ejecuta estas consultas una por una:
Crear locations:
INSERT INTO locations (name, timezone, address, phone, is_active)
VALUES
('Salón Principal - Centro', 'America/Mexico_City', 'Av. Reforma 222', '+52 55 1234 5678', true),
('Salón Norte - Polanco', 'America/Mexico_City', 'Av. Masaryk 123', '+52 55 2345 6789', true),
('Salón Sur - Coyoacán', 'America/Mexico_City', 'Calle Hidalgo 456', '+52 55 3456 7890', true);
Crear staff:
INSERT INTO staff (user_id, location_id, role, display_name, phone, is_active)
VALUES
(uuid_generate_v4(), (SELECT id FROM locations WHERE name = 'Salón Principal - Centro' LIMIT 1), 'admin', 'Admin Principal', '+52 55 1111 2222', true),
(uuid_generate_v4(), (SELECT id FROM locations WHERE name = 'Salón Principal - Centro' LIMIT 1), 'manager', 'Manager Centro', '+52 55 2222 3333', true),
(uuid_generate_v4(), (SELECT id FROM locations WHERE name = 'Salón Principal - Centro' LIMIT 1), 'artist', 'Artist María García', '+52 55 4444 5555', true);
Crear usuarios de Auth manualmente:
- Ve a: https://supabase.com/dashboard/project/pvvwbnybkadhreuqijsl/auth/users
- Haz clic en "Add user"
- Crea los usuarios con los emails de
scripts/create-auth-users.js
📝 Flujo de Ejecución Recomendado
Si el puerto 5432 está ABIERTO:
# 1. Verificar conexión
./scripts/check-connection.sh
# 2. Verificar migraciones
./scripts/simple-verify.sh
# 3. Crear datos de prueba
./scripts/simple-seed.sh
# 4. Crear usuarios de Auth
node scripts/create-auth-users.js
Si el puerto 5432 está BLOQUEADO:
# 1. Verificar conexión
./scripts/check-connection.sh
# Esto te dirá que el puerto está bloqueado
# Entonces usa Supabase Dashboard
En Supabase Dashboard:
- Ve a: https://supabase.com/dashboard/project/pvvwbnybkadhreuqijsl/sql
- Copia el contenido de:
db/migrations/00_FULL_MIGRATION_FINAL.sql - Pega en el SQL Editor
- Haz clic en "Run"
- Para el seed, ejecuta las consultas de
scripts/simple-seed.shuna por una - Para crear usuarios, usa el Dashboard manualmente
🔧 Troubleshooting
Error: "psql: command not found"
Solución: Instala PostgreSQL client
- macOS:
brew install postgresql - Ubuntu/Debian:
sudo apt-get install postgresql-client - Windows: Descargar desde https://www.postgresql.org/download/windows/
Error: "connection to server failed"
Solución:
- Verifica que las variables de entorno estén en
.env.local - Verifica que el puerto 5432 no esté bloqueado
- Si está bloqueado, usa Supabase Dashboard
Error: "Password authentication failed"
Solución:
- Verifica que
SUPABASE_SERVICE_ROLE_KEYsea correcto - Verifica que no tenga espacios o caracteres especiales
- Regenera el key en Supabase Dashboard si es necesario
Error: "relation already exists"
Solución:
- Los datos ya existen. Continúa con el siguiente script
- O elimina y recrea la base de datos
Error: "User already registered"
Solución:
- El usuario ya existe en Supabase Auth
- Borra el usuario en Supabase Dashboard y vuelve a ejecutar el script
📚 Documentación Adicional
docs/STEP_BY_STEP_VERIFICATION.md- Guía detallada paso a pasodocs/STEP_BY_STEP_AUTH_CONFIG.md- Guía de configuración de Authdocs/POST_MIGRATION_SUCCESS.md- Guía post-migracióndocs/QUICK_START_POST_MIGRATION.md- Guía rápida de referencia
✅ Checklist
Verificar Conexión
check-connection.shejecutado- Puerto 5432 abierto (o usar Dashboard)
- Conexión a DB exitosa
Verificar Migraciones
simple-verify.shejecutado- Todas las tablas creadas (8/8)
- Todas las funciones creadas (14/14)
- Todos los triggers activos (17+)
Seed de Datos
simple-seed.shejecutado- Locations creadas (3/3)
- Resources creados (6/6)
- Staff creado (8/8)
- Services creados (6/6)
- Customers creados (4/4)
- Invitaciones creadas (15/15)
- Bookings creados (5/5)
Crear Usuarios Auth
create-auth-users.jsejecutado- Staff creados (8/8)
- Staff actualizados (8/8)
- Customers creados (4/4)
- Customers actualizados (4/4)
🎯 Próximos Pasos
Después de completar todos los scripts:
-
Probar login con las credenciales:
- Admin:
admin@salonos.com/Admin123! - Customer:
sofia.ramirez@example.com/Customer123!
- Admin:
-
Verificar políticas RLS en Supabase Dashboard
-
Continuar con el desarrollo de la aplicación
¿Necesitas ayuda con alguno de los scripts?