FeatureConfig описывает структуру дорожной сущности (RoadEntity): как называются её поля, как они группируются в карточке объекта, какие поля можно редактировать и фильтровать, а также как разворачивать поля-связи в читаемые значения. Это метаданные источника — по ним потребитель знает, что именно вернёт эндпоинт получения данных и как это отобразить.
Приходит в составе RoadEntityFeatureSourceConfigDto (поле FeatureConfig):
GET api/v1/public/Config/FeatureSources/RoadEntity/{dataSourceId}
Регистр имён. Технические имена (
EntityName,Nameполя,Type, поляRelated,Virtual, а также имена вRelatedFeatureConfigsиComplexPropertySchemas) отдаются в camelCase. Человекочитаемые псевдонимы (Alias) сохраняют исходный регистр.
Структура FeatureConfig
| Поле | Тип | Описание |
|---|---|---|
EntityName | string | Имя сущности. Используется как {entityName} в маршрутах получения данных (шаг 6 в public-api). |
PropertyGroups | FeatureConfigPropertyGroupShort[] | Группы полей карточки объекта — основная часть конфига (см. ниже). |
ShortcutNameProperties | string[]? | Имена полей, из которых складывается краткое (заголовочное) имя объекта. null, если не заданы. |
RelatedFeatureConfigs | RelatedFeatureConfig[]? | Связанные источники, по которым сущность можно дополнительно фильтровать. null, если их нет. |
ComplexPropertySchemas | FeatureComplexPropertyScheme[]? | Схемы составных (комплексных) полей. null, если их нет. |
HaveRelatedGeomEntities | bool | Есть ли у сущности связанные геометрические сущности. |
PropertyGroups — группировка полей карточки
PropertyGroups задаёт, как поля сущности разложены по секциям в карточке объекта. Каждая группа — это FeatureConfigPropertyGroupShort:
| Поле | Тип | Описание |
|---|---|---|
Order | int | Порядок группы в карточке. |
Alias | string? | Заголовок группы (человекочитаемый). |
Collapsed | bool | Должна ли группа быть свёрнута по умолчанию. |
Properties | FeaturePropertyShort[] | Поля, входящие в группу. |
FeaturePropertyShort — метаинформация об одном поле
Самая важная часть конфига. Описывает одно поле сущности.
| Поле | Тип | Описание |
|---|---|---|
Name | string | Техническое имя поля — под этим ключом значение приходит в ответе данных и указывается в Fields/фильтрах. |
Alias | string? | Человекочитаемое название поля (напр. «размер»). |
Type | string? | Тип поля (см. таблицу значений). |
Required | bool | Поле обязательно в базе (NOT NULL). |
Editable | bool | Поле разрешено изменять согласно настройке текущего слоя. |
Filterable | bool | По полю разрешена фильтрация согласно настройке текущего слоя. |
Related | FeatureConfigRelatedProperty? | Описание поля-связи (см. ниже). null для обычных полей. |
Id | Guid? | Идентификатор поля в конфигурации. |
Virtual | object? | Служебное поле, для публичного API не используется. |
Пример поля:
{
"name": "size",
"alias": "размер",
"type": "string",
"required": true,
"editable": true,
"filterable": true
}
Читается так: у поля техническое имя size, отображается как «размер», строкового типа, обязательно в базе, его можно редактировать и по нему можно фильтровать.
Возможные значения Type
Значения соответствуют классификатору типов полей (PropertyTypeClassifier) и отдаются в camelCase:
Type | Значение | Примечание |
|---|---|---|
string | Строка | Строковые поля; сюда же попадают идентификаторы (Guid хранится как строка). |
integer | Целое число | short/int/long и беззнаковые варианты. |
real | Число с плавающей точкой | float/double. |
bool | Логический тип | |
date | Дата (без времени) | |
time | Время (без даты) | |
dateTime | Дата и время (без часового пояса) | |
dateTimeTz | Дата и время с часовым поясом | |
geometry | Геометрия | Геометрическое поле сущности. |
jsonB | JSON | Хранится в БД как jsonb. |
guid | Идентификатор | Отдельный тип идентификатора (на практике Guid чаще отдаётся как string). |
null | Неопределённый тип | Служебное значение (тип поля не установлен). |
Related — поля-связи
Если поле является ссылкой на другую сущность, у него заполнено Related. Оно подсказывает, из какой сущности и какое поле нужно подставить вместо идентификатора.
| Поле | Тип | Описание |
|---|---|---|
Entity | string | Имя связанной сущности. |
Property | string | Поле связанной сущности, которое подставляется вместо идентификатора. |
Related | FeatureConfigRelatedProperty? | Вложенная связь (цепочка), если целевое поле само является ссылкой. |
Пример. У поля busStopId в Related указано Entity = "busStop", Property = "name". Значение поля в данных приходит как идентификатор остановки. Чтобы показать читаемое значение, нужно запросить все busStop, построить словарь id → name и подставить имя остановки вместо busStopId. Если Related.Related тоже заполнено — связь многоуровневая, и её разворачивают по цепочке.
Прочие поля
RelatedFeatureConfig({ RelatedEntityName, RelatedEntityAlias?, FilteredPropertyName }) — связанный источник, по которому можно дополнительно фильтровать сущность.FeatureComplexPropertyScheme({ RelationshipSourceName?, BasePropertyName?, RelatedPropertiesList[] }, где элемент списка —{ PropertyId, EntityName, DisplayPropertyName, RelationshipPropertyName }) — схема составного поля, собираемого из нескольких связанных полей.
Для базового сценария (отображение сущности на карте и в карточке, фильтрация) достаточно EntityName и PropertyGroups.