Download the PHP package flowstore/lookup without Composer
On this page you can find all versions of the php package flowstore/lookup. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download flowstore/lookup
More information about flowstore/lookup
Files in flowstore/lookup
Package lookup
Short Description Agnostic lookup layer for external channels (ecommerce/ERP/marketplace) mapping to domain DTOs.
License MIT
Homepage https://github.com/flowstore/lookup
Informations about the package lookup
Lookup (Paquete Laravel)
Qué es: Capa agnóstica para consultar APIs externas por "canal" (ecommerce/ERP/marketplace) y convertir respuestas en DTOs de dominio unificados. Se usa para iniciar integraciones (probar conexión, traer datos base, etc.). No persiste ni configura integraciones.
Instalación
- Requerimientos: PHP ^8.1+, Laravel ^9|^10|^11|^12.
-
Instala vía Composer:
- Publica la configuración:
Configuración
Archivo config/lookup.php:
- providers: mapa
channel_key => ClaseProvider. - mappers: mapa
channel_key => [entity => ClaseMapper]. - conventions: namespaces por defecto para resolución por convención.
- http: timeouts y retries por defecto para el cliente HTTP.
Contratos principales
LookupProviderInterface:resources(),testConnection(IntegrationContext),lookup(IntegrationContext, entity, params).EntityMapperInterface<TDomain>:entity(),map(payload, IntegrationContext): TDomain.IntegrationContext: DTO conchannelKeyycredentials.IntegrationContextResolver: contrato que la app host implementa para resolver un contexto desde unintegrationId.
Resolución y orquestación
LookupProviderResolver: resuelve Provider porchannel_keyusandoconfig('lookup.providers')o la convenciónApp\\Lookup\\Providers\\{Canal}LookupProvider.EntityMapperResolver: resuelve Mapper porchannel_key + entityusandoconfig('lookup.mappers')o la convenciónApp\\Lookup\\Mappers\\{Canal}\\{Entidad}Mapper.PerformLookupAction: invocaprovider->lookup(...)y mapea conmapper->map(...).LookupService: resuelve contexto (si se usaIntegrationContextResolver) y devuelve el DTO de dominio.
Resolución de contexto (configurable)
El paquete es agnóstico de tu modelo. Define cómo construir IntegrationContext desde el request:
Si usas el resolver genérico Eloquent con IntegrationTenant:
Modelo sugerido:
El controlador del paquete leerá el id desde config('lookup.context.id_param') (por defecto integration_id) y resolverá el contexto usando el resolver configurado o el resolver Eloquent si se define context.eloquent.model.
HTTP (LookupController)
- La ruta se habilita por defecto al instalar el paquete.
- Endpoint por defecto:
POST /tenant-integrations/lookup(middlewareapi). - Puedes deshabilitar u overrides en
config/lookup.php:
Ejemplo de request (POST JSON):
Ejemplo de respuesta:
Nota: Debes implementar y bindear IntegrationContextResolver para traducir integration_id a IntegrationContext.
Test de conexión (TestConnectionController)
- Endpoint por defecto:
POST /tenant-integrations/test-connection -
Body (JSON):
-
Respuesta:
- Requiere un
IntegrationContextResolverconfigurado (propio concontext.resolvero genérico concontext.eloquent.model). - Ajustes en
config/lookup.php:
Puntos de extensión
- Agregar un canal: crear
App\\Lookup\\Providers\\{Canal}LookupProvidery registrarlo enconfig/lookup.php(o seguir la convención). - Agregar una entidad: crear
App\\Lookup\\Mappers\\{Canal}\\{Entidad}Mappery registrarlo (o usar la convención). testConnection(...)permite "ping" de credenciales antes de usarlookup.
Comando de scaffolding
Contribuir
- Issues y PRs en
https://github.com/flowstore/lookup. - Ejecuta tests y static analysis antes de commitear:
Crea stubs para Provider y/o Mapper en tu app (app/Lookup/...).
Buenas prácticas
- Evita dependencia dura a modelos: usa
IntegrationContexto implementaIntegrationContextResolveren tu app. - Usa el Http Client de Laravel con timeouts/retries; el paquete provee un
AbstractLookupProviderde ayuda. - Mantén el retorno como DTO de dominio consistente y documentado por entidad.
Uso en la app host
O vía HTTP con el LookupController opcional.
IntegrationContext (qué es y cómo personalizar)
IntegrationContext es un DTO inmutable que describe el contexto de una integración:
channelKey(string): identifica el canal (p.ej.shopify,mercadoLibre).credentials(array<string, mixed>): credenciales y datos necesarios para llamar al canal (token, apiKey, sellerId, etc.).
Se utiliza en LookupProviderInterface::testConnection(...) y lookup(...), y también en EntityMapperInterface::map(...) para proveer contexto al mapeo.
Personalización:
- Cambiar el parámetro de ID de entrada (nombre del campo en el request):
En este caso, el controlador leerá tenant_id en el body.
- Proveer tu propio resolver (sin Eloquent genérico):
Regístralo por configuración (no hace falta bind manual):
- Resolver genérico con Eloquent (sin escribir una clase):
Sugerencia de modelo:
Ejemplo de request con tenant_id:
Persistencia desde providers (helpers)
Para facilitar inserciones/actualizaciones en tus modelos Eloquent desde un provider custom, AbstractLookupProvider expone métodos protegidos que usan ModelWriter internamente:
persistCreate(string $modelClass, array $attributes): ModelpersistUpdateOrCreate(string $modelClass, array $where, array $attributes): ModelpersistUpsert(string $modelClass, array $rows, array $uniqueBy, array $update): int
Ejemplos:
Notas:
modelClasses el FQCN del modelo (App\Models\...).- Asegúrate de que tu modelo tenga fillable/casts adecuados para los
attributes. persistUpsertsigue la firma deEloquent\Builder::upsert($rows, $uniqueBy, $update).
All versions of lookup with dependencies
illuminate/support Version ^9.0|^10.0|^11.0|^12.0
illuminate/http Version ^9.0|^10.0|^11.0|^12.0
illuminate/console Version ^9.0|^10.0|^11.0|^12.0
illuminate/contracts Version ^9.0|^10.0|^11.0|^12.0