Data Model: Service Catalog
Feature Branch: 001-service-catalogDate: 2026-02-23
Entities
1. DataStore (Modified)
Existing entity — add optional fileType field.
| Field | Type | Required | Description |
|---|---|---|---|
| id | String | auto | UUID, generated by persistence layer |
| name | String | yes | Human-readable name (e.g., finance.service.zip) |
| data | String | yes | Base64-encoded binary content |
| fileType | FileType (enum) | no | Classification of stored content |
| labels | Map<String, String> | no | Key-value metadata for filtering |
FileType enum values:
| Value | Description |
|---|---|
| ROUTES | Camel route definition file |
| RULES | Wanaku MCP rules file |
| DEPENDENCIES | Maven dependencies list file |
| CATALOG | Service catalog ZIP package |
| OTHER | Unclassified (default for existing entries) |
Validation:
namemust be unique within the data storefileTypedefaults to null for backward compatibility (existing entries unaffected)
2. Service Catalog Index (index.properties)
Not a persisted entity — embedded within the ZIP archive as a properties file.
| Property | Type | Required | Description |
|---|---|---|---|
| catalog.name | String | yes | Unique service name (e.g., finance) |
| catalog.icon | String | no | Display icon (emoji or icon identifier) |
| catalog.description | String | yes | Human-readable description of the service |
| catalog.services | String (CSV) | yes | Comma-separated list of system identifiers |
| catalog.routes.<system> | String | yes | Relative path to Camel route YAML for this system |
| catalog.rules.<system> | String | yes | Relative path to Wanaku rules YAML for this system |
| catalog.dependencies.<system> | String | no | Relative path to dependencies file for this system |
Validation:
- Each system listed in
catalog.servicesmust have correspondingcatalog.routes.<system>andcatalog.rules.<system>entries catalog.dependencies.<system>is optional per system- Referenced files must exist within the ZIP archive
Example:
properties
catalog.name=finance
catalog.icon=<money emoji>
catalog.description=These services can be used to access the current and legacy finance systems
catalog.services=finance-new,finance-legacy
catalog.routes.finance-new=finance-new/finance-new.camel.yaml
catalog.rules.finance-new=finance-new/finance-new.wanaku-rules.yaml
catalog.dependencies.finance-new=finance-new/finance-new.dependencies.txt
catalog.routes.finance-legacy=finance-legacy/finance-legacy.camel.yaml
catalog.rules.finance-legacy=finance-legacy/finance-legacy.wanaku-rules.yaml3. Service Catalog ZIP Package
Not a database entity — a file format convention.
Structure:
<name>.service.zip
├── index.properties
├── <system-1>/
│ ├── <system-1>.camel.yaml
│ ├── <system-1>.wanaku-rules.yaml
│ └── <system-1>.dependencies.txt (optional)
├── <system-2>/
│ ├── <system-2>.camel.yaml
│ ├── <system-2>.wanaku-rules.yaml
│ └── <system-2>.dependencies.txt (optional)
└── ...Naming convention: <catalog.name>.service.zip
Relationships
DataStore (fileType=CATALOG)
└── contains Base64-encoded ZIP
└── index.properties
└── references N systems
├── <system>.camel.yaml (Camel routes)
├── <system>.wanaku-rules.yaml (MCP exposure rules)
└── <system>.dependencies.txt (optional Maven deps)State Transitions
Service catalog entries have no explicit lifecycle states. They exist or they don't:
- Created:
wanaku service deployuploads ZIP to DataStore withfileType=CATALOG - Deleted: Admin removes via UI or CLI; entry removed from DataStore
Backward Compatibility
- Existing DataStore entries have
fileType=null— no migration needed - Existing Camel capability
--routes-ref,--rules-ref,--dependenciesoptions remain unchanged - New
--service-catalogoption is additive