Files
KArtSell.Aegis/docs/Design/kbx-foundation-v36/contracts/problems/kbx.problem.schema.json
T

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" }
}
}
]
}
}
}