@tuanltntu/n8n-nodes-bitrix24
Version:
Comprehensive n8n community node for Bitrix24 API integration with CRM, Tasks, Chat, Telephony, and more
282 lines • 10.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CatalogResourceHandler = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const ResourceHandlerBase_1 = require("./ResourceHandlerBase");
/**
* Handle Bitrix24 CRM Catalog operations
*/
class CatalogResourceHandler extends ResourceHandlerBase_1.ResourceHandlerBase {
constructor(executeFunctions, returnData, options = {}) {
super(executeFunctions, returnData, options);
this.resourceEndpoints = {
add: "crm.catalog.add",
update: "crm.catalog.update",
delete: "crm.catalog.delete",
get: "crm.catalog.get",
list: "crm.catalog.list",
fields: "crm.catalog.fields",
};
}
/**
* Process catalog operations
*/
async process() {
for (let i = 0; i < this.items.length; i++) {
try {
const operation = this.getNodeParameter("operation", i);
switch (operation) {
case "create":
await this.handleCreate(i);
break;
case "update":
await this.handleUpdate(i);
break;
case "delete":
await this.handleDelete(i);
break;
case "get":
await this.handleGet(i);
break;
case "getAll":
await this.handleGetAll(i);
break;
case "getFields":
await this.handleGetFields(i);
break;
default:
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), `Unsupported operation "${operation}" for Catalog resource`, { itemIndex: i });
}
}
catch (error) {
if (this.executeFunctions.continueOnFail()) {
this.returnData.push({ json: { error: error.message } });
continue;
}
throw error;
}
}
return this.returnData;
}
/**
* Get endpoint for the specified operation
*/
getEndpoint(operation) {
const endpointMap = {
create: "add",
update: "update",
delete: "delete",
get: "get",
getAll: "list",
getFields: "fields",
};
const endpoint = this.resourceEndpoints[endpointMap[operation]];
if (!endpoint) {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), `Unsupported operation "${operation}" for Catalog resource`);
}
return endpoint;
}
/**
* Handle getting catalog fields
*/
async handleGetFields(itemIndex) {
const endpoint = this.getEndpoint("getFields");
const responseData = await this.makeApiCall(endpoint, {}, {}, itemIndex);
this.returnData.push({
json: responseData,
});
}
/**
* Handle creating a catalog
*/
async handleCreate(itemIndex) {
// Get required fields
const name = this.getNodeParameter("name", itemIndex);
const isDefault = this.getNodeParameter("isDefault", itemIndex);
const isSku = this.getNodeParameter("isSku", itemIndex);
// Get additional fields
const additionalFields = this.getNodeParameter("additionalFields", itemIndex, {});
// Prepare fields
const fields = {
NAME: name,
IS_DEFAULT: isDefault ? "Y" : "N",
IS_SKU: isSku ? "Y" : "N",
};
// Add additional fields if provided
if (additionalFields.description) {
fields.DESCRIPTION = additionalFields.description;
}
if (additionalFields.sort) {
fields.SORT = additionalFields.sort;
}
if (additionalFields.ownerId) {
fields.OWNER_ID = additionalFields.ownerId;
}
if (additionalFields.xmlId) {
fields.XML_ID = additionalFields.xmlId;
}
// Make API call
const endpoint = this.getEndpoint("create");
const responseData = await this.makeApiCall(endpoint, { fields }, {}, itemIndex);
this.returnData.push({
json: responseData,
});
}
/**
* Handle updating a catalog
*/
async handleUpdate(itemIndex) {
const catalogId = this.getNodeParameter("catalogId", itemIndex);
// Get optional required fields
const name = this.getNodeParameter("name", itemIndex, "");
const isDefault = this.getNodeParameter("isDefault", itemIndex, null);
const isSku = this.getNodeParameter("isSku", itemIndex, null);
// Get additional fields
const additionalFields = this.getNodeParameter("additionalFields", itemIndex, {});
// Prepare fields
const fields = {};
// Add fields only if they have values
if (name) {
fields.NAME = name;
}
if (isDefault !== null) {
fields.IS_DEFAULT = isDefault ? "Y" : "N";
}
if (isSku !== null) {
fields.IS_SKU = isSku ? "Y" : "N";
}
// Add additional fields if provided
if (additionalFields.description) {
fields.DESCRIPTION = additionalFields.description;
}
if (additionalFields.sort) {
fields.SORT = additionalFields.sort;
}
if (additionalFields.ownerId) {
fields.OWNER_ID = additionalFields.ownerId;
}
if (additionalFields.xmlId) {
fields.XML_ID = additionalFields.xmlId;
}
// Check if there are any fields to update
if (Object.keys(fields).length === 0) {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Please provide at least one field to update", { itemIndex });
}
// Make API call
const endpoint = this.getEndpoint("update");
const responseData = await this.makeApiCall(endpoint, {
id: catalogId,
fields,
}, {}, itemIndex);
this.returnData.push({
json: responseData,
});
}
/**
* Handle deleting a catalog
*/
async handleDelete(itemIndex) {
const catalogId = this.getNodeParameter("catalogId", itemIndex);
const endpoint = this.getEndpoint("delete");
const responseData = await this.makeApiCall(endpoint, { id: catalogId }, {}, itemIndex);
this.returnData.push({
json: responseData,
});
}
/**
* Handle getting a catalog
*/
async handleGet(itemIndex) {
const catalogId = this.getNodeParameter("catalogId", itemIndex);
// Get options
const options = this.getNodeParameter("options", itemIndex, {});
const params = { id: catalogId };
// Add select fields if specified
if (options.select) {
params.select = options.select;
}
// Add filter if provided
if (options.filter) {
try {
params.filter =
typeof options.filter === "string"
? JSON.parse(options.filter)
: options.filter;
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Filter must be a valid JSON", { itemIndex });
}
}
const endpoint = this.getEndpoint("get");
const responseData = await this.makeApiCall(endpoint, params, {}, itemIndex);
this.returnData.push({
json: responseData,
});
}
/**
* Handle getting all catalogs
*/
async handleGetAll(itemIndex) {
// Get parameters for filter and options
const jsonParameters = this.getNodeParameter("jsonParameters", itemIndex, false);
const options = this.getNodeParameter("options", itemIndex, {});
const additionalOptions = this.getNodeParameter("additionalOptions", itemIndex, {});
const params = {};
// Handle filter parameters
if (jsonParameters && options.filtersJson) {
const filtersJson = this.getNodeParameter("filtersJson", itemIndex, "");
if (filtersJson) {
try {
params.filter = JSON.parse(filtersJson);
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Filter must be a valid JSON", { itemIndex });
}
}
}
else if (options.filter) {
try {
params.filter =
typeof options.filter === "string"
? JSON.parse(options.filter)
: options.filter;
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Filter must be a valid JSON", { itemIndex });
}
}
// Add order if provided
if (options.order || additionalOptions.order) {
const orderValue = options.order || additionalOptions.order;
try {
params.order =
typeof orderValue === "string"
? JSON.parse(orderValue)
: orderValue;
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Order must be a valid JSON", { itemIndex });
}
}
// Add select fields if specified
if (options.select) {
params.select = options.select;
}
// Add pagination parameters
if (options.start || additionalOptions.start) {
params.start = options.start || additionalOptions.start;
}
// Check for returnAll parameter
const returnAll = this.getNodeParameter("returnAll", itemIndex, false);
if (returnAll) {
// No limits for returnAll
}
const endpoint = this.getEndpoint("getAll");
const responseData = await this.makeApiCall(endpoint, params, {}, itemIndex);
this.returnData.push({
json: responseData,
});
}
}
exports.CatalogResourceHandler = CatalogResourceHandler;
//# sourceMappingURL=CatalogResourceHandler.js.map