Библиотека для запросов к хранилищу сущностей. Поддержаны выборка, создание, изменение, удаление сущностей, работа с транзакциями.
io.extremum:ground-client:<version>
// и вспомогательные библиотеки
io.extremum:extremum-shared-models:<version>
de.cronn:reflection-util:2.14.0
Построители запросов graphQL
Название | Описание |
---|---|
GraphQlQueryBuilder | Для выборок сущностей |
GraphQlGetByIdBuilder | Для получения сущности по ID |
GraphQlUpdateBuilder | Для создания сущности и редактирования по ID |
GraphQlRemoveBuilder | Для удаления сущности по ID |
GraphQlAddToSublistBuilder | Для добавления сущности в дочерний список сущности с ID |
GraphQlRemoveFromSublistBuilder | Для удаления сущности из дочернего списка сущности с ID |
Builders предоставляет методы создания построителей
Для всех построителей запросов доступны методы работы с транзакциями:
Название | Описание |
---|---|
beginTx() | Начать транзакцию |
inTx(id) | Выполнить в определенной транзакции |
commit(id) | Выполнить commit определенной транзакции |
GroundApiClient - клиент для работы с хранилищем данных. Поддерживает методы с построителями в параметрах для возможности использования их функционала и упрощенные методы с минимальными необходимыми параметрами.
ApiClientHolder
- сервис для настройки, создания клиента
Response
- ответ, содержащий запрашиваемое значение, статус ответа, ID транзакции при наличии
Необходимо задать следующие настройки в application.properties
apiBaseUrl=
xAppId=
groundUri=
Где
apiBaseUrl
- основной url приложения. Например, “https://api.aj84.y.extremum.io”
xAppId
- id приложения
groundUri
- uri ground сервиса. Например, “/v3”
:::info
При использовании библиотеки в serverless-функции следующие параметры будут автоматически подставлены из переменных окружения:
apiBaseUrl
xAppId
:::
Все модели должны быть наследованы от
io.extremum.sharedmodels.basic.BasicModel<ID extends Serializable>
Сигнатура | Описние | Пример использования |
---|---|---|
query(builder: GraphQlQueryBuilder): Response<List |
Запрос по сущностям определенного типа | val builder = query() .setOutputFields( field(Zone::getDescription), field(Zone::getUuid) ) client.query<Zone>(builder) |
query( paging: PagingAndSortingRequest = PagingAndSortingRequest(), filter: String? = null, inTxId: TxId? = null ): List |
Упрощенный запрос по сущностям определенного типа | client.query<Compensation>(query(filter = "object.function.eq(\"$searchingValue\")")) |
update(builder: GraphQlUpdateBuilder): Response |
Создание/изменение сущности. Происходит создание, если в GraphQlUpdateBuilder не указан id | |
create(value: T, inTxId: TxId? = null): T | Упрощенное создание сущности | client.create(Compensation().apply { function = searchingValue }) |
createEmpty(inTxId: TxId? = null): T | Создание пустой сущности | client.createEmpty<Zone>() |
getById(builder: GraphQlGetByIdBuilder): Response |
Получение сущности по id | val builder = getById(id) .setOutputFields( field(Zone::getDescription), field(Zone::getUuid) ) client.getById<Zone>(builder) |
getById(id: Any, inTxId: TxId? = null): T? | Упрощенное получение сущности по id со всеми полями (кроме полей со списками) | client.getById<Account>(id) |
remove(builder: GraphQlRemoveBuilder): Response |
Удаление сущности. Возвращает true в ответе при успешном удалении, false - сущность с заданным id не найдена для удаления. | val builder = remove(id) client.remove(builder) |
remove(id: Any, inTxId: TxId? = null): Boolean | Упрощенное удаление сущности c id | client.remove(id) |
updateSublist(builder: GraphQlUpdateSublistBuilder): Response<List<R>> | Изменение дочернего списка (передается GraphQlAddToSublistBuilder или GraphQlRemoveFromSublistBuilder) | val builder = addToSublist( id = createdAccount.uuid, sublistFieldGetter = Account::getChanges, entitiesToAdd = entitiesToAdd ) сlient.updateSublist<Account, Change>(builder) |
Кроме методов для работы с транзакциями в построителях запроса можно выполнять отдельные запросы только для работы с транзакциями:
Сигнатура | Описние | Пример использования |
---|---|---|
beginTx(): Response |
Начать транзакцию. Возвращает true в ответе при успешной операции | client.beginTx() |
commit(txId: TxId): Response |
Выполнить в определенной транзакции | client.commit(txId) |
rollback(txId: TxId): Response |
Выполнить commit определенной транзакции | client.rollback(txId) |
Или выполнить блок заданных запросов в транзакции:
Сигнатура | Описние | Пример использования |
---|---|---|
tx(block: suspend (txId: TxId) -> T): T | Выполнение блока действий block в транзакции. До блока начинается транзакция, после - выполняется commit/rollback. | val createdZone = client.tx { txId -> // выполнение необходимых действий внутри транзакции txId val zone = client.createEmpty<Zone>(txId) client.createEmpty<Compensation>(txId) // возвращаемое значение из блока } |
tx(block: suspend (txId: TxId) -> T, onError: suspend () -> Unit = {}): T | Выполнение блока действий block в транзакции с указанием блока действий onError, выполняемом при ошибке в блоке/работе с транзакциями. | client.tx( block = { txId → // действия внутри транзакции }, onError = { // действия, выполняемые при ошибке в основном блоке } ) |