Skip to content

Data Model: Service Catalog

Feature Branch: 001-service-catalogDate: 2026-02-23

Entities

1. DataStore (Modified)

Existing entity — add optional fileType field.

FieldTypeRequiredDescription
idStringautoUUID, generated by persistence layer
nameStringyesHuman-readable name (e.g., finance.service.zip)
dataStringyesBase64-encoded binary content
fileTypeFileType (enum)noClassification of stored content
labelsMap<String, String>noKey-value metadata for filtering

FileType enum values:

ValueDescription
ROUTESCamel route definition file
RULESWanaku MCP rules file
DEPENDENCIESMaven dependencies list file
CATALOGService catalog ZIP package
OTHERUnclassified (default for existing entries)

Validation:

  • name must be unique within the data store
  • fileType defaults 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.

PropertyTypeRequiredDescription
catalog.nameStringyesUnique service name (e.g., finance)
catalog.iconStringnoDisplay icon (emoji or icon identifier)
catalog.descriptionStringyesHuman-readable description of the service
catalog.servicesString (CSV)yesComma-separated list of system identifiers
catalog.routes.<system>StringyesRelative path to Camel route YAML for this system
catalog.rules.<system>StringyesRelative path to Wanaku rules YAML for this system
catalog.dependencies.<system>StringnoRelative path to dependencies file for this system

Validation:

  • Each system listed in catalog.services must have corresponding catalog.routes.<system> and catalog.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.yaml

3. 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 deploy uploads ZIP to DataStore with fileType=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, --dependencies options remain unchanged
  • New --service-catalog option is additive