883e597d40
Epic 10 Story 10.2 — SDK для разработки backend-расширений Apollo Federation v2
subgraph'ов экосистемы кооператива.
Что внутри:
- ExtensionFederationModule.forRoot() — готовый GraphQL модуль с
ApolloFederationDriver + autoSchemaFile.federation: 2
- ExtensionAuthModule.forRoot({ secret }) — passport-jwt стратегия,
валидирует токен который Apollo Gateway forward'ит в Authorization-header.
- ExtensionJwtAuthGuard — guard для GraphQL resolver'ов
- SharedCooperator/SharedCooperative/SharedAccount — federation v2 stub'ы
на core-entity для cross-extension references (@key + @external)
- HealthController GET /_health — обязательный для orchestrator'а
- loadExtensionConfig() — fail-fast загрузчик env'ов
Templates:
- Dockerfile multi-stage (builder + runtime + wget healthcheck)
- docker-compose.snippet.yaml — шаблон service'а для orchestrator'а
Контракт фиксирован Epic 10 PRD (apps-catalog/docs/epics/E10-federation-runtime.md)
и Architecture v3 (blago req 8b-architecture-v3-runtime-federation).
31 lines
1.0 KiB
YAML
31 lines
1.0 KiB
YAML
# Snippet, который orchestrator добавляет в общий docker-compose.yaml DC.
|
||
#
|
||
# Имя service'а = `ext-<packageId-без-scope>` (например `ext-chatcoop`).
|
||
# Image берётся из manifest пакета (`coopenomics.backend.image`).
|
||
# Порт subgraph'а внутри docker-network проброшен НЕ на хост — gateway
|
||
# обращается к нему через service name + internal port.
|
||
|
||
services:
|
||
ext-${EXT_NAME}:
|
||
image: ${EXT_IMAGE}
|
||
container_name: ext-${EXT_NAME}
|
||
restart: unless-stopped
|
||
environment:
|
||
SUBGRAPH_PORT: ${EXT_PORT}
|
||
JWT_SECRET: ${JWT_SECRET}
|
||
COOPNAME: ${COOPNAME}
|
||
DATABASE_URL: ${EXT_DATABASE_URL}
|
||
CORE_GRAPHQL_URL: http://coopback:3000/v1/graphql
|
||
networks:
|
||
- coopnet
|
||
healthcheck:
|
||
test: ['CMD', 'wget', '--quiet', '--tries=1', '--spider', 'http://localhost:${EXT_PORT}/_health']
|
||
interval: 10s
|
||
timeout: 3s
|
||
retries: 3
|
||
start_period: 20s
|
||
|
||
networks:
|
||
coopnet:
|
||
external: true
|