Skip to main content

Módulo Feedback

El módulo Feedback (src/domains/feedback/) gestiona los comentarios, sugerencias y reportes de los usuarios de la plataforma.

Schema Feedback

Definido en schemas/feedback.schema.ts. Colección: feedbacks.

CampoTipoDescripción
serialstringSerial auto-generado (generateSerial)
titlestring (requerido)Título del feedback
descriptionstring (requerido)Descripción detallada
isFeaturebooleanSi es una solicitud de funcionalidad
isSupportbooleanSi es un reporte de soporte
isActivebooleanEstado activo (default: true)
convertedToIdeabooleanSi fue convertido a idea del backlog
ideaIdstringID de la idea generada (ej. vibra-072)
deletedbooleanSoft delete
createdBystring (requerido)Usuario creador
eventstringInformación del evento

Índice

El schema ordena las consultas por { serial: -1 }. No hay índices compuestos explícitos, se usa el _id de MongoDB.

Endpoints CRUD

MétodoRutaDescripción
GET/api/feedbackListar feedbacks (paginado, excluye deleted)
GET/api/feedback/:idObtener por ID
POST/api/feedbackCrear feedback (asigna serial auto)
PUT/api/feedback/:idActualizar feedback
PUT/api/feedback/:id/statusActualizar estado (isActive)
DELETE/api/feedback/:idSoft delete
DELETE/api/feedback/:id/hardHard delete (eliminación física)
PUT/api/feedback/:id/soft-deleteSoft delete con parámetros
POST/api/feedback/by-descriptionBuscar por descripción exacta
GET/api/feedback/search/termBuscar por término (serial, title, description, createdBy)
POST/api/feedback/upload-csvCarga masiva desde CSV

POST /feedback/:id/convert-to-idea

Endpoint que convierte un feedback en una idea registrada en el backlog (archivo ideas.json del skill Ideas de OpenCode).

Flujo:

  1. Busca el feedback por ID
  2. Valida que no haya sido convertido previamente
  3. Lee el archivo ideas.json (ruta configurable via IDEAS_JSON_PATH en .env)
  4. Genera ID auto-incremental (vibra-{NNN})
  5. Construye la entrada de idea con { id, descripcion, detalle, tags, prioridad, estado, fechas, historial }
  6. Escribe en ideas.json
  7. Marca el feedback como convertedToIdea=true y guarda el ideaId

Body: { title?, description?, priority?, tags[] }

Respuesta: { success: true, ideaId: "vibra-072", idea: {...} }

Carga CSV

POST /api/feedback/upload-csv

Procesa un archivo CSV con columnas serial, title, description, createdBy usando la librería csv-parse. Inserta en batch y elimina el archivo temporal al finalizar.