UNPKG

@ai-growth/n8n-nodes-wordpress

Version:

n8n node for WordPress integration with AI GROWTH - SEO WP plugin

198 lines 8.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FaqService = void 0; const ErrorUtils_1 = require("../utils/ErrorUtils"); const SeoService_1 = require("./SeoService"); /** * Serviço para gerenciamento de FAQs do WordPress */ class FaqService { /** * Construtor do serviço * @param client Cliente WordPress * @param seoService Serviço SEO (opcional, será criado se não fornecido) */ constructor(client, seoService) { this.pluginEndpoint = 'ai-growth-seo/v1'; this.client = client; this.seoService = seoService || new SeoService_1.SeoService(client); } /** * Obtém as FAQs de um post específico * @param postId ID do post * @param options Opções da consulta * @returns Array de FAQs */ async getPostFaqs(postId, options = {}) { const { requirePlugin = false } = options; // Verificar disponibilidade do plugin const pluginInfo = await this.seoService.checkPluginAvailability(); // Se o plugin não está disponível e é requerido, lança erro if (pluginInfo.status !== 'active' && requirePlugin) { throw new ErrorUtils_1.WordPressError('AI GROWTH - SEO WP plugin is required but not available on the WordPress site', ErrorUtils_1.WordPressErrorType.NOT_FOUND); } // Se o plugin não está disponível, retorna array vazio if (pluginInfo.status !== 'active') { return []; } try { // Obter FAQs do post const response = await this.client.get(`${this.pluginEndpoint}/post/${postId}/faq`); // Verificar se as FAQs existem e são válidas if (!response || !response.items) { return []; } // Formatar e retornar FAQs return this.formatFaqs(response.items); } catch (error) { // Se o plugin não está disponível mas não é requerido, retorna array vazio if (!requirePlugin) { return []; } // Caso contrário, relança o erro if (error instanceof ErrorUtils_1.WordPressError) { throw error; } throw new ErrorUtils_1.WordPressError(`Failed to fetch FAQs for post ${postId}: ${error.message}`, ErrorUtils_1.WordPressErrorType.SERVER, undefined, error); } } /** * Obtém todas as FAQs do site * @param options Opções da consulta * @returns Array de FAQs */ async getAllFaqs(options = {}) { const { requirePlugin = false } = options; // Verificar disponibilidade do plugin const pluginInfo = await this.seoService.checkPluginAvailability(); // Se o plugin não está disponível e é requerido, lança erro if (pluginInfo.status !== 'active' && requirePlugin) { throw new ErrorUtils_1.WordPressError('AI GROWTH - SEO WP plugin is required but not available on the WordPress site', ErrorUtils_1.WordPressErrorType.NOT_FOUND); } // Se o plugin não está disponível, retorna array vazio if (pluginInfo.status !== 'active') { return []; } try { // Obter todas as FAQs const response = await this.client.get(`${this.pluginEndpoint}/faqs`); // Verificar se as FAQs existem e são válidas if (!response || !response.items) { return []; } // Formatar e retornar FAQs return this.formatFaqs(response.items); } catch (error) { // Se o plugin não está disponível mas não é requerido, retorna array vazio if (!requirePlugin) { return []; } // Caso contrário, relança o erro if (error instanceof ErrorUtils_1.WordPressError) { throw error; } throw new ErrorUtils_1.WordPressError(`Failed to fetch all FAQs: ${error.message}`, ErrorUtils_1.WordPressErrorType.SERVER, undefined, error); } } /** * Adiciona FAQs a um post * @param postId ID do post * @param faqs Array de FAQs para adicionar * @returns FAQs atualizadas do post */ async addFaqsToPost(postId, faqs) { // Verificar disponibilidade do plugin const pluginInfo = await this.seoService.checkPluginAvailability(); // Se o plugin não está disponível, lança erro if (pluginInfo.status !== 'active') { throw new ErrorUtils_1.WordPressError('AI GROWTH - SEO WP plugin is not available on the WordPress site', ErrorUtils_1.WordPressErrorType.NOT_FOUND); } try { // Adicionar FAQs ao post const response = await this.client.post(`${this.pluginEndpoint}/post/${postId}/faq`, { items: faqs }); // Verificar se as FAQs foram adicionadas corretamente if (!response || !response.items) { return []; } // Formatar e retornar FAQs atualizadas return this.formatFaqs(response.items); } catch (error) { // Relançar o erro if (error instanceof ErrorUtils_1.WordPressError) { throw error; } throw new ErrorUtils_1.WordPressError(`Failed to add FAQs to post ${postId}: ${error.message}`, ErrorUtils_1.WordPressErrorType.SERVER, undefined, error); } } /** * Atualiza as FAQs de um post específico * @param postId ID do post * @param faqs Array de FAQs para atualizar * @returns FAQs atualizadas do post */ async updatePostFaqs(postId, faqs) { // Verificar disponibilidade do plugin const pluginInfo = await this.seoService.checkPluginAvailability(); // Se o plugin não está disponível, lança erro if (pluginInfo.status !== 'active') { throw new ErrorUtils_1.WordPressError('AI GROWTH - SEO WP plugin is not available on the WordPress site', ErrorUtils_1.WordPressErrorType.NOT_FOUND); } try { // Atualizar FAQs do post const response = await this.client.put(`${this.pluginEndpoint}/post/${postId}/faq`, { items: faqs }); // Verificar se as FAQs foram atualizadas corretamente if (!response || !response.items) { return []; } // Formatar e retornar FAQs atualizadas return this.formatFaqs(response.items); } catch (error) { // Se a rota de PUT não existe, tentar usar POST (fallback) if (error instanceof ErrorUtils_1.WordPressError && error.type === ErrorUtils_1.WordPressErrorType.SERVER) { try { return await this.addFaqsToPost(postId, faqs); } catch (fallbackError) { // Se o fallback também falhar, lança o erro original throw error; } } // Relançar o erro original if (error instanceof ErrorUtils_1.WordPressError) { throw error; } throw new ErrorUtils_1.WordPressError(`Failed to update FAQs for post ${postId}: ${error.message}`, ErrorUtils_1.WordPressErrorType.SERVER, undefined, error); } } /** * Formata os dados de FAQ do plugin * @param faqs Dados de FAQ da API * @returns FAQs formatadas */ formatFaqs(faqs) { if (Array.isArray(faqs)) { return faqs.map(item => ({ question: item.question || '', answer: item.answer || '', })); } if (typeof faqs === 'object' && faqs !== null) { // Alguns plugins podem retornar um objeto com índices numéricos return Object.values(faqs).map(item => ({ question: item.question || '', answer: item.answer || '', })); } return []; } } exports.FaqService = FaqService; //# sourceMappingURL=FaqService.js.map