Multi-tenant¶
La plataforma atiende varias marcas o sitios desde el mismo código y, en la mayoría de los casos, la misma base de datos.
Identificación de la plataforma¶
- El front envía el origen del tenant como query param:
?domain=<host>. - El middleware
CleanDomainnormaliza el valor enclean_domain. IdentifyPlatformbuscaplatforms.site_domainy llama aPlatformContext::set($id).PlatformContextqueda disponible durante toda la request.- También se fijan el equipo de permisos de Spatie y el locale de gettext.
En entornos locales, de testing y staging, si no llega un dominio válido se usa config('app.url'). En producción, un dominio desconocido devuelve 404.
Reglas de consulta¶
- Toda consulta de datos de negocio debe filtrar por
platform_id. - Las cachés deben incluir la plataforma en la clave y en los tags.
- Los reportes y exportaciones deben respetar el
platform_id. - Los permisos se evalúan con el equipo de Spatie correspondiente a la plataforma.
- No se debe reutilizar una instancia de repositorio entre plataformas durante una request de Octane.
Caché¶
El prefijo compartido es vortex-play. platform-api, platform-backoffice y platform-bo comparten Redis y prefijo, por lo que un flush por tags afecta a los tres. Las integraciones usan otro namespace.
Convención de claves:
<domain>:<method>:<params>
Siempre incluir todas las dimensiones que afectan el resultado: plataforma, moneda, nivel, mobile, etc.
Convención de tags:
<domain>
<domain>:{platform}
<domain>:{platform}:{mobile}
Riesgos frecuentes¶
- Olvidar
platform_iden una consulta nueva. - Cachear datos sin incluir la plataforma.
- Usar
config()o estado estático que persista entre requests de Octane. - Resolver la plataforma una sola vez y reutilizarla en procesos de larga duración.