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

11 KiB

🎉 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

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

SELECT routine_name
FROM information_schema.routines
WHERE routine_schema = 'public'
ORDER BY routine_name;

Probar Short ID

SELECT generate_short_id();

Probar Código de Invitación

SELECT generate_invitation_code();

Verificar Bookings

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

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

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

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

  1. docs/00_FULL_MIGRATION_FINAL_README.md

    • Guía de la migración final
    • Instrucciones de ejecución
    • Consultas de verificación
  2. docs/MIGRATION_CORRECTION.md

    • Detalle de las correcciones aplicadas
    • Problemas encontrados y soluciones
  3. docs/SUPABASE_DASHBOARD_MIGRATION.md

    • Guía de ejecución en Supabase Dashboard
    • Solución de problemas
  4. docs/POST_MIGRATION_SUCCESS.md

    • Guía general post-migración
    • Scripts de prueba
    • Verificación de funcionalidades

Documentación Técnica

  1. db/migrations/README.md

    • Documentación técnica de migraciones
    • Orden de ejecución
    • Verificación
  2. db/migrations/00_FULL_MIGRATION_FINAL.sql

    • Script final consolidado
    • Todas las migraciones en un archivo

Scripts

  1. scripts/verify-migration.sql

    • Script completo de verificación
    • 12 consultas de verificación
  2. scripts/seed-data.sql

    • Script completo de seed
    • Crea todos los datos de prueba

Estado del Proyecto

  1. 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! 🚀