mirror of
https://github.com/marcogll/AnchorOS.git
synced 2026-03-15 10:24:26 +00:00
184 lines
5.6 KiB
Markdown
184 lines
5.6 KiB
Markdown
# AnchorOS API Testing Guide
|
|
|
|
## 📋 **Rutas a Probar - Testing Endpoints**
|
|
|
|
### **🔐 Autenticación**
|
|
- `POST /api/auth/login` - Login de usuario
|
|
- Body: `{ email, password }`
|
|
- Buscar: Token JWT en respuesta
|
|
- `POST /api/auth/register` - Registro de cliente
|
|
- Body: `{ first_name, last_name, email, phone, password }`
|
|
- Buscar: Usuario creado con ID
|
|
|
|
### **👥 Gestión de Clientes**
|
|
- `GET /api/customers` - Listar clientes
|
|
- Headers: Authorization Bearer token
|
|
- Buscar: Array de clientes con datos completos
|
|
- `POST /api/customers` - Crear cliente
|
|
- Headers: Authorization Bearer token
|
|
- Body: `{ first_name, last_name, email, phone }`
|
|
- Buscar: Cliente creado
|
|
- `GET /api/customers/[id]` - Detalles de cliente
|
|
- Buscar: Datos completos del cliente + bookings
|
|
|
|
### **💺 Reservas (Bookings)**
|
|
- `GET /api/bookings` - Listar reservas
|
|
- Query params: `?status=confirmed&date=2024-01-01`
|
|
- Buscar: Array de bookings con relaciones (customer, service, staff)
|
|
- `POST /api/bookings` - Crear reserva
|
|
- Body: `{ customer_id, service_id, staff_id, location_id, date, notes }`
|
|
- Buscar: Booking creado + email enviado automáticamente
|
|
- `PUT /api/bookings/[id]` - Actualizar reserva
|
|
- Body: `{ status: 'confirmed' }`
|
|
- Buscar: Status actualizado
|
|
- `DELETE /api/bookings/[id]` - Cancelar reserva
|
|
- Buscar: Status cambiado a 'cancelled'
|
|
|
|
### **🏢 Ubicaciones**
|
|
- `GET /api/locations` - Listar ubicaciones
|
|
- Buscar: Array de locations con servicios disponibles
|
|
|
|
### **👨💼 Staff**
|
|
- `GET /api/staff` - Listar personal
|
|
- Buscar: Array de staff con especialidades
|
|
|
|
### **💅 Servicios**
|
|
- `GET /api/services` - Listar servicios
|
|
- Buscar: 22 servicios de Anchor 23 con precios
|
|
|
|
### **📅 Disponibilidad**
|
|
- `GET /api/availability?service_id=1&date=2024-01-01&location_id=1`
|
|
- Buscar: Slots disponibles por staff
|
|
- `POST /api/availability/blocks` - Bloquear horario
|
|
- Body: `{ staff_id, start_time, end_time, reason }`
|
|
- Buscar: Bloqueo creado
|
|
|
|
### **🏪 Kiosk (Auto-servicio)**
|
|
- `GET /api/kiosk/locations` - Ubicaciones disponibles
|
|
- Buscar: Locations con servicios activos
|
|
- `POST /api/kiosk/bookings` - Reserva desde kiosk
|
|
- Body: `{ service_id, customer_data, date }`
|
|
- Buscar: Booking creado + email enviado
|
|
- `POST /api/kiosk/walkin` - Reserva inmediata
|
|
- Body: `{ service_id, customer_data }`
|
|
- Buscar: Booking inmediato confirmado
|
|
|
|
### **📊 Aperture (Dashboard Admin)**
|
|
- `GET /api/aperture/stats` - Estadísticas generales
|
|
- Buscar: Métricas de negocio (revenue, bookings, etc.)
|
|
- `GET /api/aperture/reports` - Reportes detallados
|
|
- Buscar: Datos para gráficos y análisis
|
|
- `GET /api/aperture/pos` - Sistema POS
|
|
- Buscar: Servicios disponibles para venta
|
|
|
|
### **🧾 Recibos**
|
|
- `GET /api/receipts/[bookingId]` - Descargar PDF
|
|
- Buscar: PDF generado con datos de reserva
|
|
- `POST /api/receipts/[bookingId]/email` - Enviar por email
|
|
- Buscar: Email enviado con PDF adjunto
|
|
|
|
### **⚙️ Sistema**
|
|
- `GET /api/health` - Health check
|
|
- Buscar: `{ status: 'ok' }`
|
|
- `POST /api/cron/reset-invitations` - Reset diario
|
|
- Buscar: Invitaciones expiradas reseteadas
|
|
|
|
### **📧 Webhooks (Formularios Públicos)**
|
|
- `POST https://flows.soul23.cloud/webhook-test/4YZ7RPfo1GT` - Webhook test
|
|
- Body: Payload completo con form type
|
|
- Buscar: 200 OK + acknowledgment
|
|
- `POST https://flows.soul23.cloud/webhook/4YZ7RPfo1GT` - Webhook prod
|
|
- Body: Payload completo con form type
|
|
- Buscar: 200 OK + acknowledgment
|
|
|
|
**Form Types disponibles:**
|
|
- `contact` - Formulario de contacto
|
|
- `franchise` - Solicitud de franquicia
|
|
- `membership` - Solicitud de membresía
|
|
|
|
**Payload Base:**
|
|
```json
|
|
{
|
|
"form": "contact|franchise|membership",
|
|
"timestamp_utc": "2026-01-18T04:26:30.187Z",
|
|
"device_type": "mobile|desktop|unknown"
|
|
}
|
|
```
|
|
|
|
**Contact Payload:**
|
|
```json
|
|
{
|
|
"form": "contact",
|
|
"nombre": "Nombre Completo",
|
|
"email": "email@example.com",
|
|
"telefono": "+52 844 123 4567",
|
|
"motivo": "cita|membresia|franquicia|servicios|pago|resena|otro",
|
|
"mensaje": "Texto del mensaje",
|
|
"timestamp_utc": "2026-01-18T04:26:30.187Z",
|
|
"device_type": "mobile"
|
|
}
|
|
```
|
|
|
|
**Franchise Payload:**
|
|
```json
|
|
{
|
|
"form": "franchise",
|
|
"nombre": "Nombre Completo",
|
|
"email": "email@example.com",
|
|
"telefono": "+52 844 123 4567",
|
|
"ciudad": "Monterrey",
|
|
"estado": "Nuevo León",
|
|
"socios": 2,
|
|
"experiencia_sector": "1-3-anos",
|
|
"experiencia_belleza": true,
|
|
"mensaje": "Mensaje adicional",
|
|
"timestamp_utc": "2026-01-18T04:26:30.187Z",
|
|
"device_type": "desktop"
|
|
}
|
|
```
|
|
|
|
**Membership Payload:**
|
|
```json
|
|
{
|
|
"form": "membership",
|
|
"membership_id": "vip",
|
|
"nombre": "Nombre Completo",
|
|
"email": "email@example.com",
|
|
"telefono": "+52 844 123 4567",
|
|
"mensaje": "Pregunta específica",
|
|
"timestamp_utc": "2026-01-18T04:26:30.187Z",
|
|
"device_type": "mobile"
|
|
}
|
|
```
|
|
|
|
## 🔍 **Qué Buscar en Cada Respuesta**
|
|
|
|
### **✅ Éxito**
|
|
- Status codes: 200, 201
|
|
- Estructura de datos correcta
|
|
- Relaciones cargadas (joins)
|
|
- Emails enviados (para bookings)
|
|
|
|
### **❌ Errores**
|
|
- Status codes: 400, 401, 403, 404, 500
|
|
- Mensajes de error descriptivos
|
|
- Validación de datos
|
|
- Autenticación requerida
|
|
|
|
### **🔄 Estados**
|
|
- Bookings: `pending` → `confirmed` → `completed`
|
|
- Pagos: `pending` → `paid`
|
|
- Recursos: `available` → `booked`
|
|
|
|
## 🧪 **Casos de Edge**
|
|
|
|
- **Autenticación**: Token expirado, permisos insuficientes
|
|
- **Reservas**: Doble booking, horarios conflictivos
|
|
- **Pagos**: Montos inválidos, métodos no soportados
|
|
- **Kiosk**: Datos faltantes, servicios no disponibles
|
|
|
|
## 📈 **Performance**
|
|
|
|
- Response time < 500ms para GET
|
|
- Response time < 2s para POST complejos
|
|
- Conexiones concurrentes soportadas |