35 lines
1.4 KiB
Markdown
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`.
|