Newer
Older
pivot-app / README.MD

Доступ к Swagger UI

После запуска приложения:

Swagger UI: http://localhost:8080/swagger-ui.html

OpenAPI JSON: http://localhost:8080/api-docs

OpenAPI YAML: http://localhost:8080/api-docs.yaml

img.png

Примеры вызовов (cURL)

METADATA

Получить все объекты организации

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

Получить поля объекта Contact

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

DATA

Получить все записи Contact

bash
curl -X GET "http://localhost:8080/api/data/Contact?orgId=1"

BENCHMARK

Запустить INSERT бенчмарк (10000 Contact записей)

bash
curl -X POST "http://localhost:8080/api/benchmark/insert?orgId=1&object=Contact&count=10000"

Запустить SELECT бенчмарк

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"

UML/ERD схема базы данных Pivot Multitenancy

UML_ERD_схема_таблиц_Pivot_Multitenancy_модели.png

Схема показывает структуру таблиц, сгруппированных по назначению: 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 |