Initial commit: monorepo Naturcalabacera reservas (apps/api + apps/web + packages/shared)
This commit is contained in:
34
architecture/logic_hooks.md
Normal file
34
architecture/logic_hooks.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# 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`.
|
||||
Reference in New Issue
Block a user