system

Product Catalog System

Internal system that is the source of truth for product data. Owns the product database and publishes product change events for the rest of the business to consume.

SystemInternal

Overview

The Product Catalog System is the system of record for products at Acme Inc. It accepts commands to create, update and delete products, persists them in the Product DatabaseProduct DatabaseContainerv1.0.0PostgreSQL database that is the system of record for all product data.MapView docs, and emits domain events whenever product data changes so downstream systems — like the Search SystemSearch SystemSystemv1.0.0Internal system that keeps product data searchable. Consumes product change events from the Product Catalog System, main...Ownersearch-platformMapView docs — can react.

Context Diagram

How this system relates to the other systems around it.

Resource Diagram

The services, data stores and messages that make up this system.

What’s inside

ComponentTypeResponsibility
Product APIProduct APIServicev1.0.0The public-facing API for the product catalog. Handles commands to create, update and delete products, serves product re...Subscribescreate-product, update-product +2APIsOpenAPIOwnerproduct-platformMapRepoView docsServicePublic-facing API. Handles create/update/delete commands and product reads.
Product WorkerProduct WorkerServicev1.0.0Background worker that handles long-running and asynchronous catalog work off the request path, such as enrichment, imag...Ownerproduct-platformMapRepoView docsServiceProcesses long-running and asynchronous catalog work off the request path.
Product Search PublisherProduct Search PublisherServicev1.0.0Reads product changes from the product database (outbox) and reliably publishes product-created, product-updated and pro...Publishesproduct-created, product-updated +1Ownerproduct-platformMapRepoView docsServicePublishes product change events for the Search System to consume.
Product DatabaseProduct DatabaseContainerv1.0.0PostgreSQL database that is the system of record for all product data.MapView docsData storePostgreSQL system of record for all product data.

Messages this system publishes

When product data changes, the system emits these events:

Architecture decisions

The key decisions that shaped this system. Search, filter by status, or sort by clicking a column.

Architecture Decision Records (3)

Decisions that apply to this Product Catalog System. Search, filter by status, or sort by clicking a column.
Summary
ADR-003: Offload long-running catalog work to a dedicated workerAcceptedFeb 18, 2026Slow and asynchronous catalog tasks (enrichment, image processing, bulk imports) run in a separate Product Worker so the Product API stays fast and predictable.
ADR-002: Use PostgreSQL as the product system of recordAcceptedFeb 12, 2026Product data is stored in a single PostgreSQL database that acts as the authoritative system of record, with derived stores (like the search index) rebuilt from it.
ADR-001: Publish product events via a transactional outboxAcceptedFeb 10, 2026Product change events are written to an outbox table in the same transaction as the change, then relayed to the broker, so an event is never lost or published for a rolled-back change.