Worum es geht
CodamAI ist die Software-Factory der Codamic AG. Damit baut man Geschäftsanwendungen, ohne jedes Mal bei null anzufangen. CodamAI besteht aus mehreren Modulen. Jedes Modul übernimmt eine klar abgegrenzte Aufgabe:
- CDMS (CodamAI Data Management System) verwaltet die Daten: Modelle, REST-API, Datenbank, Dateien, Historie.
- CIAS (CodamAI Identity & Access System) regelt Identität und Zugang: Benutzer, Mandanten, Rollen, Registrierung.
- CRMS (CodamAI Reporting Management System) erzeugt Berichte aus Vorlagen.
- Der Hub ist die zentrale Oberfläche mit seinem Backend. Dort legst du Projekte an, modellierst deine Daten und verwaltest den Zugang.
Darunter liegen gemeinsame Bausteine, die alle Java-Module teilen. Neben allem steht Keycloak, der Identity Provider. Dort melden sich die Menschen an.
Die Modulkarte
Jedes Modul hat eine feste Farbe. Dieselben Farben siehst du auf allen Seiten dieser Doku.
flowchart TB
subgraph HUBG["Hub"]
direction LR
HF["Hub-Oberfläche<br/>hub-frontend"]
HB["Hub-Backend<br/>hub-backend<br/>+ MCP-Server"]
end
CP["CDMS-Portal<br/>Modellieren"]
CIP["CIAS-Portal"]
CDMS["CDMS<br/>Datenschicht, Generator,<br/>Projektrahmen"]
CIAS["CIAS<br/>Identität und Zugang"]
CRMS["CRMS<br/>Berichte aus Vorlagen"]
KC["Keycloak<br/>Identity Provider"]
G["Gemeinsame Bausteine<br/>global-parent, commons,<br/>commons-persistence"]
HF --> HB
CP --> HB
CIP --> HB
HB -- "ist gebaut mit" --> CDMS
HB -- "bettet ein" --> CIAS
CRMS -- "ist gebaut mit" --> CDMS
CRMS -- "nutzt" --> CIAS
CIAS -- "Adapter" --> KC
CDMS --> G
CIAS --> G
classDef hub fill:#4f46e5,stroke:#4f46e5,color:#fff
classDef cdms fill:#1976d2,stroke:#1976d2,color:#fff
classDef cias fill:#8e24aa,stroke:#8e24aa,color:#fff
classDef crms fill:#ffc107,stroke:#b38600,color:#1f1a00
classDef idp fill:#c2410c,stroke:#c2410c,color:#fff
classDef shared fill:#64748b,stroke:#64748b,color:#fff
class HF,HB hub
class CDMS,CP cdms
class CIAS,CIP cias
class CRMS crms
class KC idp
class G shared
| Farbe | Steht für |
|---|---|
| Kobaltblau | CDMS und das CDMS-Portal |
| Violett | CIAS und das CIAS-Portal |
| Indigo | der Hub (Oberfläche, Backend, MCP-Server) |
| Gelb | CRMS |
| Orange | Keycloak |
| Grau | gemeinsame Bausteine |
Die Pfeile lesen sich so: „Das Hub-Backend ist mit CDMS gebaut und bettet CIAS ein.“ Einbetten heißt: CIAS läuft als Baustein im selben Programm mit, nicht als eigener Dienst. Was das bedeutet, erklärt Eingebettet und getrennt im Vergleich.
Die Module einzeln
- Aus einem Modell erzeugt der Generator beim Build den Code einer Spring-Boot-Anwendung
- REST-API zum Anlegen, Lesen, Suchen, Ändern, Löschen
- Datenbank je Mandant, Historie, Dateien
- Rechte auf Modellen, Zeilenfilter
- eigene Fachlogik über Hooks
- prüft bei jeder Anfrage Token und Mandant (Filterkette)
- Benutzer, Mandanten, Rollen, Gruppen, Attribute
- Registrierung, Einladung, Mails, Audit
- schreibt Rollen und Gruppen über einen Adapter nach Keycloak
- läuft eingebettet oder als eigener Dienst
- eine CDMS-Anwendung mit den Modellen Vorlage und Bericht
- Vorlagen in FreeMarker, Zustand Entwurf, veröffentlicht, archiviert
- rendert Vorlage + Daten zu HTML und PDF
- Vorschau als PDF, ohne zu speichern
- Diagramme in Berichten
- Projekte, Dienste, Lizenzen, Personen, Rechte
- hält die Modelle aller CDMS-Anwendungen
- liefert den Projektrahmen und die Metadaten für den Build
- Verwaltung von Benutzern, Mandanten, Rollen (Bereich „Zugriff“)
- MCP-Server für KI-Clients
Ein paar Wörter aus der Tabelle:
- Ein Modell beschreibt eine Art von Ding, das deine Anwendung kennt, etwa „Kunde“ mit seinen Feldern. Mehr dazu unter Modellieren im Hub.
- Ein Mandant ist ein Kunde deiner Anwendung, dessen Daten von allen anderen getrennt sind.
- Ein Hook ist eigener Code, der sich in einen Ablauf von CDMS einhängt.
- MCP (Model Context Protocol) ist ein Protokoll, über das KI-Clients Werkzeuge aufrufen. Der MCP-Server des Hubs lässt sie Modelle lesen und kontrolliert ändern, siehe Schemaänderung über den MCP-Server.
Die Landkarte der Repositories
Jedes Modul besteht aus mehreren Repositories, also eigenen Git-Projekten. Es gibt vier Arten:
- Bibliothek: ein Java-Baustein (JAR), den andere Projekte einbinden. Er läuft nie allein.
- Dienst: ein Programm, das allein startet und Anfragen beantwortet.
- Oberfläche: eine Web-Anwendung (Nuxt) mit eigenem Server, dem BFF. Was ein BFF ist, steht unter Die Beteiligten einer Anfrage.
- Werkzeug: etwas, das beim Bauen, Testen oder in Keycloak läuft.
flowchart LR
subgraph GEM["Gemeinsam"]
direction TB
gp["global-parent"]
co["commons"]
cpe["commons-persistence"]
end
subgraph CD["CDMS"]
direction TB
cdl["cdms-commons · cdms-rest-api<br/>cdms-system-layer · cdms-authorization<br/>cdms-persistence-database<br/>cdms-localfs-storage"]
cdw["cdms-generator · cdms-scaffold<br/>cdms-parent · cdms-integrationtest"]
cdf["CDMS/frontend<br/>(CDMS-Portal)"]
end
subgraph CI["CIAS"]
direction TB
cil["cias-kernel · cias-authentication<br/>cias-tenancy · cias-user<br/>cias-authorization · cias-registration<br/>cias-notification · cias-audit<br/>cias-iam-api · cias-iam-keycloak<br/>cias-iam-memory · cias-tenancy-client<br/>cias-spring-boot-starter"]
cir["cias-runtime"]
ciw["cias-parent · cias-test-support<br/>cias-integrationtest<br/>cias-iam-keycloak-provider"]
cif["cias-frontend<br/>(CIAS-Portal)"]
end
subgraph HU["Hub"]
direction TB
hb["hub-backend"]
hf["hub-frontend"]
hl["hub-login"]
end
subgraph CR["CRMS"]
direction TB
crb["crms-backend-mvp"]
crf["crms-frontend-mvp"]
end
classDef hub fill:#4f46e5,stroke:#4f46e5,color:#fff
classDef cdms fill:#1976d2,stroke:#1976d2,color:#fff
classDef cias fill:#8e24aa,stroke:#8e24aa,color:#fff
classDef crms fill:#ffc107,stroke:#b38600,color:#1f1a00
classDef shared fill:#64748b,stroke:#64748b,color:#fff
class gp,co,cpe shared
class cdl,cdw,cdf cdms
class cil,cir,ciw,cif cias
class hb,hf,hl hub
class crb,crf crms
Gemeinsame Bausteine
| Repository | Art | Wofür |
|---|---|---|
global-parent | Werkzeug | Eltern-POM aller Java-Module: Versionen, Plugins, Qualitätsregeln |
commons | Bibliothek | kleine Basis ohne Fachlogik, z. B. der RequestContext einer Anfrage, Modell- und Hook-Schnittstellen |
commons-persistence | Bibliothek | Mandanten-Infrastruktur: eine System-Datenbank plus eine Datenbank je Mandant, Verbindungen, Migration. CDMS, CIAS und CRMS teilen sie |
CDMS
| Repository | Art | Wofür |
|---|---|---|
cdms-commons | Bibliothek | der Vertrag von CDMS: Schnittstellen, Annotationen, Anfrage- und Antwortformate |
cdms-rest-api | Bibliothek | die REST-Schicht: Controller, Payloads, Feldauswahl |
cdms-system-layer | Bibliothek | das Herzstück: Anlegen, Ändern, Lesen, Löschen über Beziehungen hinweg, Validierung, Hooks |
cdms-authorization | Bibliothek | Rollenprüfung je Modell und Operation, Attributfilter |
cdms-persistence-database | Bibliothek | Abfragen, Projektion, Historie (Artefakt cdms-database) |
cdms-localfs-storage | Bibliothek | Dateiinhalte auf dem Dateisystem oder einem Volume |
cdms-generator | Werkzeug | erzeugt beim Build den Code aus dem Modell |
cdms-scaffold | Bibliothek | schreibt pom.xml und Projektrahmen einer CDMS-Anwendung |
cdms-parent | Werkzeug | Eltern-POMs der CDMS-Bibliotheken und der CDMS-Anwendungen |
cdms-integrationtest | Werkzeug | Testsuite gegen eine generierte Testanwendung |
CDMS/frontend | Oberfläche | das CDMS-Portal: Modelle, Felder, Beziehungen, Endpunkte, Rechte bearbeiten |
CIAS
| Repository | Art | Wofür |
|---|---|---|
cias-kernel | Bibliothek | Grundbegriffe: Mandant, Benutzer, angemeldete Identität, Ereignisse |
cias-authentication | Bibliothek | die Filterkette: Token prüfen und tauschen, Mandant auflösen und zulassen |
cias-tenancy | Bibliothek | Mandanten und ihr Lebenslauf |
cias-user | Bibliothek | der Benutzerdatensatz, Status, Attribute |
cias-authorization | Bibliothek | Rollenkatalog, Rollenvergabe, Gruppen |
cias-registration | Bibliothek | Registrierung und Einladung |
cias-notification | Bibliothek | Mails und ihre Vorlagen |
cias-audit | Bibliothek | das Protokoll aller Änderungen an Personen und Rechten |
cias-iam-api | Bibliothek | die Ports zum Identity Provider, ohne Keycloak-Bezug |
cias-iam-keycloak | Bibliothek | der Adapter für Keycloak |
cias-iam-memory | Bibliothek | ein Identity Provider im Speicher, für Tests und Entwicklung |
cias-tenancy-client | Bibliothek | fragt einen getrennten CIAS-Dienst per HTTP, ob ein Mandant bedient wird |
cias-spring-boot-starter | Bibliothek | verdrahtet die CIAS-Module in einer Spring-Boot-Anwendung |
cias-runtime | Dienst | CIAS als eigener Dienst mit eigener Datenbank |
cias-iam-keycloak-provider | Werkzeug | eine Erweiterung, die in Keycloak läuft (Link zum Passwort-Setzen) |
cias-parent, cias-test-support, cias-integrationtest | Werkzeug | Eltern-POM, gemeinsame Testsuiten für Adapter, Integrationstests |
cias-frontend | Oberfläche | das CIAS-Portal: welche Dienste an CIAS hängen und wie |
Hub
| Repository | Art | Wofür |
|---|---|---|
hub-backend | Dienst | das zentrale CDMS: hält Projekte, Dienste und die Modelle aller CDMS-Anwendungen. Bettet CIAS ein und enthält den MCP-Server |
hub-frontend | Oberfläche | die Hub-Oberfläche: Projekte, Dienste, Lizenzen, Personen, Rechte. Von hier springst du in die Portale der Module |
hub-login | Werkzeug | das Aussehen der Login-Seiten, als Theme in Keycloak |
CRMS
| Repository | Art | Wofür |
|---|---|---|
crms-backend-mvp | Dienst | eine CDMS-Anwendung mit den Modellen Vorlage (Template) und Bericht (Report), dazu die Endpunkte für Vorschau und Bericht |
crms-frontend-mvp | Oberfläche | Vorlagen anlegen, bearbeiten, ihre Versionen ansehen, als PDF vorschauen |
Dokumentation
| Repository | Art | Wofür |
|---|---|---|
documentation | Wissen | die Wissensdatenbank zu CodamAI, als Markdown |
codamai-web-docs | Werkzeug | baut aus der Wissensdatenbank die öffentliche Doku-Website |
Wie die Module zusammenhängen
Abhängigkeiten zeigen immer nach unten: Eine Anwendung bindet Bibliotheken ein, Bibliotheken binden die gemeinsamen Bausteine ein. Nie umgekehrt.
flowchart BT
GP["global-parent"]
CO["commons"]
CPE["commons-persistence"]
CDL["CDMS-Bibliotheken"]
CIL["CIAS-Bibliotheken"]
GEN["cdms-generator<br/>(beim Build)"]
HB["hub-backend"]
CRB["crms-backend-mvp"]
APP["deine CDMS-Anwendung"]
CIR["cias-runtime"]
CO --> GP
CPE --> CO
CDL --> CO
CDL --> CPE
CIL --> CO
CIL --> CPE
HB --> CDL
HB --> CIL
CRB --> CDL
CRB --> CIL
APP --> CDL
APP --> CIL
CIR --> CIL
GEN -. "erzeugt Code für" .-> HB
GEN -. "erzeugt Code für" .-> CRB
GEN -. "erzeugt Code für" .-> APP
classDef hub fill:#4f46e5,stroke:#4f46e5,color:#fff
classDef cdms fill:#1976d2,stroke:#1976d2,color:#fff
classDef cias fill:#8e24aa,stroke:#8e24aa,color:#fff
classDef crms fill:#ffc107,stroke:#b38600,color:#1f1a00
classDef shared fill:#64748b,stroke:#64748b,color:#fff
classDef build fill:#57534e,stroke:#57534e,color:#fff
class GP,CO,CPE shared
class CDL,APP cdms
class CIL,CIR cias
class HB hub
class CRB crms
class GEN build
Drei Dinge fallen auf:
- Jede CDMS-Anwendung ist gleich gebaut. Das Hub-Backend, das CRMS-Backend und deine eigene Anwendung binden dieselben CDMS-Bibliotheken ein. Der Generator erzeugt für alle drei den Code aus ihrem Modell. Die Modelle deiner Anwendung holt er aus dem Hub, siehe Codegenerierung im Build.
- CIAS kommt als Bibliotheken. Eine Anwendung mit Anmeldung bindet
cias-authenticationein, damit jede Anfrage durch die Filterkette läuft. Ob die übrigen CIAS-Module mit im selben Prozess laufen oder incias-runtime, ist die Betriebsart, siehe Eingebettet und getrennt im Vergleich. - Keycloak kennt nur ein Modul. Einzig der Adapter
cias-iam-keycloakspricht mit der Verwaltungs-API von Keycloak. Warum, steht unter CIAS als Brücke zum Identity Provider.
Welche Art von Repository ist das?
| startet allein? | hat Nuxt-Oberfläche? | Art |
|---|---|---|
| ja | nein | Dienst, z. B. hub-backend, cias-runtime, crms-backend-mvp |
| ja | ja | Oberfläche mit BFF, z. B. hub-frontend, CDMS/frontend, cias-frontend |
| nein | nein | Bibliothek oder Werkzeug, z. B. cdms-system-layer, cias-authentication, cdms-generator |
Fallen
Weiter
- Die Beteiligten einer Anfrage: wer bei einer Anfrage mit wem spricht
- Die wichtigsten Begriffe in Bildern
- Wer entscheidet was?
- Eingebettet und getrennt im Vergleich