Admin BFF — BR 3.4
Контракты
- Adapter API — 4 новых внутренних эндпоинта для catalog sync (проксируются)
- Фронт-спека — что вызывает фронт
Что делаем
Прокси-роуты
В bff/src/routes/paykeeper.ts добавить:
-
POST /api/v1/admin/paykeeper/accounts/:id/resync-catalogpreHandler: [requireAuth, requirePermission('integrations.manage')]- Прокси в
${PAYKEEPER_ADAPTER_URL}/internal/paykeeper/accounts/:id/resync-catalog - Возвращает ответ как есть (202)
-
GET /api/v1/admin/paykeeper/accounts/:id/catalog-sync-statusrequirePermission('integrations.read')- Прокси в
/internal/paykeeper/accounts/:id/catalog-sync-status
-
GET /api/v1/admin/paykeeper/accounts/:id/catalog-sync-runsrequirePermission('integrations.read')- Query forwarding:
limit,since - Прокси в adapter
-
GET /api/v1/admin/paykeeper/accounts/:id/catalog-sync-runs/:runIdrequirePermission('integrations.read')- Прокси в adapter
Shared types
В shared/src/types/paykeeper.ts (или новый catalog-sync.ts):
-
interface CatalogSyncRunStatus = 'running' | 'success' | 'partial' | 'failed' -
interface CatalogSyncTrigger = 'cron' | 'manual' | 'webhook_missed' -
interface CatalogSyncRunSummary— поля изGET /.../catalog-sync-runs(безerrors_json,last_error) -
interface CatalogSyncRunDetail— summary +errors_json,last_error -
interface CatalogSyncStatus—{ account_id, last_run: CatalogSyncRunSummary | null, totals: { products_synced, products_total_in_erp, ..., diverged_count } } -
interface ResyncCatalogResponse—{ sync_run_id, status, trigger, started_at }
Экспортировать из корневого shared/src/index.ts.
Конфиг
- Убедиться что
PAYKEEPER_ADAPTER_URLenv уже есть (добавлен в BR 3.3). Если нет — добавить в config + envs.
Тесты
- Unit
routes/paykeeper.test.ts— 4 теста (по одному на роут): прокси-проксирование, permission check (403 без permission). - Manual smoke: curl через BFF → убедиться что ответ приходит от adapter’а без ошибок.
Документация
- Обновить
bff/README.mdесли есть список endpoint’ов.
Deploy
После merge — /deploy-all admin-bff.