mirror of
https://github.com/marcogll/AnchorOS.git
synced 2026-03-15 22:24:34 +00:00
203 lines
5.4 KiB
Markdown
203 lines
5.4 KiB
Markdown
# Sistema de Kiosko - Guía Rápida de Implementación
|
|
|
|
## Qué se Implementó
|
|
|
|
### 1. Base de Datos (SQL)
|
|
- ✅ Nuevo rol `kiosk` en el enum `user_role`
|
|
- ✅ Tabla `kiosks` con API key authentication
|
|
- ✅ Función `generate_kiosk_api_key()` para generar claves únicas
|
|
- ✅ Función `is_kiosk()` para verificar permisos
|
|
- ✅ Función `get_available_resources_with_priority()` para asignación inteligente
|
|
- ✅ Políticas RLS específicas para kiosk
|
|
- ✅ Triggers de audit logging para kiosks
|
|
|
|
### 2. Types (TypeScript)
|
|
- ✅ Agregado `kiosk` al tipo `UserRole`
|
|
- ✅ Nueva interfaz `Kiosk`
|
|
- ✅ Actualizado tipo `CustomerTier` con `black` y `VIP`
|
|
- ✅ Agregada tabla `kiosks` al tipo `Database`
|
|
|
|
### 3. API Routes (Next.js)
|
|
- ✅ `POST /api/kiosk/authenticate` - Autenticación de kiosko
|
|
- ✅ `GET /api/kiosk/bookings` - Listar bookings de la location
|
|
- ✅ `POST /api/kiosk/bookings` - Crear nuevo booking
|
|
- ✅ `POST /api/kiosk/bookings/[shortId]/confirm` - Confirmar booking
|
|
- ✅ `GET /api/kiosk/resources/available` - Ver recursos disponibles
|
|
- ✅ `POST /api/kiosk/walkin` - Crear reserva walk-in
|
|
|
|
### 4. Componentes UI
|
|
- ✅ `BookingConfirmation` - Flujo para confirmar citas
|
|
- ✅ `WalkInFlow` - Flujo para crear reservas walk-in
|
|
- ✅ `ResourceAssignment` - Muestra recursos con prioridad
|
|
- ✅ Página `kiosk/[locationId]/page.tsx` - Pantalla principal
|
|
|
|
### 5. Documentación
|
|
- ✅ Documentación completa en `docs/KIOSK_SYSTEM.md`
|
|
|
|
## Pasos para Poner en Producción
|
|
|
|
### 1. Ejecutar la Migración
|
|
|
|
```bash
|
|
# Opción 1: Via Supabase Dashboard
|
|
# 1. Ve a https://supabase.com/dashboard/project/pvvwbnybkadhreuqijsl/sql
|
|
# 2. Copia el contenido de supabase/migrations/20260116000000_add_kiosk_system.sql
|
|
# 3. Ejecuta el script
|
|
|
|
# Opción 2: Via CLI (si tienes configurado supabase db push)
|
|
supabase db push
|
|
```
|
|
|
|
### 2. Crear Kioskos
|
|
|
|
```sql
|
|
-- En Supabase SQL Editor
|
|
SELECT create_kiosk(
|
|
'<location-uuid>',
|
|
'kiosk-entrada-1',
|
|
'Kiosko Entrada Principal',
|
|
'192.168.1.100'::INET
|
|
);
|
|
|
|
-- Guarda el API key generado en un lugar seguro
|
|
```
|
|
|
|
### 3. Configurar Variables de Entorno
|
|
|
|
```env
|
|
# .env.local o .env.production
|
|
NEXT_PUBLIC_KIOSK_API_KEY=la-api-key-que-generaste-en-el-paso-anterior
|
|
```
|
|
|
|
### 4. Acceder al Kiosko
|
|
|
|
```
|
|
https://tu-dominio.com/kiosk/{location-id}
|
|
```
|
|
|
|
Ejemplo:
|
|
```
|
|
https://kiosk.anchor23.mx/550e8400-e29b-41d4-a716-446655440000
|
|
```
|
|
|
|
## Estructura de Archivos
|
|
|
|
```
|
|
AnchorOS/
|
|
├── supabase/
|
|
│ └── migrations/
|
|
│ └── 20260116000000_add_kiosk_system.sql
|
|
├── lib/
|
|
│ └── db/
|
|
│ └── types.ts
|
|
├── app/
|
|
│ ├── api/
|
|
│ │ └── kiosk/
|
|
│ │ ├── authenticate/
|
|
│ │ │ └── route.ts
|
|
│ │ ├── bookings/
|
|
│ │ │ ├── route.ts
|
|
│ │ │ └── [shortId]/
|
|
│ │ │ └── confirm/
|
|
│ │ │ └── route.ts
|
|
│ │ ├── resources/
|
|
│ │ │ └── available/
|
|
│ │ │ └── route.ts
|
|
│ │ └── walkin/
|
|
│ │ └── route.ts
|
|
│ └── kiosk/
|
|
│ └── [locationId]/
|
|
│ └── page.tsx
|
|
├── components/
|
|
│ └── kiosk/
|
|
│ ├── BookingConfirmation.tsx
|
|
│ ├── WalkInFlow.tsx
|
|
│ └── ResourceAssignment.tsx
|
|
└── docs/
|
|
└── KIOSK_SYSTEM.md
|
|
```
|
|
|
|
## Testing
|
|
|
|
### 1. Test de Autenticación
|
|
|
|
```bash
|
|
curl -X POST https://tu-dominio.com/api/kiosk/authenticate \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"api_key": "tu-api-key"}'
|
|
```
|
|
|
|
### 2. Test de Confirmación de Cita
|
|
|
|
```bash
|
|
# Buscar booking
|
|
curl "https://tu-dominio.com/api/kiosk/bookings?short_id=ABC123" \
|
|
-H "x-kiosk-api-key: tu-api-key"
|
|
|
|
# Confirmar booking
|
|
curl -X POST https://tu-dominio.com/api/kiosk/bookings/ABC123/confirm \
|
|
-H "x-kiosk-api-key: tu-api-key"
|
|
```
|
|
|
|
### 3. Test de Walk-in
|
|
|
|
```bash
|
|
curl -X POST https://tu-dominio.com/api/kiosk/walkin \
|
|
-H "x-kiosk-api-key: tu-api-key" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"customer_email": "cliente@email.com",
|
|
"customer_name": "Cliente Prueba",
|
|
"customer_phone": "8112345678",
|
|
"service_id": "service-uuid"
|
|
}'
|
|
```
|
|
|
|
## Características Clave
|
|
|
|
### Prioridad de Asignación de Recursos
|
|
|
|
El sistema asigna recursos automáticamente con este orden:
|
|
|
|
1. **Estaciones (stations)** - Prioridad alta
|
|
2. **Salas (rooms)** - Prioridad media
|
|
3. **Equipo (equipment)** - Prioridad baja
|
|
|
|
### Seguridad
|
|
|
|
- ✅ API key de 64 caracteres aleatorios
|
|
- ✅ Restricción opcional por IP
|
|
- ✅ Políticas RLS granulares
|
|
- ✅ Sin acceso a PII de clientes
|
|
- ✅ Audit logging completo
|
|
|
|
### UX para Cliente
|
|
|
|
- ✅ Interfaz simple y táctil-friendly
|
|
- ✅ Confirmación visual de acciones
|
|
- ✅ Validaciones en tiempo real
|
|
- ✅ Códigos de 6 caracteres fáciles de recordar
|
|
- ✅ Soporte para walk-ins inmediatos
|
|
|
|
## Próximos Pasos (Opcionales)
|
|
|
|
1. **Personalización del Diseño**
|
|
- Ajustar colores según branding del salón
|
|
- Agregar logo del salón
|
|
- Modificar textos según preferencia
|
|
|
|
2. **Integraciones**
|
|
- Google Calendar para sincronización
|
|
- Notificaciones por SMS/email al confirmar
|
|
- Pagos en el kiosko
|
|
|
|
3. **Funcionalidades Adicionales**
|
|
- Soporte multi-idioma
|
|
- Modo mantenimiento
|
|
- Reportes de uso
|
|
- Soporte para QR codes
|
|
|
|
## Soporte
|
|
|
|
Para más detalles, consulta `docs/KIOSK_SYSTEM.md` o revisa el código en los archivos mencionados.
|