Concepts
Entirius is a Django backend built from modules, plus an admin CMS and a storefront that talk to it over REST. The other pages assume a handful of words; they are defined here.
Channel
Section titled “Channel”A channel is a sales surface: a storefront with its own languages, currencies, prices and content. One catalog, several ways to sell it.
Every module that cares about channels owns its own Channel model, and they all agree on one thing: the string idx.
PIM’s Channel carries idx, name, default_language, default_currency and languages. Its database table is
still called django_pim_shop, and Shop remains an alias of Channel. That history is why older URLs say
shop_idx (the legacy PIM viewer) while newer ones say channel_idx: the PIM admin API
(/api/pim/v2/admin/<channel_idx>/products/) and Matrix v2 (/api/matrix/v2/<channel_idx>/).
The CMS works on one channel at a time, set by VUE_APP_CHANNEL. The storefront maps a country segment of the URL
to a channel in _CONFIG/countries.config.json. The demo dataset ships two channels, default-europe and
default-local.
Why each module keeps its own Channel model: Channels.
An idx is the human-readable identifier of a record: a slug, unique within its model, used in URLs instead of the
database id, as in /api/pim/v2/admin/features/<idx>/.
Values are normalised by entirius-py-idx-normalizator:
from idx_normalizator import normalize_idx
normalize_idx("Example Cammel Name") # "example-cammel-name"Modules reference each other by idx, never by primary key. A channel called default-europe in PIM and a channel
called default-europe in another module are the same channel because the strings match, not because a foreign
key says so.
Languages and t9n fields
Section titled “Languages and t9n fields”django_regional.Language is the shared list of languages, with iso2, iso3 and name_en. A channel has a
default_language and the set of languages it sells in.
A field whose name ends in _t9n holds translations: a JSON object keyed by iso2. Feature.name_t9n in PIM is
one, role_t9n on blog authors in ContentDB is another.
Storefront endpoints take ?language= and fall back to the channel’s default language when it is missing.
The full model, including how languages and channels fit together: Languages.
Modules
Section titled “Modules”A module is one Django app shipped as one package, entirius-django-<name>, with a layered layout: models, schemas,
services, api.
A service turns a module on in three places, its dependencies, LOCAL_APPS and main/urls.py:
Choose Modules.
munin discovers which modules are installed and reports them at GET /api/munin/v2/. The CMS reads that list and
shows only the panels whose module is present. Leave a module out and its panel is not there.
The layout every module follows: Django Module Standard.
Names you will meet
Section titled “Names you will meet”| Name | What it is | Where it shows up |
|---|---|---|
| Volkanos | The backend: the service entirius-service-volkanos plus the modules it installs. | The OpenAPI title Entirius Volkanos Service API and the spec files volkanos-api-admin.yaml and volkanos-api-storefront.yaml. |
| Cynthia | The frontend layer: the Vue 3 admin CMS entirius-pwa-cms and the Next.js storefront entirius-pwa-storefront. | A name used in these docs. The repositories do not use it. |
| Matrix | entirius-django-matrix, the storefront read model, filled from PIM, prices and stock. | /api/matrix/v2/<channel_idx>/products/ and its siblings for categories, prices, options and stock, called by the storefront. |
| ContentDB | entirius-django-contentdb, content pages, blog and media with a draft and publish workflow. | The Pages panel in the CMS; /api/contentdb/v1/published/<content_type>/ for published content; the v2 API for blog authors. |
| atlas | entirius-django-atlas, the supplier catalog: products ingested from supplier feeds, kept apart from PIM until they are linked or pushed. The Module Catalog lists it as Supplier Catalog. | The Atlas panel in the CMS; /api/atlas/v2/admin/ for sources, supplier products and duplicate groups. |
| munin | entirius-django-munin, the module registry and configuration health check. | /api/munin/v2/ and /api/munin/v2/health/. The CMS uses it to decide which panels to show. |
| Emporium | entirius-test-package-emporium, the demo dataset and the BDD suite that seed a stack and verify it. | The two demo channels, default-europe and default-local. |
| zeno | entirius-zeno, the Docker harness that runs the whole platform locally. | One make interface for building, seeding and testing the stack. |
How the pieces relate
Section titled “How the pieces relate”The CMS calls the admin API for one channel; the storefront sends a channel and a language. zeno, the Docker harness, runs the frontends and the backend, and Emporium (the demo dataset and the BDD suite) seeds the backend.
How the platform is put together and the rules its modules follow: System Architecture.