mirror of
https://github.com/n8n-io/n8n.git
synced 2024-11-10 22:54:05 -08:00
102 lines
2 KiB
TypeScript
102 lines
2 KiB
TypeScript
|
import type { IExecuteFunctions, IDataObject } from 'n8n-workflow';
|
||
|
|
||
|
import type { QueryScope } from '../helpers/interfaces';
|
||
|
import { constructFilter } from '../helpers/utils';
|
||
|
import { theHiveApiRequest } from './requestApi';
|
||
|
|
||
|
export async function theHiveApiQuery(
|
||
|
this: IExecuteFunctions,
|
||
|
scope: QueryScope,
|
||
|
filters?: IDataObject[],
|
||
|
sortFields?: IDataObject[],
|
||
|
limit?: number,
|
||
|
returnCount = false,
|
||
|
extraData?: string[],
|
||
|
) {
|
||
|
const query: IDataObject[] = [];
|
||
|
|
||
|
if (scope.id) {
|
||
|
query.push({
|
||
|
_name: scope.query,
|
||
|
idOrName: scope.id,
|
||
|
});
|
||
|
} else {
|
||
|
query.push({
|
||
|
_name: scope.query,
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if (scope.restrictTo) {
|
||
|
query.push({
|
||
|
_name: scope.restrictTo,
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if (filters && Array.isArray(filters) && filters.length) {
|
||
|
const filter = {
|
||
|
_name: 'filter',
|
||
|
_and: filters.filter((f) => f.field).map(constructFilter),
|
||
|
};
|
||
|
|
||
|
query.push(filter);
|
||
|
}
|
||
|
|
||
|
if (sortFields?.length && !returnCount) {
|
||
|
const sort = {
|
||
|
_name: 'sort',
|
||
|
_fields: sortFields.map((field) => {
|
||
|
return {
|
||
|
[`${field.field as string}`]: field.direction as string,
|
||
|
};
|
||
|
}),
|
||
|
};
|
||
|
|
||
|
query.push(sort);
|
||
|
}
|
||
|
|
||
|
let responseData: IDataObject[] = [];
|
||
|
|
||
|
if (returnCount) {
|
||
|
query.push({
|
||
|
_name: 'count',
|
||
|
});
|
||
|
|
||
|
const count = await theHiveApiRequest.call(this, 'POST', '/v1/query', { query });
|
||
|
|
||
|
responseData.push({ count });
|
||
|
} else if (limit) {
|
||
|
const pagination: IDataObject = {
|
||
|
_name: 'page',
|
||
|
from: 0,
|
||
|
to: limit,
|
||
|
extraData,
|
||
|
};
|
||
|
|
||
|
query.push(pagination);
|
||
|
responseData = await theHiveApiRequest.call(this, 'POST', '/v1/query', { query });
|
||
|
} else {
|
||
|
let to = 500;
|
||
|
let from = 0;
|
||
|
let response: IDataObject[] = [];
|
||
|
|
||
|
do {
|
||
|
const pagination: IDataObject = {
|
||
|
_name: 'page',
|
||
|
from,
|
||
|
to,
|
||
|
extraData,
|
||
|
};
|
||
|
|
||
|
response = await theHiveApiRequest.call(this, 'POST', '/v1/query', {
|
||
|
query: [...query, pagination],
|
||
|
});
|
||
|
|
||
|
responseData = responseData.concat(response || []);
|
||
|
from = to;
|
||
|
to += 500;
|
||
|
} while (response?.length);
|
||
|
}
|
||
|
|
||
|
return responseData;
|
||
|
}
|