ecos-data - это библиотека, которая позволяет добавлять новые Records DAO, записи которых будут храниться в БД. Библиотека на основе атрибутов в :ref:`ECOS типе<data_types_main>` автоматически создает таблицы и предоставляет базовые операции над записями:
- Создание новых записей;
- Получение атрибутов у записей по их ID;
- Поиск записей с использованием :ref:`языка предикатов<ecos-predicate_main>`;
Поддерживаемые БД:
Тип | Версия |
PostgreSQL | 9.4+ |
В ECOS по умолчанию для типов предусмотрено хранение в микросервисе ecos-model. Для этого достаточно на форме типа выбрать тип источника данных "ECOS Model". Микросервис ecos-model для всех подобных типов автоматически создаст RecordsDAO с идентификатором (sourceId), который формируется по следующим правилам:
- Берем id типа и меняем camelCase на kebab-case;
- Переводим id в нижний регистр;
- Заменяем все специальные символы на
-
; - Убираем все задублировавшиеся символы
-
заменяя их на одинарные (т.е.--
заменяем на-
); - Если длина полученного id получилась больше 42х символов, то берем первые 34 символа из id, добавляем
-
плюс контрольная сумма оставшихся символов в идентификаторе; - Убираем символ
-
в начале идентификатора и в конце если он там есть
Примеры:
camelCaseTest -> camel-case-test kebab-case-id -> kebab-case-id a----b- -> a-b $$$-abc-$$$ -> abc
При создании типа с sourceId, который конфликтует с существующими будет показана ошибка. Чтобы проверить список зарегистрированных sourceId можно выполнить следующий скрипт в консоли браузера:
await Citeck.Records.query({sourceId: 'emodel/src', query: {}, language:'predicate'}, '?localId')
Для создания нового RecordsDAO в своем микросервисе нужно добавить следующую Spring конфигурацию
Java:
import kotlin.Unit; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import ru.citeck.ecos.data.sql.domain.DbDomainConfig; import ru.citeck.ecos.data.sql.domain.DbDomainFactory; import ru.citeck.ecos.data.sql.dto.DbTableRef; import ru.citeck.ecos.data.sql.records.DbRecordsDaoConfig; import ru.citeck.ecos.data.sql.service.DbDataServiceConfig; import ru.citeck.ecos.model.lib.type.service.utils.TypeUtils; import ru.citeck.ecos.records2.RecordRef; import ru.citeck.ecos.records3.record.dao.RecordsDao; @Configuration public class CustomRecordsDaoConfig { private DbDomainFactory dbDomainFactory; @Bean public RecordsDao customRecordsDao() { RecordRef typeRef = TypeUtils.getTypeRef("ecos-type-id"); return dbDomainFactory.create( DbDomainConfig.create() .withRecordsDao( DbRecordsDaoConfig.create(b -> { b.withId("records-dao-id"); b.withTypeRef(typeRef); return Unit.INSTANCE; }) ) .withDataService( DbDataServiceConfig.create(b -> { b.withAuthEnabled(false); b.withTableRef(new DbTableRef("schema_name", "table_name")); b.withStoreTableMeta(true); return Unit.INSTANCE; }) ) .build() ).build(); } @Autowired public void setDbDomainFactory(DbDomainFactory dbDomainFactory) { this.dbDomainFactory = dbDomainFactory; } }
Kotlin:
import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import ru.citeck.ecos.data.sql.domain.DbDomainConfig import ru.citeck.ecos.data.sql.domain.DbDomainFactory import ru.citeck.ecos.data.sql.dto.DbTableRef import ru.citeck.ecos.data.sql.records.DbRecordsDaoConfig import ru.citeck.ecos.data.sql.service.DbDataServiceConfig import ru.citeck.ecos.model.lib.type.service.utils.TypeUtils import ru.citeck.ecos.records3.record.dao.RecordsDao @Configuration class CustomRecordsDaoConfig( private val dbDomainFactory: DbDomainFactory ) { @Bean fun customRecordsDao(): RecordsDao { val typeRef = TypeUtils.getTypeRef("ecos-type-id") val recordsDao = dbDomainFactory.create( DbDomainConfig.create() .withRecordsDao( DbRecordsDaoConfig.create { withId("records-dao-id") withTypeRef(typeRef) } ) .withDataService( DbDataServiceConfig.create { withAuthEnabled(false) withTableRef(DbTableRef("schema_name", "table_name")) withStoreTableMeta(true) } ) .build() ).build() return recordsDao } }