Sincronización de recursos
Arquitectura de sincronización
Los recursos reservables viven en múltiples fuentes y se sincronizan hacia app_reservas (el motor centralizado). Las fuentes son:
- iwage_strapi: experiencias, paquetes, propiedades en gestión, propiedades de tierras.
- marca_personal_strapi: servicios de consultoría.
- espacios_plus_strapi: espacios de trabajo.
Sincronización automática (lifecycle hooks)
Ciertos content types de iwage_strapi tienen lifecycle hooks que disparan la sincronización automáticamente al crear o actualizar:
| Content Type | Lifecycle | Tipo en reservas |
|---|---|---|
| Experiencia | afterCreate / afterUpdate | experiencia (slot_horario) |
| Propiedad-Gestion | afterCreate / afterUpdate | propiedad_estancia (rango_fechas o bajo_consulta) |
El hook envía un POST a /api/admin/recursos/sync en app_reservas con los datos del recurso (nombre, slug, tipo, precio, capacidad, configuración de disponibilidad, URL pública).
Sincronización manual (script batch)
Para sincronizar todos los recursos de una vez (ej: después de una migración o cambio masivo), se usa el script:
node strapi/scripts/sync-recursos-reservas.mjs
El script sincroniza en este orden:
- Experiencias de iwage_naturaleza.
- Paquetes de iwage_naturaleza.
- Propiedades en gestión (iwage_gestion).
- Propiedades de tierras (visitas).
- Servicios de marca_personal.
Variables de entorno del script: IWAGE_STRAPI_URL, MP_STRAPI_URL, ESPACIOS_PLUS_STRAPI_URL, RESERVAS_API_URL, RESERVAS_SYNC_TOKEN.
Mecanismo anti-echo
Algunas experiencias en iwage_strapi son "espejo" de recursos que nacieron originalmente en app_reservas (recursos de aliados externos). Para evitar duplicación infinita, el sistema verifica el campo etiquetas_personalizadas.origen. Si el origen es app_reservas, la experiencia se omite en la sincronización (ni el lifecycle hook ni el script batch la envían de vuelta).
Endpoint de sync
El endpoint POST /api/admin/recursos/sync en app_reservas:
- Busca el recurso por slug + origen.
- Si existe, lo actualiza (UPSERT).
- Si no existe, lo crea.
- Requiere token de autenticación (
RESERVAS_SYNC_TOKEN). - Retorna la acción realizada: "created" o "updated".
¿Te fue útil esta guía?