Files

35 lines
1.4 KiB
Markdown

# SOP: Lógica y Hooks
## Gestión de Estado (Hooks)
### `useReservations`
- **Propósito**: Abstracción de Supabase para CRUD de reservas.
- **Estado**: Lista de reservas (`data`), `loading`, `error`.
- **Métodos**:
- `fetchReservations()`: `Select * from reservations`.
- `createReservation(data)`: Insert.
- `updateReservation(id, data)`: Update. Detección de cambio en `government_registration` para payload de Webhook.
- `deleteReservation(id)`: Delete.
- **Realtime**: Suscripción a cambios en tabla `reservations` para actualizar vista automáticamente.
### `useFormCalculation` (dentro del Form)
- **Propósito**: Cálculos derivados instantáneos.
- **Input**: Valores actuales del form (watch).
- **Output**: `totalPeople`, `totalDays`.
## Lógica de Webhook (Simulación en Cliente)
> **Nota**: Idealmente esto se hace con Database Triggers, pero por simplicidad inicial y control, lo gestionaremos en la capa de servicio del cliente (`useReservations`) antes de enviar a Supabase, o inmediatamente después del éxito.
**Regla de Disparo**:
1. Capturar valor previo de `government_registration` (en Update).
2. Si `previos_value` es EMPTY/NULL Y `new_value` NO es EMPTY:
-> Ejecutar `triggerRegistrationWebhook(reservation)`.
**Endpoint Mock**:
- URL: (Definir en .env)
- Method: POST
- Body: Definido en `gemini.md`.
## Tipos (TypeScript)
Definir interfaces estrictas en `src/types/supabase.ts` (o generado) y `src/types/app.ts`.