Класс/коллекция (class)
Описание
Метаданные пользовательского класса.
Позволяет определить структуру для данных и правила ее обслуживания. Для каждого класса в REST-API появляется endpoint /rest/v1/model/CLASSPATH и возможность производить операции через WebSocket-API с capability=rest.
Может размещать данные в памяти, в распределенной объектной БД, в реляционной БД postgres (с партициями для исторических данных и без), в брокере Kafka, а также сохранять данные в аналитической колоночной БД Clickhouse.
Каждая коллекция публикует изменения, доставляемые подписчикам (подписки через websocket-API, авторизуемые на основании ролей).
Поддерживает несколько режимов работы: скоростное чтение, скоростное уведомление, асинхронный режим, синхронный режим.
Каждый из них обеспечивает внутреннюю целостность, не допуская изменения исходной последовательсности запросов при их обработке и рассылке уведомлений. Исключение составляет обработка различных сущностей в режимах, использующих параллельную обработку. +
Поддерживает наследование свойств.
Поддерживает ограничение доступа к данным для различных пользователей к методам и коллекциям по ролям (role.routes и iam_all.json), а также на основе сложных фильтров к конкретным данным на чтение, изменение, видимость полей и возможность их изменения (class.opts.security_filter_read, class.opts.security_filter_write, class.properties..security_filter_read, class.properties..security_filter_write).
Классы в распределенной объектной БД доступна возможность автоудаления по времени жизни с автоматическим продлением при сохранении; при этом ограничено максимально возможное количество записей в коллекции в связи с тем, что для применения фильтра к выборке производится поэлементный перебор всей коллекции.
Поля
{
"id": uuid,
"classname": str,
"name": str,
"description": str,
"parent_id": uuid,
"properties": [
{
"name": str,
"data_type": str,
"multi": bool,
"required": bool,
"default": any,
"idclass": uuid,
"items": array<str>,
"security_filter_read": array,
"security_filter_write": array
}
]: array<obj>,
"storage_mode": str,
"integrity_mode": str,
"cache_mode": str,
"opts": {
"title": str,
"comment": str,
"dms_group": object,
"check_required_fill_defaults": bool,
"max_limit": int,
"max_mask": array<str>,
"max_size": int,
"store_changehistory_mode": str,
"caption_property": str,
"expires_mode": str,
"expires_ttl_property": str,
"expires_ts_property": str,
"storage_instance": str,
"filestorage_instance": str,
"lookup_properties": array<str>,
"partition_property": str,
"partition_interval": str,
"partition_count": int,
"replication_factor": str,
"notify_transactions": bool,
"cache_sec": int,
"cache_limit": int,
"security_filter_read": array,
"security_filter_write": array
},
"ext": {
"ct": date,
"lwt": date
}
}
Спецификация | Описание |
---|---|
Поле: |
Идентификатор. Может быть задан при создании, иначе генерируется системой. |
Поле: |
Имя коллекции класса. Может содержать путь через '/'. Как правило в множественном значении. |
Поле: |
Отображаемое название класса |
Поле: |
Описание класса |
Поле: |
Идентификатор класса-предка. Наследует все его поля. |
Поле: |
Список свойств экземпляров класса.
|
Поле: |
Режим хранения:
|
Поле: |
Режим обслуживания: |
Поле: |
Режим кэширования в памяти. Имеет смысл только для типов category, history, transactionlog.
|
Поле: |
|
Поле: |
Произвольный заголовок |
Поле: |
Произвольный комментарий |
Поле: |
Site → role group index. Default - unique (less number) dms group for domain |
Поле: |
if entities should be checked for required and filled by defaults by the server. Model can economy |
Поле: |
How many items could be requested on read in max. |
Поле: |
Max mask of properties, that could be returned on collection read. |
Поле: |
Max size of storage (only for 'ram' and 'runtime'). |
Поле: |
Режим сохранения лога транзакций по всем изменениям сущностей класса.
В качестве лога используется класс модели данных 'platform/log/HistoryChanges'. Класс истории изменений по умолчанию создается из fixture-дескриптора с типом storage_mode='history' и размещением в storage_instance='auto'. При необходимости класс можно скорректировать, разместив в другое хранилище или по другому адресу. Главное - значения 'ext.fixture_version', 'opts.store_changehistory_mode', структуру полей, а также оставить тип 'history' или 'transactionlog'. |
Поле: |
Имя свойства с именем, которое следует отображать для сущности, в частности в истории изменений. |
Поле: |
when to auto set (reset) timestamp in ts property
|
Поле: |
Property of int to setup auto ttl (time-to-live) in seconds. |
Поле: |
Property of long to setup ts in milliseconds from 1970 (unix time * 1000). |
Поле: |
InstanceKey or #{Site ⇒ InstanceKey}. При отсутствии настроенного хранилища с кодом 'auto' класс автоматически привязывается к модельной базе ('era_model_DOMAIN'), созданной через основное подключение к БД Postgres домена). |
Поле: |
InstanceKey or #{Site ⇒ InstanceKey} (for attachments), when InstanceKey defines storage of type s3, fs, nfs, fsync.
При отсутствии настроенного хранилища с кодом 'auto' класс автоматически привязывается к размещению на системных файловых серверах. |
Поле: |
List of property names for lookup operation (indexes, separate fields etc). |
Поле: |
Property of type=datetime to make partitioned history storage. |
Поле: |
Size of partition in partitioned history storage.
|
Поле: |
How many partitions does topic have (1-10). |
Поле: |
How many replicas does topic have (1-4). |
Поле: |
If should forcely notify. Note, than storage_mode = |
Поле: |
How long temporarily cache holds modified items. |
Поле: |
How many modified items are holded in temporarily cache. |
Поле: |
Фильтр для пользовательских запросов на выборку данных из коллекции, чтение конкретного элемента коллекции, а также поиск по ключевым полям. Формат значения соответствует формату параметра 'filter' при выборке из коллекции (подробнее). Не применяется к запросам пользователей, имеющих роль 'admin'. Применяется в HTTP REST API, Websocket REST API, подписках на изменениях и уведомлениях. |
Поле: |
Фильтр для пользовательских запросов на создание, замену, изменение, удаление элемента коллекции. Формат значения соответствует формату параметра 'filter' при выборке из коллекции (подробнее). Не применяется к запросам на чтение. Применяется в HTTP REST API, Websocket REST API. |
Поле: |
Позволяет расширять состав произвольными ключами и значениями |
Поле: |
Время создания объекта |
Поле: |
Время последней модификации объекта |
Специальные функции фильтра
Функция | Описание и примеры |
---|---|
|
Предоставляет доступ к данным авторизованного пользователя, от имени которого осуществляется запрос на чтение. Примеры:
Позволяет обратиться к глубоким смежным настройкам пользователя - списку всех его ролей, в том числе построенных на основе вхождения в группы, в группы через группы и т.д.
Позволяет обратиться к списку групп пользователя на всю глубину:
Позволяет обратиться к списку подчиненных. В самом простом случае полного взаимного доступа все подчинены всем. Это отражается единственным элементом "all" вместо нескльких идентификаторов в списке.
Позволяет выбрать агрегированное значение из совокупности всех сущностей: пользователя, всех его ролей и групп. Используется функция второго порядка "DEEP". Примеры:
Путь к полю может быть произвольной глубины - через запятую список вложенных ключей. Если указанное поле или путь не найдены, то подставляется значение В зависимости от типа обнаруженного значения производится преобразование к конечному результату: числа остаются числами, строки остаются строками, булевы значения остаются булевыми значениями, массивы заменяются на Комплексный пример выражения: ["or", ["in", "master", ["$USER","ROLES"] ], ["and", ["in", ["property","status"], ["list","in_work","in_review"] ], ["==", ["property","responsibleUserId"], ["$USER", "id"] ] ] ] |