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
JavaScript
;
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