mirror of
https://github.com/marcogll/AnchorOS.git
synced 2026-03-15 14:24:27 +00:00
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)
376 lines
11 KiB
Markdown
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!** 🚀
|