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)
This commit is contained in:
Marco Gallegos
2026-01-15 14:58:28 -06:00
parent ebbd9e3762
commit 4707ddbd5a
40 changed files with 10038 additions and 13 deletions

229
SIMPLE_GUIDE.md Normal file
View File

@@ -0,0 +1,229 @@
# 🚀 GUÍA SIMPLE - SALONOS
## ✅ ESTADO
- ✅ Migraciones ejecutadas exitosamente en Supabase
- ✅ Scripts simples creados para facilitar el setup
- ✅ Base de datos lista para desarrollo
---
## 📋 PASOS RÁPIDOS (EN ORDEN)
### Paso 1: Verificar Conexión
```bash
npm run simple:check
```
**Qué hace:** Verifica si puedes conectarte a Supabase desde la línea de comandos.
**Si dice "Puerto 5432 está bloqueado":**
- No te preocupes
- Usa Supabase Dashboard: https://supabase.com/dashboard/project/pvvwbnybkadhreuqijsl/sql
- Ignora los pasos 2 y 3, ve directo al paso "ALTERNATIVA: USAR SUPABASE DASHBOARD"
---
### Paso 2: Verificar Migraciones
```bash
npm run simple:verify
```
**Qué hace:** Verifica que todo esté correcto en la base de datos.
**Output esperado:**
```
🎉 TODAS LAS MIGRACIONES ESTÁN CORRECTAS
```
---
### Paso 3: Crear Datos de Prueba
```bash
npm run simple:seed
```
**Qué hace:** Crea locations, staff, services, customers, invitations, bookings.
**Output esperado:**
```
🎉 SEED DE DATOS COMPLETADO EXITOSAMENTE
```
---
### Paso 4: Crear Usuarios de Auth
```bash
npm run auth:create
```
**Qué hace:** Crea usuarios de staff y customers en Supabase Auth automáticamente.
**Output esperado:**
```
🎉 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!
```
---
## 🚨 ALTERNATIVA: USAR SUPABASE DASHBOARD
Si el puerto 5432 está bloqueado (común en empresas con firewall):
### Opción 1: Ejecutar Migraciones Completas
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 2: Crear Usuarios Manualmente
1. Ve a: https://supabase.com/dashboard/project/pvvwbnybkadhreuqijsl/auth/users
2. Haz clic en **"Add user"**
3. Crea estos usuarios:
**Admin:**
- Email: `admin@salonos.com`
- Password: `Admin123!`
- Auto Confirm: ON
**Staff (Manager Centro):**
- Email: `manager.centro@salonos.com`
- Password: `Manager123!`
- Auto Confirm: ON
**Customer (Gold):**
- Email: `sofia.ramirez@example.com`
- Password: `Customer123!`
- Auto Confirm: ON
---
## 📚 GUÍAS DETALLADAS
Si necesitas más detalles:
- **`scripts/README.md`** - Documentación completa de todos los scripts
- **`docs/STEP_BY_STEP_VERIFICATION.md`** - Guía paso a paso detallada
- **`docs/STEP_BY_STEP_AUTH_CONFIG.md`** - Guía de configuración de Auth
- **`docs/QUICK_START_POST_MIGRATION.md`** - Guía rápida de referencia
---
## ✅ CHECKLIST
Después de ejecutar todos los pasos:
- [ ] Conexión verificada (o usando Dashboard)
- [ ] Migraciones verificadas (8 tablas, 14 funciones, 17+ triggers)
- [ ] Datos de prueba creados (3 locations, 6 resources, 8 staff, 6 services, 4 customers, 15 invitations, 5 bookings)
- [ ] Usuarios de Auth creados (8 staff + 4 customers)
- [ ] Credenciales de prueba guardadas
---
## 🎯 PRÓXIMOS PASOS
### Probar el Login
1. Ve a Supabase Dashboard: https://supabase.com/dashboard/project/pvvwbnybkadhreuqijsl/auth/users
2. Verifica que los usuarios estén creados
3. Intenta hacer login con una de las credenciales de prueba
### Verificar Políticas RLS
En Supabase Dashboard, ejecuta esta consulta:
```sql
-- Verificar que Artist no puede ver email/phone de customers
SELECT
c.first_name,
c.email, -- Debería ser NULL si eres Artist
c.phone -- Debería ser NULL si eres Artist
FROM customers c
LIMIT 1;
```
### Continuar con el Desarrollo
Una vez que todo esté configurado:
1. **Implementar Tarea 1.3:** Short ID & Invitaciones (backend)
2. **Implementar Tarea 1.4:** CRM Base (endpoints CRUD)
3. **Iniciar desarrollo del frontend** (The Boutique / The HQ)
---
## 💡 TIPS
### Tip 1: Scripts vs Dashboard
- **Scripts** son más rápidos pero requieren puerto 5432 abierto
- **Dashboard** es más lento pero siempre funciona (si el puerto está bloqueado)
### Tip 2: Guardar las Credenciales
Guarda estas credenciales en un lugar seguro:
**Admin:**
- Email: `admin@salonos.com`
- Password: `Admin123!`
**Customer (Gold):**
- Email: `sofia.ramirez@example.com`
- Password: `Customer123!`
### Tip 3: Verificar Cada Paso
No continúes al siguiente paso hasta verificar que el anterior esté correcto.
### Tip 4: Consultar los Logs
Si algo falla, consulta los logs en Supabase Dashboard.
---
## 🆘 AYUDA
Si encuentras problemas:
1. **Revisa los logs de Supabase Dashboard**
2. **Ejecuta el script de verificación** (`npm run simple:verify`)
3. **Consulta las guías detalladas** en `docs/`
4. **Si el puerto está bloqueado**, usa Supabase Dashboard
---
## 📞 CONTACTO
Para dudas sobre la implementación, consultar:
- **PRD.md**: Reglas de negocio
- **TASKS.md**: Plan de ejecución
- **AGENTS.md**: Roles y responsabilidades
- **scripts/README.md**: Documentación completa de scripts
---
## 🎉 ¡LISTO PARA COMENZAR!
Todo está preparado para que empieces el desarrollo de SalonOS.
**¿Qué deseas hacer ahora?**
1. **Ejecutar los scripts simples** (si el puerto está abierto)
2. **Usar Supabase Dashboard** (si el puerto está bloqueado)
3. **Comenzar el desarrollo del frontend** (Next.js)
4. **Implementar las tareas de backend** (Tarea 1.3 y 1.4)
---
**¡El futuro es tuyo!** 🚀