143 lines
3.9 KiB
JSON
143 lines
3.9 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://kbx.local/contracts/problems/kbx.problem.schema.json",
|
|
"title": "KBX Problem",
|
|
"oneOf": [
|
|
{ "$ref": "#/$defs/validation" },
|
|
{ "$ref": "#/$defs/businessRule" },
|
|
{ "$ref": "#/$defs/conflict" },
|
|
{ "$ref": "#/$defs/permission" },
|
|
{ "$ref": "#/$defs/notFound" },
|
|
{ "$ref": "#/$defs/integration" },
|
|
{ "$ref": "#/$defs/system" }
|
|
],
|
|
"$defs": {
|
|
"base": {
|
|
"type": "object",
|
|
"required": ["type", "title"],
|
|
"properties": {
|
|
"type": { "type": "string" },
|
|
"title": { "type": "string", "minLength": 1 },
|
|
"detail": { "type": ["string", "null"] },
|
|
"correlationId": { "type": ["string", "null"] }
|
|
}
|
|
},
|
|
"action": {
|
|
"type": "object",
|
|
"required": ["id", "label"],
|
|
"properties": {
|
|
"id": { "type": "string", "minLength": 1 },
|
|
"label": { "type": "string", "minLength": 1 }
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"validationError": {
|
|
"type": "object",
|
|
"required": ["code", "message"],
|
|
"properties": {
|
|
"field": { "type": ["string", "null"] },
|
|
"rowKey": { "type": ["string", "null"] },
|
|
"code": { "type": "string", "minLength": 1 },
|
|
"message": { "type": "string", "minLength": 1 }
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"validation": {
|
|
"allOf": [
|
|
{ "$ref": "#/$defs/base" },
|
|
{
|
|
"type": "object",
|
|
"required": ["type", "errors"],
|
|
"properties": {
|
|
"type": { "const": "validation" },
|
|
"errors": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/validationError" } }
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"businessRule": {
|
|
"allOf": [
|
|
{ "$ref": "#/$defs/base" },
|
|
{
|
|
"type": "object",
|
|
"required": ["type", "code"],
|
|
"properties": {
|
|
"type": { "const": "business-rule" },
|
|
"code": { "type": "string", "minLength": 1 },
|
|
"actions": { "type": "array", "items": { "$ref": "#/$defs/action" } }
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"conflict": {
|
|
"allOf": [
|
|
{ "$ref": "#/$defs/base" },
|
|
{
|
|
"type": "object",
|
|
"required": ["type", "code"],
|
|
"properties": {
|
|
"type": { "const": "conflict" },
|
|
"code": { "type": "string", "minLength": 1 },
|
|
"currentVersion": { "type": ["integer", "null"], "minimum": 1 }
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"permission": {
|
|
"allOf": [
|
|
{ "$ref": "#/$defs/base" },
|
|
{
|
|
"type": "object",
|
|
"required": ["type", "code"],
|
|
"properties": {
|
|
"type": { "const": "permission" },
|
|
"code": { "type": "string", "minLength": 1 }
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"notFound": {
|
|
"allOf": [
|
|
{ "$ref": "#/$defs/base" },
|
|
{
|
|
"type": "object",
|
|
"required": ["type", "code"],
|
|
"properties": {
|
|
"type": { "const": "not-found" },
|
|
"code": { "type": "string", "minLength": 1 }
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"integration": {
|
|
"allOf": [
|
|
{ "$ref": "#/$defs/base" },
|
|
{
|
|
"type": "object",
|
|
"required": ["type", "code", "retryable"],
|
|
"properties": {
|
|
"type": { "const": "integration" },
|
|
"code": { "type": "string", "minLength": 1 },
|
|
"retryable": { "type": "boolean" }
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"system": {
|
|
"allOf": [
|
|
{ "$ref": "#/$defs/base" },
|
|
{
|
|
"type": "object",
|
|
"required": ["type", "code", "correlationId"],
|
|
"properties": {
|
|
"type": { "const": "system" },
|
|
"code": { "type": "string", "minLength": 1 },
|
|
"correlationId": { "type": "string", "minLength": 1 },
|
|
"retryable": { "type": "boolean" }
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|