@ai-growth/n8n-nodes-wordpress
Version:
n8n node for WordPress integration with AI GROWTH - SEO WP plugin
198 lines • 8.23 kB
JavaScript
;
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