All pages use the same kinds of pictures. Each one has one job, and once you have read them, you can read every page.
Colors of the parties
Each party has the same color everywhere:
-
1Usera human in front of a screen
-
2Clientthe program that calls the API, that is frontend, BFF or another server
-
3CDMSthe data layer with REST API, system layer and persistence
-
4CIASidentity and access, plus the filter chain that checks every token
-
5Keycloakthe identity provider. It checks passwords and issues the tokens
-
6Databasesystem database, tenant database or file storage
-
7Emailan email sent to a person
-
8Hookthe project's own business logic that hooks into the flow
-
9Hubthe modeling interface with its MCP server. This is where the models live
-
10Buildthe project's Maven build with the code generator
Steps
A flow from top to bottom. The colored label says who acts, the arrow says to whom they turn. A dashed circle with ? stands for a check, a red box for an error exit, a green one for the end.
-
1Client→CDMSsends
POST /crm/customer/create -
2CDMSchecks whether the role for “create” is in the token
-
3CDMSrole missing → response 403
-
4CDMS→Databasewrites the new rowResult: object created, response 200 with the requested fields
Stations
A request travels through several stations. At each station, something is checked. On the right you see what happens when the check does not pass. Only a request that passes all stations reaches the green goal.
-
CIASFilter chainIs the token valid?↳ no 401 – renew the token
-
CDMSPermission checkMay this role read the model?↳ no 403
-
CDMSRow filterDoes the object belong to your own tenant?↳ no 404 – as if the object did not exist
- Data is delivered
Variants
Many flows come in several variants. Each variant is its own tab. When says in which situation this variant applies.
When: the normal case
-
1Clientdoes something
-
2CDMSanswers
When: a special case
Here the flow differs, exactly at this point.
Result: different result
Decision table
When several conditions together decide the result, each combination is its own row. The last column is the result. “–” means: does not matter here.
| Role present? | Target allowed? | What happens |
|---|---|---|
| no | – | Switch is silently ignored |
| yes | no | 403 |
| yes | yes | Switch takes effect |
Comparison
Two or more things side by side that are easy to mix up.
- What is missing gets cleared
- describes the whole target state
- What is missing stays unchanged
- names only the change
Field selection
Which fields a request hits. Gray means “not delivered”, colored means “delivered”. References have a dotted border and come only with their id.
| Request | Result |
|---|---|
"+" | firstnamelastnamecompany |
"*" | firstnamelastnamecompany (id only) |
Request and response
POST /api/rest/crm/customer/read/42
{ "response": ["id", "name"] }{ "data": { "id": "42", "name": "Muster GmbH" }, "meta": { "error": false } }Sequence diagrams
For flows with back and forth between several parties, we use Mermaid sequence diagrams. Each vertical line is a party, and time runs downward. A solid arrow is a request, a dashed one is the response. The numbers show the order.
sequenceDiagram
participant C as Client
participant D as CDMS
participant DB as Database
C->>D: POST /query
D->>DB: SELECT … WHERE …
DB-->>D: rows
D-->>C: data + meta