n8n-nodes-nextcloud-tables
Version:
Production-Ready n8n Node für Nextcloud Tables - Vollständige API-Abdeckung mit erweiterten Filtern, Multi-Column-Sorting, CSV-Import und professioneller Datenvalidierung
200 lines • 8.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.NextcloudTables = void 0;
// Handler importieren
const table_handler_1 = require("./handlers/table.handler");
const row_handler_1 = require("./handlers/row.handler");
const view_handler_1 = require("./handlers/view.handler");
const column_handler_1 = require("./handlers/column.handler");
const share_handler_1 = require("./handlers/share.handler");
const import_handler_1 = require("./handlers/import.handler");
// Helper importieren
const node_methods_1 = require("./helpers/node.methods");
const api_helper_1 = require("./helpers/api.helper");
// Beschreibungen importieren
const table_1 = require("./descriptions/table");
const row_1 = require("./descriptions/row");
const view_1 = require("./descriptions/view");
const column_1 = require("./descriptions/column");
const share_1 = require("./descriptions/share");
const import_1 = require("./descriptions/import");
class NextcloudTables {
constructor() {
this.description = {
displayName: 'Nextcloud Tables',
name: 'nextcloudTables',
icon: 'file:nextcloud-tables.svg',
group: ['transform'],
version: 1,
subtitle: '={{ $parameter["operation"] + ": " + $parameter["resource"] }}',
description: 'Verwalten Sie Ihre Nextcloud Tables - Tabellen, Zeilen und Daten',
defaults: {
name: 'Nextcloud Tables',
},
inputs: ["main" /* NodeConnectionType.Main */],
outputs: ["main" /* NodeConnectionType.Main */],
credentials: [
{
name: 'nextcloudTablesApi',
required: true,
},
],
usableAsTool: true,
requestDefaults: {
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
},
properties: [
{
displayName: 'Resource',
name: 'resource',
type: 'options',
noDataExpression: true,
options: [
{
name: 'Tabelle',
value: 'table',
description: 'Operationen mit Nextcloud Tables',
},
{
name: 'View',
value: 'view',
description: 'Operationen mit Tabellen-Views',
},
{
name: 'Spalte',
value: 'column',
description: 'Operationen mit Tabellen-Spalten',
},
{
name: 'Share',
value: 'share',
description: 'Operationen mit Tabellen-Freigaben',
},
{
name: 'Import',
value: 'import',
description: 'CSV-Import in Tabellen',
},
{
name: 'Zeile',
value: 'row',
description: 'Operationen mit Tabellen-Zeilen',
},
],
default: 'table',
description: 'Die Ressource für diese Operation',
},
// Operationen und Felder
...table_1.tableOperations,
...table_1.tableFields,
...view_1.viewOperations,
...view_1.viewFields,
...column_1.columnOperations,
...column_1.columnFields,
...share_1.shareOperations,
...share_1.shareFields,
...import_1.importOperations,
...import_1.importFields,
...row_1.rowOperations,
...row_1.rowFields,
],
};
this.methods = {
loadOptions: {
async getTables() {
return node_methods_1.NodeLoadOptions.getTables(this);
},
async getViews() {
return node_methods_1.NodeLoadOptions.getViews(this);
},
async getColumns() {
return node_methods_1.NodeLoadOptions.getColumns(this);
},
async getUsers() {
return node_methods_1.NodeLoadOptions.getUsers(this);
},
async getGroups() {
return node_methods_1.NodeLoadOptions.getGroups(this);
},
async getShareReceivers() {
return node_methods_1.NodeLoadOptions.getShareReceivers(this);
},
},
listSearch: {
async getTables(filter) {
return node_methods_1.NodeListSearch.getTables(this, filter);
},
async getViews(filter) {
return node_methods_1.NodeListSearch.getViews(this, filter);
},
async getColumns(filter) {
return node_methods_1.NodeListSearch.getColumns(this, filter);
},
},
};
}
async execute() {
const items = this.getInputData();
const returnData = [];
for (let i = 0; i < items.length; i++) {
const startTime = Date.now();
try {
const resource = this.getNodeParameter('resource', i);
const operation = this.getNodeParameter('operation', i);
// Log operation start
api_helper_1.NextcloudTablesLogger.operationStart(resource, operation, {
itemIndex: i,
totalItems: items.length
});
let result;
switch (resource) {
case 'table':
result = await table_handler_1.TableHandler.execute(this, operation, i);
break;
case 'view':
result = await view_handler_1.ViewHandler.execute(this, operation, i);
break;
case 'column':
result = await column_handler_1.ColumnHandler.execute(this, operation, i);
break;
case 'share':
result = await share_handler_1.ShareHandler.execute(this, operation, i);
break;
case 'import':
result = await import_handler_1.ImportHandler.execute(this, operation, i);
break;
case 'row':
result = await row_handler_1.RowHandler.execute(this, operation, i);
break;
default:
api_helper_1.NextcloudTablesLogger.error('OPERATION-ERROR', `Unknown resource: ${resource}`, null, { resource, operation });
throw new Error(`[N8N-NEXTCLOUD-TABLES] Unbekannte Ressource: ${resource}`);
}
const duration = Date.now() - startTime;
api_helper_1.NextcloudTablesLogger.operationSuccess(resource, operation, duration, result);
returnData.push({ json: result });
}
catch (error) {
const duration = Date.now() - startTime;
const resource = this.getNodeParameter('resource', i, 'unknown');
const operation = this.getNodeParameter('operation', i, 'unknown');
api_helper_1.NextcloudTablesLogger.operationError(resource, operation, error, duration);
const nodeError = error;
if (this.continueOnFail()) {
returnData.push({
json: { error: nodeError.message },
});
}
else {
throw error;
}
}
}
return this.prepareOutputData(returnData);
}
}
exports.NextcloudTables = NextcloudTables;
//# sourceMappingURL=NextcloudTables.node.js.map