Skip to content

BDD-116 — Renommage et suppression d'une connexion API

1. User Story

En tant qu'administrateur,
je veux pouvoir renommer et supprimer une connexion API enregistrée,
afin de maintenir à jour la liste des accès vers les applications externes (Formulaires, etc.).

2. Critères d'acceptation

#CritèreStatut
1Une action « Supprimer » est disponible sur chaque connexion de la liste
2Une confirmation explicite est demandée avant suppression
3En cas de confirmation, la connexion est supprimée et disparaît de la liste
4En cas d'erreur lors de la suppression, un message explicite est affiché et la connexion est conservée
5Une action « Renommer » est disponible sur chaque connexion
6L'utilisateur peut modifier le nom via un champ éditable inline
7Le nom respecte les règles de validation (non vide, longueur max 255)
8En cas de succès, le nouveau nom est enregistré et affiché immédiatement
9En cas d'erreur (nom invalide ou problème technique), un message explicite est affiché et la modification est annulée

Détail fonctionnel des critères

  1. Menu d'actions

    • Sur chaque ligne de /connections, un ActionMenuButton (même principe que les sources / sous-dossiers).
    • Entrées : Renommer (edit) puis Supprimer (delete, séparateur avant l'entrée).
    • aria-label : « Actions de la connexion ».
  2. Suppression

    • Clic SupprimerPopUpCard type delete, titre « Supprimer la connexion », mention du nom et caractère irréversible.
    • Confirmation → DELETE /connections/:uuid puis rafraîchissement de la liste paginée.
    • Succès → notification avec message API ou fallback « Connexion supprimée avec succès. »
    • Si dernière connexion de la page courante → retour à la page précédente (comportement aligné sur AdminSourcesPage).
    • Erreur API → Impossible de supprimer la connexion, la ligne reste visible (modale peut rester ouverte).
  3. Renommage

    • Clic Renommer → le libellé de la ligne devient un q-input inline (Enter = valider, Escape = annuler).
    • Validation front : nom trimé non vide, maxlength 255, bouton ✓ désactivé si invalide.
    • Succès → PATCH /connections/:uuid avec { name }, mise à jour optimiste dans le store + notification « Connexion renommée ».
    • Erreur API → message response.data.message (ou fallback), mode édition fermé (annulation UI).
  4. Suppression technique

    • Hard delete : la ligne est supprimée définitivement en base (DELETE Prisma).
    • Pas de re-test /connection-check au renommage (seul le libellé change ; URL et clé inchangées).

3. Périmètre fonctionnel

Backend

FichierRôle
back/src/api/connections/connections.controller.tsPATCH /connections/:uuid, DELETE /connections/:uuid
back/src/api/connections/connections.service.tsupdateConnection, deleteConnection (périmètre entreprise / super-admin)
back/src/api/connections/dto/connection.dto.tsDTO UpdateConnectionDto (name, @MaxLength(255))
back/src/exceptions/api-connection.exceptions.tsApiConnectionNotFoundException (404 si UUID inconnu ou hors périmètre)

Frontend

FichierRôle
front/src/pages/connections/ConnectionsPage.vueMenu actions, édition inline, modale suppression
front/src/stores/connections-store.jsupdateConnection, deleteConnection, états renamingConnectionUuid / deletingConnectionUuid
front/src/components/ui/ActionMenuButton.vueMenu contextuel (réutilisé)
front/src/components/ui/PopUpCard.vueConfirmation suppression (réutilisé)

Dépendances ticket parent

  • Table api_connections et module connexions : voir BDD-114.
  • Aucune migration SQL supplémentaire pour ce ticket.

4. Endpoints API (Outil BDD)

MéthodeCheminGuardsDescription
PATCH/connections/:uuidAuthGuard, AdminGuardRenomme une connexion (name uniquement)
DELETE/connections/:uuidAuthGuard, AdminGuardSuppression définitive (hard delete)

Corps PATCH /connections/:uuid

json
{
  "name": "API Formulaires recette"
}

Réponse PATCH (200)

Même forme que ConnectionResponseDto (sans secrets) — voir BDD-114.

Réponse DELETE (200)

json
{
  "message": "Connexion supprimée avec succès."
}

Erreurs courantes

CodeCas
400Body invalide (nom vide, > 255 caractères)
401Jeton absent / invalide
403Rôle non admin
404Connexion introuvable ou autre entreprise (admin non super-admin)

5. Règles métier implémentées

  • Périmètre entreprise (identique à BDD-114)
    • administrateur : renommage / suppression limités aux connexions de son enterprise_id.
    • super-admin : toutes les connexions.
  • Renommage
    • Seul le champ name est modifiable ; base_url et clé chiffrée restent inchangés.
    • Trim du nom côté service avant persistance.
  • Suppression
    • Hard delete : la ligne est retirée de la table ; pas d'appel à Formulaires ni suppression de données synchronisées (hors périmètre).
    • La connexion n'apparaît plus dans GET /connections ni GET /connections/:uuid.

6. Points de vérification

  • Chaque ligne de la liste /connections affiche le menu avec Renommer et Supprimer.
  • Renommer : édition inline, validation vide / trop long, message de succès, nom mis à jour sans rechargement complet de page (mise à jour store).
  • Renommer : erreur API (ex. 400) → toast d'erreur, retour à l'affichage lecture seule avec l'ancien nom.
  • Supprimer : modale avec le nom de la connexion, boutons Annuler / Supprimer.
  • Supprimer : succès → toast, ligne absente, compteur « X connexion(s) » décrémenté.
  • Supprimer : erreur réseau / 500 → toast « Impossible de supprimer la connexion », connexion toujours listée.
  • Pagination : suppression du dernier élément d'une page > 1 ramène à la page précédente.
  • Accès réservé admin / super-admin (inchangé vs BDD-114).

7. Tests associés

Backend (unitaires)

  • back/src/api/connections/connections.service.spec.ts
    • updateConnection : mise à jour du name (trim), retour presenter, filtre entreprise.
    • updateConnection : ApiConnectionNotFoundException si introuvable.
    • deleteConnection : hard delete (suppression en base), message de succès.
    • deleteConnection : ApiConnectionNotFoundException si introuvable.

Backend (e2e)

  • À compléter dans back/test/e2e/connections-controller.e2e-spec.ts (même gabarit que DELETE /sources/:uuid) :
    • PATCH /connections/:uuid : 401, 403, 400 body, 404, 200.
    • DELETE /connections/:uuid : 401, 403, 400 UUID, 404, 200 + absence au GET liste.

Frontend (unitaires)

  • front/src/__tests__/stores/connections-store.spec.js
    • updateConnection : PATCH, mise à jour locale du tableau connections.
    • deleteConnection : DELETE, reset de deletingConnectionUuid.
  • front/src/__tests__/pages/connections/ConnectionsPage.spec.js
    • présence du menu actions sur une ligne ;
    • ouverture du mode édition au clic Renommer.

Frontend (e2e Playwright)

  • front/e2e/pages/connections/connections.spec.js
    • menu : libellés Renommer / Supprimer et captions ;
    • renommage happy path (PATCH mocké, notification, nouveau nom visible) ;
    • renommage erreur API (message, nom d'origine conservé) ;
    • suppression après confirmation (DELETE mocké, liste vide) ;
    • suppression erreur (message, connexion conservée dans la liste).

8. Notes d'implémentation

  • UX calquée sur AdminSourcesPage (suppression) et AdminFolderDetailPage (renommage inline des sous-dossiers).
  • Le renommage ne déclenche pas un nouveau test connection-check : évolution possible dans un ticket dédié (re-validation manuelle, rotation de clé, etc.).
  • La suppression est définitive (hard delete) — pas d'UI de restauration.
  • Ticket parent BDD-114 : retirer « édition / suppression » des évolutions possibles une fois ce ticket livré.

9. Hors périmètre (explicitement)

  • Modification de l'URL de base ou de la clé API sur une connexion existante.
  • Re-test automatique de la connexion après renommage.
  • Restauration d'une connexion supprimée (corbeille).
  • Impact sur des jobs / sync Formulaires déjà branchés sur getDecryptedApiKey (aucun consommateur métier à ce stade).