Demandes des clients
15 routes. Chemins relatifs à https://api.nexus-engine.eu/api/v1.
GET
/tickets
Les demandes visibles : toutes pour un admin, celles de ses sites pour un développeur.
Requêtestatus, clientId, siteId, sansTache
RéponseTicketDto[]
GET
/tickets/compteurs
Ce qui reste à traiter et ce qui a été contesté — le chiffre de la pastille.
GET
/tickets/discussion
Le flux de discussion : les derniers messages de toutes les demandes visibles, le plus récent en tête, chacun avec sa demande autour.
RequêtesiteId, clientId, limit (200 par défaut, 500 au plus)
RéponseDiscussionMessageDto[]
GET
/tickets/:id
Une demande et son fil complet.
GET
/tickets/par-tache/:taskId
La demande dont une tâche est née. 404 quand elle n’en vient pas.
GET
/tickets/:id/attachments/:attachmentId
Le contenu d’une pièce jointe, en base64.
Réponse{ name, mimeType, dataBase64 }
POST
/tickets
Saisit une demande arrivée ailleurs (appel, réunion). Le SITE (ou la machine) mène : le client s’en déduit, et `clientId` ne sert qu’en l’absence de site. Sans ni l’un ni l’autre, la demande est INTERNE — aucun portail, aucun courriel.
CorpssiteId, serverId, contactId, body, urls, attachments, clientId (facultatif, ignoré si un site est donné)
RéponseTicketDetailDto
PATCH
/tickets/:id/demande
Complète la demande — le premier message du fil, et lui seul : son texte, ses adresses, ses pièces jointes. Ce texte est celui que le client lit dans son espace : le fil dit qu’il a été réécrit, comme lorsque c’est le client qui le fait.
Corpsbody, urls (la liste ENTIÈRE, absente = inchangée), attachments (en plus), retirer (identifiants)
RéponseTicketDetailDto
Note409 sur une demande terminée ou refusée : le client l’a lue avec sa conclusion. La tâche née de la demande reçoit le nouveau texte SOUS l’ancien, daté — jamais à sa place, et dit les pièces ajoutées ou retirées. Une pièce d’un autre ticket ne se retire pas : l’identifiant est vérifié contre CE fil.
POST
/tickets/:id/messages
Répond dans le fil. Le message est lu par le client et lui est envoyé.
Corpsbody, urls, attachments, replyToId, creationIds (facultatif)
RéponseTicketMessageEnvoiDto
Note`creationIds` relie des créations du Studio au message, pour l’AGENCE seulement : le client ne reçoit que les pièces jointes, jamais ce lien. Une création que l’auteur ne voit pas (autre entreprise, supprimée, projet non confié) est écartée et nommée dans `creationsEcartees`, sans refuser le message — qui doit porter, lui, du texte, un lien ou une pièce.
POST
/tickets/:id/messages/:messageId/reactions
Pose ou retire une réaction sur un message du fil. Le client la voit.
Corpsemoji
RéponseTicketDetailDto
POST
/tickets/:id/tache
Convertit la demande en tâche. Le client n’est prévenu qu’à la clôture.
Corpstitle, description, assigneeIds, dueAt, priority, projectId
RéponseTicketDetailDto
NoteAffecter quelqu’un l’affecte au projet de la tâche — et au site, ou à la machine, de la demande dont elle vient (jamais les deux : un membre d’une machine voit déjà tous ses sites). Ajout seulement, jamais un retrait ; un affecté déjà en place n’est pas touché. Seul un membre ACTIF de cette entreprise est accepté (400 sinon, et rien n’est écrit). Ce qui a été posé va au journal (« affectation posée par une tâche »).
POST
/tickets/:id/messages/:messageId/tache
Fait une tâche d’UN POINT du fil, sans consommer celle de la demande.
Corpstitle, description, assigneeIds, priority, dueAt, projectId (facultatif)
NoteLe geste de la recette : un fil porte quinze points, chacun devient sa tâche. Refusé (409) si ce point en a déjà une. Rien de tout cela ne traverse vers le portail. Affecter quelqu’un l’affecte au projet de la tâche — et au site, ou à la machine, de la demande dont elle vient (jamais les deux : un membre d’une machine voit déjà tous ses sites). Ajout seulement, jamais un retrait ; un affecté déjà en place n’est pas touché. Seul un membre ACTIF de cette entreprise est accepté (400 sinon, et rien n’est écrit). Ce qui a été posé va au journal (« affectation posée par une tâche »).
DELETE
/tickets/:id
Owner et Admin
Supprime une demande, ses messages, ses pièces jointes et les TÂCHES nées de la demande — la sienne comme celles de ses points. Aucun courriel ne part, ni à l’équipe ni au client. Réservé aux administrateurs : une demande porte la parole d’un client.
Réponse{ ok, messages, pieces, tachesSupprimees }
POST
/tickets/:id/refus
Refuse la demande avec son motif — hors périmètre, à chiffrer. Le client est prévenu.
Corpsbody, urls, attachments
RéponseTicketDetailDto
POST
/tickets/:id/cloture
Clôt une demande qui n’appelait aucun travail. Même courriel qu’une clôture par tâche.