n8n-nodes-larkbase-v3
Version:
n8n node to connect with Larkbase API with UTF-8 support, date filtering, array filter values, text field processing, improved field type handling, pagination fixes, advanced data type conversion, proper date filtering with ExactDate format, updated node
66 lines • 2.55 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.upsertByField = void 0;
const batchSearch_1 = require("./batchSearch");
const batchCreate_1 = require("./batchCreate");
const batchUpdate_1 = require("./batchUpdate");
async function upsertByField(accessToken, appToken, tableId, keyField, records) {
const keyValues = records
.map((record) => record.fields[keyField])
.filter((value) => value !== undefined && value !== null);
const filter = {
conditions: [
{
field_name: keyField,
operator: 'isOneOf',
value: keyValues,
},
],
conjunction: 'and',
};
const existingRecords = await batchSearch_1.batchSearchAll.call(this, accessToken, appToken, tableId, { filter });
const existingRecordsMap = new Map();
existingRecords.forEach((record) => {
const keyValue = record.fields[keyField];
if (keyValue !== undefined && keyValue !== null) {
existingRecordsMap.set(typeof keyValue === 'object' ? JSON.stringify(keyValue) : String(keyValue), record.record_id);
}
});
const recordsToUpdate = [];
const recordsToCreate = [];
records.forEach((record) => {
const keyValue = record.fields[keyField];
if (keyValue === undefined || keyValue === null) {
recordsToCreate.push(record);
return;
}
const normalizedKeyValue = typeof keyValue === 'object' ? JSON.stringify(keyValue) : String(keyValue);
const existingRecordId = existingRecordsMap.get(normalizedKeyValue);
if (existingRecordId) {
recordsToUpdate.push({
record_id: existingRecordId,
fields: record.fields,
});
}
else {
recordsToCreate.push(record);
}
});
const createdRecords = recordsToCreate.length > 0
? await batchCreate_1.batchCreateChunked.call(this, accessToken, appToken, tableId, recordsToCreate)
: [];
const updatedRecords = recordsToUpdate.length > 0
? await batchUpdate_1.batchUpdateChunked.call(this, accessToken, appToken, tableId, recordsToUpdate)
: [];
return {
created: createdRecords,
updated: updatedRecords,
stats: {
total: records.length,
created: createdRecords.length,
updated: updatedRecords.length,
},
};
}
exports.upsertByField = upsertByField;
//# sourceMappingURL=upsert.js.map
;