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