UNPKG

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

157 lines 6.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ContextHandler = void 0; const api_helper_1 = require("../helpers/api.helper"); class ContextHandler { static async execute(context, operation, itemIndex) { switch (operation) { case 'getAll': return this.getAll(context, itemIndex); case 'get': return this.get(context, itemIndex); case 'getTables': return this.getTables(context, itemIndex); case 'getPages': return this.getPages(context, itemIndex); default: throw new Error(`Unbekannte Operation: ${operation}`); } } /** * Alle verfügbaren App-Contexts abrufen */ static async getAll(context, itemIndex) { try { return await api_helper_1.ApiHelper.makeApiRequest(context, 'GET', '/contexts'); } catch (error) { const apiError = error; throw new Error(`Fehler beim Abrufen der Contexts: ${apiError.message}`); } } /** * Einen spezifischen App-Context abrufen */ static async get(context, itemIndex) { const contextId = context.getNodeParameter('contextId', itemIndex); // Context-ID validieren if (!contextId || contextId.trim().length === 0) { throw new Error('Context-ID darf nicht leer sein'); } try { return await api_helper_1.ApiHelper.makeApiRequest(context, 'GET', `/contexts/${contextId.trim()}`); } catch (error) { const apiError = error; throw new Error(`Fehler beim Abrufen des Contexts: ${apiError.message}`); } } /** * Alle Tabellen eines Contexts abrufen */ static async getTables(context, itemIndex) { const contextId = context.getNodeParameter('contextId', itemIndex); const additionalOptions = context.getNodeParameter('additionalOptions', itemIndex, {}); // Context-ID validieren if (!contextId || contextId.trim().length === 0) { throw new Error('Context-ID darf nicht leer sein'); } // Query-Parameter aufbauen const queryParams = []; if (additionalOptions.onlyOwn === true) { queryParams.push('onlyOwn=true'); } if (additionalOptions.includeArchived === true) { queryParams.push('includeArchived=true'); } // URL mit Query-Parametern erstellen let url = `/contexts/${contextId.trim()}/tables`; if (queryParams.length > 0) { url += '?' + queryParams.join('&'); } try { return await api_helper_1.ApiHelper.makeApiRequest(context, 'GET', url); } catch (error) { const apiError = error; throw new Error(`Fehler beim Abrufen der Context-Tabellen: ${apiError.message}`); } } /** * Alle Pages eines Contexts abrufen */ static async getPages(context, itemIndex) { const contextId = context.getNodeParameter('contextId', itemIndex); const pageFilter = context.getNodeParameter('pageFilter', itemIndex, {}); // Context-ID validieren if (!contextId || contextId.trim().length === 0) { throw new Error('Context-ID darf nicht leer sein'); } // Query-Parameter aufbauen const queryParams = []; if (pageFilter.title && pageFilter.title.trim().length > 0) { queryParams.push(`title=${encodeURIComponent(pageFilter.title.trim())}`); } if (pageFilter.activeOnly === true) { queryParams.push('activeOnly=true'); } if (pageFilter.sort && pageFilter.sort !== 'title') { queryParams.push(`sort=${pageFilter.sort}`); } // URL mit Query-Parametern erstellen let url = `/contexts/${contextId.trim()}/pages`; if (queryParams.length > 0) { url += '?' + queryParams.join('&'); } try { const pages = await api_helper_1.ApiHelper.makeApiRequest(context, 'GET', url); // Falls ein lokaler Filter auf den Titel angewendet werden soll if (pageFilter.title && pageFilter.title.trim().length > 0) { const filterTitle = pageFilter.title.toLowerCase(); return pages.filter(page => page.title && page.title.toLowerCase().includes(filterTitle)); } return pages; } catch (error) { const apiError = error; throw new Error(`Fehler beim Abrufen der Context-Pages: ${apiError.message}`); } } /** * Hilfsfunktion: Context-ID validieren */ static validateContextId(contextId) { if (!contextId || contextId.trim().length === 0) { return false; } // Context-IDs sollten numerisch oder alphanumerisch sein const contextIdRegex = /^[a-zA-Z0-9_-]+$/; return contextIdRegex.test(contextId.trim()); } /** * Hilfsfunktion: Page-Filter validieren */ static validatePageFilter(filter) { const errors = []; if (filter.sort && !['title', 'created', 'modified'].includes(filter.sort)) { errors.push('Ungültige Sortierreihenfolge. Erlaubt: title, created, modified'); } return errors; } /** * Hilfsfunktion: Context-Berechtigungen prüfen (falls verfügbar) */ static async checkContextPermissions(context, contextId) { try { // Versuche Context-Informationen abzurufen um Berechtigungen zu prüfen await api_helper_1.ApiHelper.makeApiRequest(context, 'GET', `/contexts/${contextId}`); return true; } catch (error) { // Wenn Context nicht gefunden wird oder keine Berechtigung return false; } } } exports.ContextHandler = ContextHandler; //# sourceMappingURL=context.handler.js.map