Servicio: PostService

Método: create

async create(userId: Types.ObjectId, dto: CreatePostDto): Promise<Post>

Descripción

Este método permite crear una nueva publicación (post) en el sistema, asociada a un usuario. Valida el contenido del texto y la imagen de entrada utilizando dos servicios de moderación:

  • Moderación de texto: para detectar contenido tóxico.

  • Moderación de imagen: para detectar contenido NSFW.

Parámetros

Parámetro Tipo Descripción
userId Types.ObjectId ID del usuario que está creando la publicación.
dto CreatePostDto Objeto con los datos de la publicación (description, image).

Proceso interno

  • Validación inicial: si no se proporciona ni descripción ni imagen, lanza un BadRequestException.

Moderación de texto:

  • Si dto.description está presente, se envía al ToxicityDetectorService.

  • Si el texto es considerado tóxico (textMod.isToxic === true), lanza un NotAcceptableException con las etiquetas del análisis.

Moderación de imagen:

  • Si dto.image está presente, se envía al ImageModerationDetectorService.
  • Si la imagen no es segura (allowed === false), lanza un NotAcceptableException con las razones.

Creación del post:

  • Si pasa las validaciones, se crea una nueva instancia del modelo Post, se le asocia el userId y se guarda en la base de datos.

Excepciones

Excepción Causa
BadRequestException Si no se proporciona ni una descripción ni una imagen
NotAcceptableException Si el texto es tóxico o la imagen no pasa la moderación

Dependencias

  • ToxicityDetectorService: analiza y clasifica el texto.

  • ImageModerationDetectorService: evalúa el contenido NSFW en imágenes.

  • PostModel: modelo de Mongoose para persistencia de datos.