smart_ide/services/docv/enso-docs/features/ENSO_FRONT_BACKEND_CONTRACT.md
Nicolas Cantu bc3c75e15f Add enso docs mirror under services/docv/enso-docs; docv integration docs
- Copy enso/docs tree to services/docv/enso-docs (refresh via cp -a from enso repo)
- Document mirror and refresh command in services/docv/README.md
- Ignore services/docv/target for local Rust workspace
- Track docv-service-integration, API docv.md, and related doc index updates
2026-04-03 17:26:35 +02:00

5.7 KiB
Raw Blame History

Contrat front enso-front → backends (audit)

Document vivant : priorité front ; les évolutions dAPI sont pilotées par les écrans, la doc suit.

Carte détaillée docv HTTP : DOCV_API_ENSO_FRONT_MAP.md

1. Appels docvFetch → docv-back (/docv-api)

Liste exhaustive des routes /api/v1/*, handlers, modules TS et écrans : DOCV_API_ENSO_FRONT_MAP.md §1 (référence unique, non dupliquée ici).

OAuth (hors docvFetch navigateur direct) : authorize + POST token via Next docv-token.

Déconnexion : logout efface jeton + état OAuth (sessionStorage), puis redirige vers GET {docv}/oauth/sign-out?return_url=<origin>/?signed_out=1 afin deffacer le cookie HttpOnly docv_oauth_session (sans quoi /oauth/authorize pouvait encore délivrer un code sans mot de passe). / redirige vers /dashboard?signed_out=1 ; ProtectedRoute propage signed_out=1 jusquà /login?signed_out=1. LoginPageInner nenchaîne pas le SSO tout de suite ; relance automatique après un court délai ou bouton manuel. Même return_url pour une 401 docv (invalidateLocalSessionAndGoHome). Les durées et sign-out sont détaillés dans docv/AUTH_SESSION.md.

Ressource Rappel
docv métier (/docv-api + /api/v1/…) Voir tableau §1 de la carte API ; persistance : tables users, offices, office_members, folders, folder_documents, listes utilisateur (user_notifications, user_pending_documents, user_conversations, conversation_messages).

Données hors backends : les checklists « documents attendus » par type dopération (lib/operationChecklists/data/*.json) ne passent ni par docv ni par enso-back ; le front les affiche selon folders.operation_type (slug). Voir OPERATION_CHECKLISTS.md.

2. Types JSON attendus par le front (camelCase)

  • Company (modèle UI après officeAndFoldersToCompany) : champs office + dossiers ; organizationArchetypes = liste triée des dp_archetype distincts des dossiers (types dorganisation DP : groupe / filiale / SCI · commercial · IS / IR), pour affichage « Types dorganisation » sur le tableau de bord, la fiche société et la sidebar.

  • Chargement dashboard : le catalogue GET /api/v1/offices et les stubs (notifications, pending, conversations) ne doivent pas être bloqués sur lobjet user React encore null alors que le jeton est déjà en session — le filtre dappel est la présence du Bearer (useOfficesCatalog, useDocvStubListsState).

  • Notification : id, type (new_document | request_document | case_update), message, companyId, companyName, caseId?, createdAt, isRead.

  • PendingDocument : id, name, description, companyId, companyName, caseId, caseName, requestedAt, dueDate?.

  • Conversation : id, contactName, contactRole, lastMessage, lastMessageAt, unreadCount, messages[]
    Message : id, senderId, senderName, senderRole (client | cabinet), content, createdAt, isRead.

Les handlers docv-back sérialisent en camelCase pour ces trois ressources en réponse.

Corps POST /api/v1/pending-documents (aligné docv-back, snake_case dans le JSON) : target_user_uid, office_uid, case_uid, name, description, optionnellement case_name, due_date.

Corps POST /api/v1/folders/:uid/documents : name, type, category, uploaded_by, size (conventions actuelles du client) ; optionnel storage_url, mime_type.

POST /api/v1/folders/:uid/documents/binary : corps brut = fichier ; métadonnées en en-têtes X-Enso-* (voir DOCV_API_ENSO_FRONT_MAP.md §1), optionnel X-Enso-Dp-Mirror-Relative-Path ; activé si DOCV_FILE_STORAGE_DIR est défini ; réponse pièce peut inclure dpMirrorPath (camelCase). Sync Git : DOCV_DP_GIT_*DOSSIERS_PERMANENTS_DATA_GIT.md.

GET /api/v1/folders/:uid : champs dossier optionnels snake_case dp_archetype, dp_layout_root (alignés sur docv-back FolderJson).

Arborescence DP sur disque : listing et fichier texte — GET /api/v1/folders/:folderUid/dp-layout-entries / dp-layout-file (périmètre dossier) ; GET /api/v1/offices/:officeUid/instance-layout-entries / instance-layout-file (périmètre société, racine sous instances/ résolue côté serveur pour tout membre doffice, sans filtre dp_structure_demo seul — voir carte API §1).

Corps POST /api/v1/conversations/:id/messages : content (chaîne).

PATCH /api/v1/notifications/:id : { "isRead": true } pour enregistrer la lecture côté BDD (notification appartenant à lutilisateur Bearer). Corps vide accepté (comportement identique à isRead: true).

3. enso-back (zone 17 / spécifique)

Le front ne consomme pas encore dJSON métier enso-back dans le socle actuel ; les appels Next /api/* concernent surtout OAuth.
Point dentrée de présence : GET /api/v1/enso/status sur le port enso-back (voir PORTS_ENSO.md) — JSON : service, ready, database, champs réservés anchoring / ia (null tant que non intégrés). ready est vrai lorsque le pool PostgreSQL répond à SELECT 1.

4. Prochaines évolutions (hors ce lot)

  • Stockage objet (S3 / pré-signé) ou réplication hors disque local du répertoire DOCV_FILE_STORAGE_DIR.
  • Appels enso-front → enso-back pour zone 17 quand les routes existent.