async function getEntityIdsByFields(entityRef, fields) {
let queryStr = `SELECT id FROM ${renderFunQLName(entityRef.schema)}.${renderFunQLName(entityRef.name)} WHERE NOT is_deleted `;
for (const field in fields) {
if (fields[field] === null || fields[field] === undefined)
queryStr += `AND ${renderFunQLName(field)} IS NULL `
else
queryStr += `AND ${renderFunQLName(field)} = ${renderFunQLValue(fields[field])} `;
}
const exprResult = await FunDB.getUserView({
type: "anonymous",
query: queryStr
}
);
const entityIds = [];
for (const entity of exprResult.result.rows) {
entityIds.push(entity.values[0].value);
}
return entityIds;
}
entityRef
- объект {schema: "schema_name", name: "string"}
. Содержит информацию о сущности, идентификаторы которой вернет функцияfields
- объект Record<fieldName, fieldValue>
Список полей и их значений, по которым будут искаться записи.Массив entityIds
содержит идентификаторы (id) записей
var accountNumber = '1234567890123456789012';
var accountIds = await getEntityIdsByFields({
schema:"fin",
name:"accounts"
},
{
bank_account_number: accountNumber,
bank_name: 'ПАО Сбербанк'
}
);
async function getRecordsByFields(entityRef, columns, fields) {
var queryStr = 'SELECT ' + columns.toString() + ' FROM '
+ entityRef.schema + '.' + entityRef.name
+ ' WHERE NOT is_deleted ';
for (var field in fields) {
queryStr += 'AND ' + field + ' = ' + fields[field] + ' ';
};
FunDB.writeEvent(queryStr);
var exprResult = await FunDB.getUserView({
type: "anonymous",
query: queryStr
}, null);
var entities = [];
for (var row of exprResult.result.rows) {
var entity = {};
for (let i = 0; i < row.values.length; i++) {
var fieldName = exprResult.info.columns[i].name;
var fieldValue = row.values[i].value;
entity[fieldName] = row.values[i].value;
}
entities.push(entity);
}
return entities;
}
entityRef
- объект {schema: "schema_name", name: "string"}
. Содержит информацию о сущности, идентификаторы которой вернет функцияcolumns
- массив колонок, которые значения которых нужно получитьfields
- объект Record<fieldName, fieldValue>
Список полей и их значений, по которым будут искаться записи.Если
fieldValue
- строка, нужно добавить одинарные кавычки (`) в начале и в концеfieldValue
(пример ниже). Это временно, обещаю ✋🏻
Массив entities
содержит объекты { fieldName: fieldValue }
var accountNumber = '1234567890123456789012';
var accountIds = await getRecordsByFields({
schema:"fin",
name:"accounts"
},
['id', 'name', 'bank_account_number'],
{
bank_account_number: '\'' + accountNumber + '\''
}
);
async function getOrInsertEntityWithFields(entityRef, fields) {
const entityIds = await getEntityIdsByFields(entityRef, fields);
if (!entityIds.length) {
const entityId = await FunDB.insertEntity(entityRef, fields);
entityIds.push(entityId);
}
return entityIds[0];
}