UNPKG

@ai-growth/n8n-nodes-wordpress

Version:

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

167 lines 6.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FeaturedImageService = void 0; const ErrorUtils_1 = require("../utils/ErrorUtils"); const MediaUploadService_1 = require("./MediaUploadService"); /** * Serviço para gerenciar imagens destacadas e metadados de imagens */ class FeaturedImageService { /** * Construtor do serviço * @param client Cliente WordPress */ constructor(client) { this.client = client; this.mediaService = new MediaUploadService_1.MediaUploadService(client); } /** * Define a imagem destacada para um conteúdo a partir de uma URL de imagem * @param contentId ID do conteúdo (post, página, etc.) * @param contentType Tipo de conteúdo * @param imageUrl URL da imagem * @param options Opções adicionais * @returns Conteúdo atualizado */ async setFeaturedImageFromUrl(contentId, contentType, imageUrl, options = {}) { try { // Verificar se o conteúdo existe await this.checkContentExists(contentId, contentType); // Fazer upload da imagem const image = await this.mediaService.uploadFromUrl(imageUrl, { metadata: options.metadata, ...options.uploadOptions }); // Atualizar imagem destacada return await this.setFeaturedImage(contentId, contentType, image.id); } catch (error) { if (error instanceof ErrorUtils_1.WordPressError) { throw error; } throw new ErrorUtils_1.WordPressError(`Erro ao definir imagem destacada a partir da URL: ${imageUrl}`, ErrorUtils_1.WordPressErrorType.UNKNOWN); } } /** * Define a imagem destacada para um conteúdo a partir de um ID de mídia existente * @param contentId ID do conteúdo (post, página, etc.) * @param contentType Tipo de conteúdo * @param mediaId ID da mídia na biblioteca do WordPress * @returns Conteúdo atualizado */ async setFeaturedImage(contentId, contentType, mediaId) { try { // Verificar se o conteúdo existe await this.checkContentExists(contentId, contentType); // Verificar se a mídia existe await this.mediaService.getMedia(mediaId); // Determinar o endpoint com base no tipo de conteúdo const endpoint = this.getEndpointForContentType(contentType); // Atualizar imagem destacada const response = await this.client.put(`${endpoint}/${contentId}`, { featured_media: mediaId }); return response; } catch (error) { if (error instanceof ErrorUtils_1.WordPressError) { throw error; } throw new ErrorUtils_1.WordPressError(`Erro ao definir imagem destacada para ${contentType} ID ${contentId}`, ErrorUtils_1.WordPressErrorType.UNKNOWN); } } /** * Remove a imagem destacada de um conteúdo * @param contentId ID do conteúdo (post, página, etc.) * @param contentType Tipo de conteúdo * @returns Conteúdo atualizado */ async removeFeaturedImage(contentId, contentType) { try { // Verificar se o conteúdo existe await this.checkContentExists(contentId, contentType); // Determinar o endpoint com base no tipo de conteúdo const endpoint = this.getEndpointForContentType(contentType); // Atualizar imagem destacada const response = await this.client.put(`${endpoint}/${contentId}`, { featured_media: 0 }); return response; } catch (error) { if (error instanceof ErrorUtils_1.WordPressError) { throw error; } throw new ErrorUtils_1.WordPressError(`Erro ao remover imagem destacada de ${contentType} ID ${contentId}`, ErrorUtils_1.WordPressErrorType.UNKNOWN); } } /** * Obtém a imagem destacada de um conteúdo * @param contentId ID do conteúdo (post, página, etc.) * @param contentType Tipo de conteúdo * @returns Imagem destacada ou null se não houver */ async getFeaturedImage(contentId, contentType) { try { // Verificar se o conteúdo existe const content = await this.checkContentExists(contentId, contentType); // Verificar se o conteúdo tem imagem destacada if (!content.featured_media) { return null; } // Obter informações da imagem return await this.mediaService.getMedia(content.featured_media); } catch (error) { if (error instanceof ErrorUtils_1.WordPressError) { throw error; } throw new ErrorUtils_1.WordPressError(`Erro ao obter imagem destacada de ${contentType} ID ${contentId}`, ErrorUtils_1.WordPressErrorType.UNKNOWN); } } /** * Verifica se um conteúdo existe * @param contentId ID do conteúdo * @param contentType Tipo de conteúdo * @returns Conteúdo se existir */ async checkContentExists(contentId, contentType) { try { const endpoint = this.getEndpointForContentType(contentType); return await this.client.get(`${endpoint}/${contentId}`); } catch (error) { if (error instanceof ErrorUtils_1.WordPressError && error.type === ErrorUtils_1.WordPressErrorType.NOT_FOUND) { throw new ErrorUtils_1.WordPressError(`${this.capitalizeContentType(contentType)} com ID ${contentId} não encontrado`, ErrorUtils_1.WordPressErrorType.NOT_FOUND); } throw error; } } /** * Obtém o endpoint da API para o tipo de conteúdo * @param contentType Tipo de conteúdo * @returns Endpoint da API */ getEndpointForContentType(contentType) { switch (contentType) { case 'post': return 'posts'; case 'page': return 'pages'; case 'product': return 'products'; default: throw new ErrorUtils_1.WordPressError(`Tipo de conteúdo não suportado: ${contentType}`, ErrorUtils_1.WordPressErrorType.VALIDATION_FAILED); } } /** * Capitaliza a primeira letra do tipo de conteúdo * @param contentType Tipo de conteúdo * @returns Tipo de conteúdo com primeira letra maiúscula */ capitalizeContentType(contentType) { return contentType.charAt(0).toUpperCase() + contentType.slice(1); } } exports.FeaturedImageService = FeaturedImageService; //# sourceMappingURL=FeaturedImageService.js.map