Publish Collection To Portal
api-v1 publishes ProjectCollection snapshots to Postgres; api-v2 portal-read serves the client portal.
Overview
This flow is the portal write path owned by design-management in api-v1, plus the existing api-v2 read path. It is not a new System. Both deployables already sit in Backend Platform.
There are no domain events on this path. PublishToPortalUseCase returns an application result (publishedCollectionIds, message).
Unpublish is the inverse: POST /api/v1/design/projects/:projectId/actions/unpublish-from-portal → UnpublishFromPortalUseCase → ProjectCollection.unpublishFromPortal → ForSyncingPortalData.unpublishPortalCollections (sets draft in Postgres) → Airtable save.
HTTP
- Write:
POST /api/v1/design/projects/:projectId/actions/publish-to-portal - Unpublish:
POST /api/v1/design/projects/:projectId/actions/unpublish-from-portal - Read:
GET /api/v2/client-portal/projects/:projectId/project-collections - Read (product model):
GET /api/v2/client-portal/product-models/:productModelId
No OpenAPI operationId is registered for the api-v1 portal routes yet.
Code References
apps/api-v1/src/modules/design-management/core/application/use-cases/PublishToPortalUseCase.tsapps/api-v1/src/modules/design-management/core/application/use-cases/UnpublishFromPortalUseCase.tsapps/api-v1/src/modules/design-management/core/application/ports/outbound/ForSyncingPortalData.tsapps/api-v1/src/modules/design-management/adapters/outbound/persistence/portal/PrismaPortalSyncAdapter.tsapps/api-v2/src/modules/portal-readapps/api-v2/src/apps/client-portal-api