Services¶
The functional services layer sits on top of DTOflow. Services share data through DTOs published to DTOflow rather than calling each other directly over REST. When a service mutates data it owns, it publishes a new DTO version; any other service that needs that data subscribes through the Change Queue System (CQS) and reacts asynchronously. This makes the platform loosely coupled: adding a new consumer never requires changes to the producing service.
Service catalogue¶
| Service | Legacy name | Tech | DTOs owned | CQS subscriptions | Responsibility |
|---|---|---|---|---|---|
| studio-design-library | platform-designer-service | Quarkus (Java 21) | design, canvasdesign, designimage, font, palette, esltype, canvastype | — | Manages all creative assets and publishes immutable designs |
| link-registry | link-service | Quarkus (Java 21) | storeesl, link.v2, storeeslstatus, store | — | Source of record for ESL↔store assignments and item↔ESL↔design mappings |
| studio-scenario-library | platform-scenario-service | Quarkus (GraalVM native) | communicationpack | — | Manages communication packs containing CEL-based scenario rule sets |
| studio-link-evaluator | platform-evaluation-engine | Quarkus (GraalVM native) | studiolink | communicationpack.v1, link.v2, storeitemvalues.v1 | Stateless CEL evaluator; selects winning design per ESL and writes studiolink |
| studio-renderer | image-render-service | Node.js | studioeslimage | studiolink.v1, storeitemvalues.v1, design.v1, storeesl.v1, canvasdesign.v1 | Renders PNG images from evaluated studiolinks and stores them via LFS |
| pricer-server | — | On-premises gateway | storeeslstatus, itemproperties, itemprocessingparameters, eccmodel, eccfont, eccparameters, ecceslimage, eccimage | eslimage.v1, storeesl.v1 | On-premise hardware gateway; consumes eslimage and storeesl directly from CQS and transmits images to ESL hardware; writes lifecycle status |
| item-registry | platform-item-service | Quarkus | storeitemvalues, itemproperties, itemprocessingparameters | — | Source of record for item property values and processing config per store |
| ecc-image-render-service | ecc-render | Quarkus | ecceslimage, eccimage | ecclink.v1, eccmodel.v1, eccfont.v1, eccparameters.v1 | Renders ECC-model images for MultiItem and EccSingle link variants |
| ecclink-projector | — | Quarkus | ecclink | link.v2 | Projects ECC-branch link.v2 records into ecclink DTOs |
| eslimage-merger | — | Quarkus | eslimage | studioeslimage.v1, ecceslimage.v1 | Merges studio and ECC renderer outputs into the single final eslimage DTO |
| dtoflow-lfs | dtoflow-file-service | — | — | — | Large File Storage; services upload to GCS directly; external UIs read via this service |
| actions-library | platform-plaza-actions-task | Quarkus | taskdefinition | — | Manages ESL flash task definitions |
| dtoflow-migration-helper | dtoflow-migration-helper | Quarkus | — | studioeslimage.v1 | Transitional. Bridges new studioeslimage DTO to legacy renderedimage consumers during migration |
Legacy names appear in older code, Cloud Run service names in non-migrated environments, Cloud Monitoring alert policies, and IAM bindings created before PLT-2122. See ADR-002 for the full canonical-name mapping.
CQS subscription source of truth. The authoritative mapping of queue → subscribed DTOs is
poc-changequeue-service/src/main/resources/application.ymlin this repo. When a service page's "CQS Subscriptions" list disagrees with that file, the YAML is correct — update the doc. Each service page is intended to summarize what the runtime is actually subscribed to, not to define it.