| .assets | 1 month ago | ||
| gradle/ wrapper | 1 month ago | ||
| src/ main | 1 month ago | ||
| .gitignore | 1 month ago | ||
| README.MD | 1 month ago | ||
| build.gradle | 1 month ago | ||
| gradle.properties | 1 month ago | ||
| gradlew | 1 month ago | ||
| gradlew.bat | 1 month ago | ||
| settings.gradle | 1 month ago | ||
После запуска приложения:
Swagger UI: http://localhost:8080/swagger-ui.html OpenAPI JSON: http://localhost:8080/api-docs OpenAPI YAML: http://localhost:8080/api-docs.yaml

bash curl -X GET "http://localhost:8080/api/metadata/objects?orgId=1"
[
{
"objId": 1,
"orgId": 1,
"objName": "Account",
"label": "Account",
"pluralLabel": "Accounts",
"description": null,
"isCustom": false,
"isActive": true,
"createdAt": "2025-12-17T21:33:04.584515Z",
"modifiedAt": "2025-12-17T21:33:04.584515Z"
},
{
"objId": 2,
"orgId": 1,
"objName": "Contact",
"label": "Contact",
"pluralLabel": "Contacts",
"description": null,
"isCustom": false,
"isActive": true,
"createdAt": "2025-12-17T21:33:04.584515Z",
"modifiedAt": "2025-12-17T21:33:04.584515Z"
}
]
curl -X GET http://localhost:8080/api/metadata/objects/Contact?orgId=1
{
"objId": 2,
"orgId": 1,
"objName": "Contact",
"label": "Contact",
"pluralLabel": "Contacts",
"description": null,
"isCustom": false,
"isActive": true,
"createdAt": "2025-12-17T21:33:04.584515Z",
"modifiedAt": "2025-12-17T21:33:04.584515Z"
}
bash curl -X GET "http://localhost:8080/api/metadata/objects/Contact/fields?orgId=1"
[
{
"fieldId": 11,
"orgId": 1,
"objId": 2,
"fieldName": "FirstName",
"label": "First Name",
"dataType": "text",
"fieldNum": 0,
"isIndexed": false,
"isUnique": false,
"isRequired": false,
"isExternalId": false,
"relationshipName": null,
"referenceObjId": null,
"relationshipType": null,
"deleteConstraint": null,
"formulaExpression": null,
"formulaReturnType": null,
"autonumberFormat": null,
"autonumberStart": 1,
"validationRule": null,
"validationMessage": null,
"length": 40,
"precision": null,
"scale": null,
"createdAt": "2025-12-17T21:33:04.584515Z",
"createdBy": null,
"modifiedAt": "2025-12-17T21:33:04.584515Z",
"modifiedBy": null,
"mtObject": null
},
...,
{
"fieldId": 25,
"orgId": 1,
"objId": 2,
"fieldName": "HasOptedOutOfEmail",
"label": "Email Opt Out",
"dataType": "boolean",
"fieldNum": 14,
"isIndexed": false,
"isUnique": false,
"isRequired": false,
"isExternalId": false,
"relationshipName": null,
"referenceObjId": null,
"relationshipType": null,
"deleteConstraint": null,
"formulaExpression": null,
"formulaReturnType": null,
"autonumberFormat": null,
"autonumberStart": 1,
"validationRule": null,
"validationMessage": null,
"length": null,
"precision": null,
"scale": null,
"createdAt": "2025-12-17T21:33:04.584515Z",
"createdBy": null,
"modifiedAt": "2025-12-17T21:33:04.584515Z",
"modifiedBy": null,
"mtObject": null
}
]
bash curl -X GET "http://localhost:8080/api/data/Contact?orgId=1"
bash curl -X POST "http://localhost:8080/api/benchmark/insert?orgId=1&object=Contact&count=10000"
bash curl -X POST "http://localhost:8080/api/benchmark/select?orgId=1&object=Contact&iterations=10"
bash curl -X GET "http://localhost:8080/api/benchmark/count?orgId=1&object=Contact"

Схема показывает структуру таблиц, сгруппированных по назначению: Metadata (Синие)
organizations — тенанты системы mt_objects — метаданные объектов (виртуальные таблицы) mt_fields — метаданные полей с маппингом на flex-слоты
Data Storage (Зелёные)
mt_data — основное хранилище с 50 flex-колонками (value0-value49) mt_clobs — выносное хранение больших текстов (>4000 символов)
Pivot Indexes (Оранжевые)
mt_indexes — типизированные индексы (string/num/date) для поиска mt_unique_fields — уникальные индексы с enforce constraint mt_fallback_index — индекс по Name для быстрого поиска mt_name_denorm — денормализация имён для гиперссылок
Relationships (Фиолетовые)
mt_relationships — связи parent-child между записями
Audit (Красные)
mt_field_history — история изменений полей
Ключевые связи | Связь | Кардинальность | | -------------------------- | -------------- | | organizations → mt_objects | 1 : N | | organizations → mt_data | 1 : N | | mt_objects → mt_fields | 1 : N | | mt_objects → mt_data | 1 : N | | mt_data → mt_indexes | 1 : N | | mt_data → mt_clobs | 1 : N | | mt_data → mt_field_history | 1 : N | | mt_data ↔ mt_relationships | N : M |