mirror of
https://github.com/marcogll/AnchorOS.git
synced 2026-03-15 11:24:26 +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)
343 lines
8.6 KiB
Markdown
343 lines
8.6 KiB
Markdown
# 🚀 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:**
|
|
```bash
|
|
./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:**
|
|
```bash
|
|
./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:**
|
|
```bash
|
|
./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:**
|
|
```bash
|
|
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)
|
|
1. Ve a: https://supabase.com/dashboard/project/pvvwbnybkadhreuqijsl/sql
|
|
2. Copia el contenido de: `db/migrations/00_FULL_MIGRATION_FINAL.sql`
|
|
3. Pega en el SQL Editor
|
|
4. Haz clic en "Run"
|
|
|
|
### Opción B: Usar SQL desde Dashboard
|
|
Para el seed, ejecuta estas consultas una por una:
|
|
|
|
**Crear locations:**
|
|
```sql
|
|
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:**
|
|
```sql
|
|
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:**
|
|
1. Ve a: https://supabase.com/dashboard/project/pvvwbnybkadhreuqijsl/auth/users
|
|
2. Haz clic en "Add user"
|
|
3. Crea los usuarios con los emails de `scripts/create-auth-users.js`
|
|
|
|
---
|
|
|
|
## 📝 Flujo de Ejecución Recomendado
|
|
|
|
### Si el puerto 5432 está ABIERTO:
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```bash
|
|
# 1. Verificar conexión
|
|
./scripts/check-connection.sh
|
|
|
|
# Esto te dirá que el puerto está bloqueado
|
|
# Entonces usa Supabase Dashboard
|
|
```
|
|
|
|
**En Supabase Dashboard:**
|
|
1. Ve a: https://supabase.com/dashboard/project/pvvwbnybkadhreuqijsl/sql
|
|
2. Copia el contenido de: `db/migrations/00_FULL_MIGRATION_FINAL.sql`
|
|
3. Pega en el SQL Editor
|
|
4. Haz clic en "Run"
|
|
5. Para el seed, ejecuta las consultas de `scripts/simple-seed.sh` una por una
|
|
6. 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:**
|
|
1. Verifica que las variables de entorno estén en `.env.local`
|
|
2. Verifica que el puerto 5432 no esté bloqueado
|
|
3. Si está bloqueado, usa Supabase Dashboard
|
|
|
|
### Error: "Password authentication failed"
|
|
**Solución:**
|
|
1. Verifica que `SUPABASE_SERVICE_ROLE_KEY` sea correcto
|
|
2. Verifica que no tenga espacios o caracteres especiales
|
|
3. 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 paso
|
|
- **`docs/STEP_BY_STEP_AUTH_CONFIG.md`** - Guía de configuración de Auth
|
|
- **`docs/POST_MIGRATION_SUCCESS.md`** - Guía post-migración
|
|
- **`docs/QUICK_START_POST_MIGRATION.md`** - Guía rápida de referencia
|
|
|
|
---
|
|
|
|
## ✅ Checklist
|
|
|
|
### Verificar Conexión
|
|
- [ ] `check-connection.sh` ejecutado
|
|
- [ ] Puerto 5432 abierto (o usar Dashboard)
|
|
- [ ] Conexión a DB exitosa
|
|
|
|
### Verificar Migraciones
|
|
- [ ] `simple-verify.sh` ejecutado
|
|
- [ ] Todas las tablas creadas (8/8)
|
|
- [ ] Todas las funciones creadas (14/14)
|
|
- [ ] Todos los triggers activos (17+)
|
|
|
|
### Seed de Datos
|
|
- [ ] `simple-seed.sh` ejecutado
|
|
- [ ] 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.js` ejecutado
|
|
- [ ] 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:
|
|
|
|
1. **Probar login** con las credenciales:
|
|
- Admin: `admin@salonos.com` / `Admin123!`
|
|
- Customer: `sofia.ramirez@example.com` / `Customer123!`
|
|
|
|
2. **Verificar políticas RLS** en Supabase Dashboard
|
|
|
|
3. **Continuar con el desarrollo** de la aplicación
|
|
|
|
---
|
|
|
|
**¿Necesitas ayuda con alguno de los scripts?**
|