API REST

Tableros de ideas

Los tableros donde votan los clientes, y sus ideas.

  • GET /ideas/boards (tracker:read, admin o dueño de la empresa): tableros de ideas, donde los clientes votan lo que quieren ver. Cada uno con url (la dirección pública, que el cliente abre sin cuenta), published, ideas y pending_suggestions (sugerencias de clientes esperando al equipo).
  • GET /ideas/boards/{id} (tracker:read), POST /ideas/boards y PATCH/DELETE /ideas/boards/{id} (tracker:write): {"title": "Ideas para la app", "intro": "...", "projects": ["MOB"], "published": true, "access": "link|restricted", "allow_list": ["@cliente.com", "[email protected]"], "allow_suggestions": true}. En el PATCH, solo cambia lo que venga; projects y allow_list reemplazan la lista entera. link: cualquiera con el enlace lo ve, y votar pide el correo confirmado por código; restricted: solo quien confirme un correo de la lista ve las ideas. El GET trae ideas (publicadas, las más votadas primero, con el status que ve el cliente, issue, votes y comments) y pending_suggestions (con suggested_by, el correo del cliente). Una idea de un proyecto que salió del tablero desaparece solo de la página pública.
  • POST /ideas/boards/{id}/ideas (tracker:write): crea una idea publicada, {"title": "Exportar a PDF", "description": "...", "project": "MOB", "issue": "MOB-0012", "status": "under_review|planned|in_progress|released|closed"}. Con issue (de un proyecto del tablero; sin title, usa el de la issue), el estado sigue al de la issue; sin ella, vale status. Cuando el estado cambia a planned, in_progress, released o closed, quien votó recibe un correo, en el idioma de la página en la que confirmó su correo.
  • GET /ideas/{id} (tracker:read; la idea con los votos y los comentarios, con el correo de quien escribió), PATCH /ideas/{id} (los campos de la creación, solo cambia lo que venga; "issue": null desvincula la issue; {"published": true} publica la sugerencia de un cliente) y DELETE /ideas/{id} (la elimina; así se rechaza una sugerencia) (tracker:write). POST /ideas/{id}/comments con {"body": "..."} responde como el equipo (el cliente ve "Equipe <empresa>"); DELETE /ideas/comments/{id} borra un comentario.