Design Model structure

Introduction

The API, domain and integration namespaces modeled in the Solution Designer will be reflected by *.yaml files in the directory /src-design in the related Git repository. Each yaml-file has a defined structure which you can find described below.

Design model yaml structures

Note:

Within the yaml files there are often links to other items of the project. Those links are using the paths of the items within the /src-design directory to uniquely identify them.

Agent

An agent is described by a *.yaml file in the folder src-design/domain/<namespaceName>/agent where the identifier is used as the file name (e. g. NewOrderCreatedAgent.yaml)

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v2/agent.schema.json
type *Enum (of string)Type of agent
Supported values:
- "event"
triggerEventLink *StringLink to business event that triggers the agent
mappedBusinessEventLinks *Array of stringLinks to business events that are associated with the agent and can be triggered from it
Can be an empty array
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item
comments *Array of CommentList of comments, which were added to the item during development
Can be an empty array
documentation *Object of type DocumentationDocumentation information

* Mandatory field

Example file:

schemaVersion: /v2/agent.schema.json
type: event
mappedBusinessEventLinks: []
triggerEventLink: /domain/ord/event/NewOrderCreated
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
comments:
  - text: Some comment
    creationTs: '1687780358190'
    creator: John Doe
documentation:
  schemaVersion: /v1/documentation.schema.json
  fileLink: /domain/cons/agent/NewOrderCreatedAgent.md
  creationTs: '1687780358190'
  creator: John Doe
  creatorId: 12345678-1234-1234-1234-123456789012

API Dependency

An API Dependency is consisting out of two yaml files in the folder src-design/integration/<namespaceName>/<apiDependencyName>.

meta.yaml

The meta.yaml contains meta information about the modeled API Dependency.

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v1/apiDependency.schema.json
fileLinkStringLink to the associated spec.yaml containing the API specification
localLookupBooleanIndicates whether the API binding should be auto resolved. Usually set to false, when apiBinding is defined
apiBindingStringJSON string defining values for the API Dependency bindings. NOTE: If "URL" is defined, the URL in the Specification file will be overwritten.
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item
comments *Array of CommentList of comments, which were added to the item during development
Can be an empty array

* Mandatory field

Example file:

schemaVersion: /v1/apiDependency.schema.json
comments: []
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
fileLink: /integration/petstore/apiDependency/pet/spec
apiBinding: '{ "url": "https://petstore.swagger.io/v2" }'
localLookup: false

spec.yaml

The spec.yaml file contains the uploaded API specification of the API Dependency. It is linked within the meta.yaml file.

Command

A command is described by a *.yaml file in the folder src-design/domain/<namespaceName>/command where the identifier is used as the file name (e. g. CreateOrderCommand.yaml)

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v2/command.schema.json
type *Enum (of string)Type of command
Supported values:
- "factory"
- "instance"
label *StringLabel of the command, used for displaying purposes
shortLabelStringShort label of the command, used for displaying purposes
notesStringFurther notes describing the command
baseEntityLink *StringLink to root entity to which the command is associated
inputEntityLinkStringLink to input entity of the command
inputIsEntityListBooleanIndicates if input entity is a list or not
mappedBusinessErrorLinks *Array of stringLinks to business errors that are associated with the command and can be thrown from it
Can be an empty array
mappedBusinessEventLinks *Array of stringLinks to business events that are associated with the command and can be triggered from it
Can be an empty array
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item
comments *Array of CommentList of comments, which were added to the item during development
Can be an empty array
documentation *Object of type DocumentationDocumentation information

* Mandatory field

Example file:

schemaVersion: /v2/command.schema.json
comments: []
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
label: CreateOrderCommand
type: factory
baseEntityLink: /domain/dom1/entity/OrderEntity
inputEntityLink: /domain/dom1/entity/CreateOrderCommand_Input
inputIsEntityList: false
mappedBusinessErrorLinks:
  - /domain/dom1/error/OrderCreationFailed
mappedBusinessEventLinks:
  - /domain/dom1/event/NewOrderCreated
documentation:
  fileLink: /domain/dom1/command/CreateOrderCommand.md
  schemaVersion: /v1/documentation.schema.json
  creationTs: '1687780358190'
  creator: John Doe
  creatorId: 12345678-1234-1234-1234-123456789012

Comment

Comments can be stored at every item during development to leave hints, notes and other information.

PropertyTypeTitle/Description
text *StringThe comment itself
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item

* Mandatory field

Example:

text: Some comment
creationTs: '1687780358190'
creator: John Doe

Database collection

A database collection is described by a *.yaml file in the folder src-design/domain/<namespaceName>/dbCollection where the identifier is used as the file name (e. g. orders.yaml)

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v1/dbCollection.schema.json
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item
comments *Array of CommentList of comments, which were added to the item during development
Can be an empty array

* Mandatory field

Example file:

schemaVersion: /v1/dbCollection.schema.json
comments: []
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012

Documentation

Within each item, which has a documentation possibility, you can find an object that holds several details around the documentation. E.g. creator information or where the acutal documentation content is stored as this is preserved in a separate *.md file.

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be "/v1/documentation.schema.json"
fileLink *StringLink to the documentation file
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item

* Mandatory field

Example:

fileLink: /domain/dom1/command/MyCommand.md
schemaVersion: /v1/documentation.schema.json
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012

Entity

An entity is described by a *.yaml file in the folders src-design/domain/<namespaceName>/entity or src-design/integration/<namespaceName>/entity where the identifier is used as the file name (e. g. Order.yaml)

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v3/entity.schema.json
type *Enum (of string)Type of entity
Supported values:
- "root"
- "entity"
- "external"
label *StringLabel of the entity, used for displaying purposes
shortLabelStringShort label of the entity, used for displaying purposes
notesStringFurther notes describing the entity
isLocallyManagedBooleanWhether the entity is locally managed. This means the entity lives within the context of the Input/Output/Payload of a Service/Command/Event
Default value is false
isAbstractBooleanBoolean value indicating if the entity is abstract
Default value is false
parentLinksArray of stringLinks to entities used as parents of the entity
properties *Array of Property MappingList of properties used to describe the fields of the entity
Can be an empty array
dbCollectionLinkStringLink to the database collection to which the entity is associated
Only filled for entities of type root
constructorPropertiesArray of Property MappingList of properties used to prepare the external entity to reference an external object or call
Only filled for entities of type external
knownEntityLinksArray of stringLinks to entities that could be possible responses that the External Entity may know about
Only filled for entities of type external
annotationsObject of type Entity persistence annotationsEntity persistence annotations
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item
comments *Array of CommentList of comments, which were added to the item during development
Can be an empty array
documentation *Object of type DocumentationDocumentation information

* Mandatory field

Example file:

schemaVersion: /v3/entity.schema.json
type: root
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
label: Order Entity
shortLabel: Order
notes: An entity that describes an order
isAbstract: false
isLocallyManaged: false
parentLinks:
  - /domain/dom1/entity/GenericOrder
dbCollectionLink: /domain/dom1/dbCollection/orders
properties:
  - mappingType: value
    isMandatory: true
    propertyDefinitionLink: /domain/dom1/propertyDefinition/orderId
    propertyName: orderId
constructorProperties: []
comments: []
documentation:
  fileLink: /domain/dom1/entity/Order.md
  schemaVersion: /v1/documentation.schema.json
  creationTs: '1687780358190'
  creator: John Doe
  creatorId: 12345678-1234-1234-1234-123456789012
annotations:
  rdbms:
    table:
      name: myTable
      catalog: myCatalog
      schema: mySchema
      uniqueConstraints:
        - name: 'my constraint name'
          columnNames:
            - abc
            - xyz
      indexes:
        - name: 'my index name'
          columnList:
            - abc
            - xyz
          unique: true
  customAnnotations:
    - '@YourCustomAnnotation(prop1="value")'

Property mapping

Property mappings are used within entities to associate property definitions and entities. Additionally some further information can be stored at the property mapping, which just affects the usage of the property within the entity, but not the property definition itself.

PropertyTypeTitle/Description
propertyDefinitionLink *StringLink to the property definition
propertyName *StringThe name of the property in context of the entity
Can be different from the original identifier in the property definition
isMandatory *BooleanIndicates whether the property is defined as a mandatory field or not
mappingType *Enum (of string)Mapping type
Supported values:
- "value" for all properties that have no range defined
- "range" (in case of properties with type reference, localEntity or externalEntity)
rangeRestrictionLinkStringLink to entity that restricts the range further
Has to be a children of the original property range
minValueStringThe minimum value that can be set for the property
Only for properties of type "currency", "decimal", "long" or "integer"
maxValueStringThe maximum value that can be set for the property
Only for properties of type "currency", "decimal", "long" or "integer"
minLengthStringThe minimum length that the value of the property must have
Only for text type properties
maxLengthStringThe maximum length that the value of the property must have
Only for text type properties
defaultValueStringThe default value for the property
Only for text type properties
validationPatternStringThe validation pattern for the property
Only for text type properties
annotationsObject of type Property mapping persistence annotationsProperty mapping persistence annotations

* Mandatory field

Example:

propertyDefinitionLink: /domain/dom1/propertyDefinition/orderId
propertyName: orderId
isMandatory: true
mappingType: value
minLength: '1'
maxLength: '26'
annotations:
  rdbms:
    column:
      name: myColumnName
      length: 200
      insertable: true
      nullable: true
      precision: 2
      scale: 2
      unique: false
      updatable: true
    collectionTable:
      name: myTable
      catalog: myCatalog
      schema: mySchema
      joinColumns:
        - name: abx
    primaryKey: true
    primaryKeyGeneratedValue:
      strategy: AUTO
  customAnnotations:
    - '@YourCustomAnnotation(prop1="value")'

Example with annotations applied at MongoDB:

propertyDefinitionLink: /domain/dom1/propertyDefinition/orderId
propertyName: orderId
isMandatory: true
mappingType: value
minLength: '1'
maxLength: '26'
annotations:
  mongo:
    field:
      name: myFieldName
      order: 5
  customAnnotations:
    - '@YourCustomAnnotation(prop1="value")'

Persistence annotations

JpaUniqueConstraint

FieldTypeDescription
columnNames *Array of stringA list of the column names that make up the constraint
namestringConstraint name

* Mandatory field

JpaIndex

FieldTypeDescription
columnList *Array of stringThe names of the columns to be included in the index, in order
namestringThe name of the index, defaults to a provider-generated name
uniquebooleanWhether the index is unique

* Mandatory field

Entity persistence annotations

Annotations for RDBMS, as well as custom annotations is supported for projects based on the Java Spring Boot Stack 2.0.

FieldTypeDescription
rdbmsObject of type Entity RDBMS annotationsEntity rdbms annotations
customAnnotationsArray of stringFully qualified custom annotations
Entity RDBMS annotations
FieldTypeDescription
tableObject of type Table Jpa annotationEntity @Table Jpa annotation
Table Jpa annotation
FieldTypeDescription
namestringThe name of the table, if not provided it will default to the entity name
catalogstringThe catalog of the table
schemastringThe schema of the table
uniqueConstraintsArray of JpaUniqueConstraintUnique constraints that are to be placed on the table
indexesArray of JpaIndexIndexes for the table

Property mapping persistence annotations

Annotations for MongoDB and RDBMS, as well as custom annotations is supported for projects based on the Java Spring Boot Stack 2.0.

FieldTypeDescription
mongoObject of type Property mapping MongoDB annotationsProperty mapping MongoDB annotations
rdbmsObject of type Property mapping RDBMS annotationsProperty mapping rdbms annotations
customAnnotationsArray of stringFully qualified custom annotations
Property mapping MongoDB annotations
FieldTypeDescription
fieldObject of type Field MongoDB annotation@Field annotation, identifies a domain object to be persisted to MongoDB
Field MongoDB annotation
FieldTypeDescription
namestringThe key to be used to store the field inside the document, defaults to the property name
orderintegerThe order in which various fields shall be stored
Property mapping RDBMS annotations
FieldTypeDescription
columnObject of type Column Jpa annotation@Column Jpa annotation
collectionTableObject of type Column Jpa annotation@CollectionTable Jpa annotation
primaryKeyboolean@PrimaryKey Jpa annotation
primaryKeyGeneratedValueObject of type Primarykey detailsFurther details of @PrimaryKey Jpa annotation
Column Jpa annotation
FieldTypeDescription
namestringThe name of the column, defaults to the name of the property
lengthnumberThe column length
insertablebooleanWhether the column is included in SQL INSERT statements generated by the persistence provider
nullablebooleanWhether the database column is nullable
precisionnumberThe precision for a decimal (exact numeric) column
scalenumberThe scale for a decimal (exact numeric) column
uniquebooleanWhether the column is a unique key
updatablebooleanWhether the column is included in SQL UPDATE statements generated by the persistence provider
CollectionTable Jpa annotation
FieldTypeDescription
namestringThe name of the collection table, defaults to ${entityName}_${propertyName}
catalogstringThe catalog of the collection table
schemastringThe schema of the collection table
joinColumnsArray of JpaJoinColumnThe foreign key columns of the collection table which reference the primary table of the entity
uniqueConstraintsArray of JpaUniqueConstraintUnique constraints that are to be placed on the table
indexesArray of JpaIndexIndexes for the table
JpaJoinColumn
FieldTypeDescription
namestringThe name of the foreign key column, defaults to ${entityName}_id
PrimaryKey details
FieldTypeEnumDescription
strategystringAUTO, IDENTITY, SEQUENCE, TABLE, UUIDThe primary key generation strategy that the persistence provider must use to generate the annotated entity primary key
generatorstring The name of the primary key generator to use as specified in the SequenceGenerator or TableGenerator annotation
Note:

When using composite primary key with legacy naming strategy the application.yml needs to have the following enrtries:

spring.jpa:
  hibernate:
    naming:
      implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl
      physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

Error

An error is described by a *.yaml file in the folders src-design/domain/<namespaceName>/error or src-design/integration/<namespaceName>/error where the identifier is used as the file name (e. g. OrderCancellingFailed.yaml)

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v2/error.schema.json
errorMessage *StringError message
errorDescriptionStringDescription of the business error
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item
comments *Array of CommentList of comments, which were added to the item during development
Can be an empty array
documentation *Object of type DocumentationDocumentation information

* Mandatory field

Example file:

schemaVersion: /v2/error.schema.json
comments: []
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
errorMessage: Order cancelling failed
errorDescription: The cancelling of one or many orders failed. Please try again
documentation:
  fileLink: /domain/dom1/error/OrderCancellingFailed.md
  schemaVersion: /v1/documentation.schema.json
  creationTs: '1687780358190'
  creator: John Doe
  creatorId: 12345678-1234-1234-1234-123456789012

Event

An event is described by a *.yaml file in the folder src-design/domain/<namespaceName>/event where the identifier is used as the file name (e. g. NewOrderCreated.yaml)

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v3/event.schema.json
type *Enum (of string)Type of event
Supported values:
- "business"
label *StringLabel of the event, used for displaying purposes
shortLabelStringShort label of the event, used for displaying purposes
notesStringFurther notes describing the event
topicAlias *StringAlias of associated topic binding
payloadTypeStringEvent Payload type
Supported values:
- "schema"
- "entity" (default, but deprecated)
schemaPayloadMetadataObject of type Schema metadataInformation, which schema is used as payload of the event
Is empty if payloadType is entity or no payload is used at all
payloadSchemaReferenceIdStringPayload reference id
payloadEntityLinkStringLink to the entity, which is used as payload for the event
Is empty if payloadType is schema or no payload is used at all
payloadIsEntityListBooleanIndicates if payload entity is list or not
Is empty if payloadType is schema or no payload is used at all
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item
comments *Array of CommentList of comments, which were added to the item during development
Can be an empty array
documentation *Object of type DocumentationDocumentation information

* Mandatory field

Example file:

schemaVersion: /v3/event.schema.json
comments: []
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
type: business
label: New order has been created
shortLabel: Order created
notes: An event that describes that an order has been created
topicAlias: new-order-created-topic
payloadType: Schema
schemaPayloadMetadata:
  artifactId: order-details
  groupId: order
  version: '2'
documentation:
  fileLink: /domain/dom1/event/NewOrderCreated.md
  schemaVersion: /v1/documentation.schema.json
  creationTs: '1687780358190'
  creator: John Doe
  creatorId: 12345678-1234-1234-1234-123456789012

Schema metadata

Schema metadata is used within events to describe the necessary information to identify a schema which can be used as event payload.

PropertyTypeTitle/Description
groupId *StringId of apicurio group in which the schema is stored
artifactId *StringUnique id of the schema, how it is stored in the apicurio registry
version *StringUsed version of the schema

* Mandatory field

Example:

groupId: order
artifactId: order-details
version: '2'

Namespace

An event is described by a *.yaml file in the folders

  • src-design/api/<namespaceName>/event
  • src-design/domain/<namespaceName>/event
  • src-design/integration/<namespaceName>/event where the identifier is used as the file name (e. g. dom1.yaml)
PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v2/namespace.schema.json
type *Enum (of string)Type of namespace
Supported values:
- "api"
- "domain"
- "integration"
label *StringLabel of the namespace, used for displaying purposes
descriptionStringDescription of the namespace, used for displaying purposes
supportedSpecEnum (of string)Supported API specification for the API Namespace. Is mandatory if type is "api"
Supported values:
- "openApi3.0"
- "swagger2.0"
hostStringBase path under which the API will be published
Only if type is "api"
apiTitleStringTitle of the published API
Only if type is "api"
apiDescriptionStringDescription of the published API
Only if type is "api"
apiVersionStringVersion of the published API
Only if type is "api"
contactNameStringContact name used in the published API
Only if type is "api"
contactEmailStringContact mail used in the published API
Only if type is "api"
contactUrlStringContact url used in the published API
Only if type is "api"
licenseNameStringLicense name used in the published API
Only if type is "api"
licenseUrlStringLicense url used in the published API
Only if type is "api"
termsOfServiceStringTerms of service url used in the published API
Only if type is "api"
ibmBpmIntegrationBooleanDescribes if this namespace is used for integration with IBM Business Process Management
Only if type is "api"
ibmApiConnectIntegrationBooleanDescribes if this namespace is used for integration with IBM API Connect
Only if type is "api"
xIbmNameStringThe display name within IBM API Connect
Only if type is "api"
apiConnectConfigurationsObject of type IBM API Connect ConfigurationConfigurations to add extensions specific to IBM API Connect
Only if type is "api"
descriptionStringLabel of the description, used for displaying purposes
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item
documentation *Object of type DocumentationDocumentation information

* Mandatory field

Example file:

schemaVersion: /v2/namespace.schema.json
type: domain
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
label: dom1
documentation:
  fileLink: /domain/dom1/dom1.md
  schemaVersion: /v1/documentation.schema.json
  creationTs: '1687780358190'
  creator: John Doe
  creatorId: 12345678-1234-1234-1234-123456789012

IBM API Connect Configuration

IBM API Connect Configuration is used within API namespaces which should be integrated within IBM API Connect. They hold various information to ease the integration.

PropertyTypeTitle/Description
phase *StringUsed to describe the maturity of the API
Supported values:
- "identified"
- "specified"
- "realized"
testable *BooleanUsed to specify whether the API can be tested using the test tool in the Developer Portal
enforced *BooleanUsed to specify if the API Connect gateway is used to enforce the API
cors *Object of type IBM API Connect Cors SettingsCORS access control for IBM API Connect
type *StringType of API
Supported values:
- "rest"

* *Mandatory field

Example:

phase: identified
testable: true
enforced: true
cors:
  enabled: true
type: rest

IBM API Connect Cors Settings

IBM API Connect Cors settings are used within IBM API Connect Configuration to describe the cores settings when integrating with IBM API Connect.

PropertyTypeTitle/Description
enabled *BooleanUsed to specify whether CORS access control is used for the API

Example:

enabled: true

Property Definition

A property definition is described by a *.yaml file in the folders src-design/domain/<namespaceName>/propertyDefinition or src-design/integration/<namespaceName>/propertyDefinition where the identifier is used as the file name (e. g. orderId.yaml)

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v2/propertyDefinition.schema.json
type *Enum (of string)Type of property
Supported values: boolean, currency, date, time, decimal, externalReference, geoPoint, integer, long, localEntity, localizedText, reference, selectionElement, text, text/url, text/email, timestamp
labelStringLabel of the property, used for displaying purposes
shortLabelStringShort label of the property, used for displaying purposes
notesStringFurther notes describing the property
isListBooleanIndicates if property is a list or not
Only if type is "localEntity", "reference" or "externalReference"
rangeLinkStringLink to the range entity
Only if type is "localEntity", "reference" or "externalReference"
decimalPlacesStringThe amount of decimal places specified for the property
Only if type is "decimal"
selectionElementsObject of type Selection ElementEnumeration elements specified for the property
Only if type is "selectionElement"

* Mandatory field

Example decimal property rating.yaml:

schemaVersion: /v2/propertyDefinition.schema.json
comments: []
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
type: decimal
decimalPlaces: '2'
documentation:
  fileLink: /domain/dom1/propertyDefinition/rating.md
  schemaVersion: /v1/documentation.schema.json
  creationTs: '1687780358190'
  creator: John Doe
  creatorId: 12345678-1234-1234-1234-123456789012

Example selection element property orderStatus.yaml:

schemaVersion: /v2/propertyDefinition.schema.json
comments: []
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
type: selectionElement
selectionElements:
  new:
    notes: 'Order has status new'
  done:
    notes: 'Order has status done'
  cancelled: {}
documentation:
  fileLink: /domain/dom1/propertyDefinition/orderStatus.md
  schemaVersion: /v1/documentation.schema.json
  creationTs: '1687780358190'
  creator: John Doe
  creatorId: 12345678-1234-1234-1234-123456789012

Selection Elements

Selection elements are used within the property definitions of type selectionElement and specify the available keys. Each key can also own notes

PropertyTypeTitle/Description
<anyKey>ObjectObject holding one property notes for further details

Example:

new:
  notes: 'Order has status new'
done:
  notes: 'Order has status done'
cancelled: {}

Service

A service is described by a *.yaml file in the folders src-design/domain/<namespaceName>/service or src-design/integration/<namespaceName>/service where the identifier is used as the file name (e. g. CancelAllOrders.yaml)

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v2/service.schema.json
type *Enum (of string)Type of service
Supported values:
- "domain"
- "integrationRest"
label *StringLabel of the service, used for displaying purposes
shortLabelStringShort label of the service, used for displaying purposes
notesStringFurther notes describing the service
inputEntityLinkStringLink to input entity of the service
inputIsEntityListBooleanIndicates if input entity is a list or not
outputEntityLinkStringLink to output entity of the service
outputIsEntityListBooleanIndicates if output entity is a list or not
mappedBusinessErrorLinks *Array of stringLinks to business errors that are associated with the service and can be thrown from it
Can be an empty array
mappedBusinessEventLinks *Array of stringLinks to business events that are associated with the service and can be triggered from it
Can be an empty array
sagaDetailsObject of type Saga detailsSaga related details if service is used as orchestrator or participant within a saga
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item
comments *Array of CommentList of comments, which were added to the item during development
Can be an empty array
documentation *Object of type DocumentationDocumentation information

* Mandatory field

Example file:

schemaVersion: /v2/service.schema.json
comments: []
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
label: CancelAllOrders Service
shortLabel: Cancel orders
type: domain
inputEntityLink: /domain/dom1/entity/Order
inputIsEntityList: true
outputEntityLink: /domain/dom1/entity/CancelOrderCommand_Input
outputIsEntityList: false
mappedBusinessErrorLinks:
  - /domain/dom1/error/OrderCancellingFailed
mappedBusinessEventLinks:
  - /domain/dom1/event/OrderCancelled
documentation:
  fileLink: /domain/dom1/command/CancelAllOrders.md
  schemaVersion: /v1/documentation.schema.json
  creationTs: '1687780358190'
  creator: John Doe
  creatorId: 12345678-1234-1234-1234-123456789012

Saga details

Saga details is used within services to describe the necessary information when the service is chosen to be used in a saga (either as orchestrator or participant)

PropertyTypeTitle/Description
type *Enum (of string)Type of saga item
Supported values:
- "orchestrator"
- "participant"
propagationLevel *Enum (of string)Saga propagation level
Supported values:
- "required"
- "requires_new"
- "mandatory"
- "supports"
- "not_supported"
- "never"
completionMode *Enum (of string)Saga completion mode
Supported values:
- "auto"
- "manual"
hasOnCompensateMethod *BooleanIndicates whether an onCompensate method should be autogenerated
Default value is "false"
hasOnCompleteMethod *BooleanIndicates whether an onComplete method should be autogenerated
Default value is "false"
mappedParticipantLinksArray of stringArray of links to participants that can be called in the orchestrator
Only if type is *"orchestrator"
optionsObjectOption expressions as key value pair, provided as additional information within the implementation
Only if type is *"participant"

* Mandatory field

Orchestrator example:

type: orchestrator
propagationLevel: 'required'
completionMode: 'manual'
hasOnCompensateMethod: true
hasOnCompleteMethod: false
mappedParticipantLinks:
  - /domain/dom1/service/SagaParticipantService1
  - /domain/dom1/service/SagaParticipantService2

Participant example:

type: participant
propagationLevel: 'required'
completionMode: 'manual'
hasOnCompensateMethod: true
hasOnCompleteMethod: false
options:
  opt1: 'value1'
  opt2: 'value2'