Appearance
BDD-26 — Identifier l'utilisateur déposant un fichier
📄 Ticket fonctionnel
Identifier le déposant d'un fichier
Les administrateurs peuvent identifier rapidement l'utilisateur ayant déposé un fichier, notamment depuis la consultation des fichiers d'un dossier client.
1. User Story
En tant qu'administrateur,
Je veux voir qui a déposé chaque fichier,
Afin de suivre l'origine des documents transmis par les clients.
2. Critères d'acceptance
- Lorsqu'un fichier est déposé, le lien avec l'utilisateur déposant est conservé.
- L'API retourne les informations simples du déposant : prénom, nom, email si disponibles.
- Dans la vue admin d'un dossier, chaque fichier affiche le déposant.
- L'affichage reste discret côté UI et ne surcharge pas la liste.
- Si l'utilisateur déposant est introuvable ou incomplet, l'interface affiche une valeur de fallback simple.
- Les utilisateurs standards ne voient pas d'information inutile ou sensible sur d'autres utilisateurs.
- Les tests back et front couvrent l'affichage du déposant.
3. Flux complet
mermaid
sequenceDiagram
autonumber
participant U as 👤 Utilisateur
participant F as 🖥️ Front Upload
participant API as 🧠 API NestJS
participant DB as 🗄️ prisma.tool
participant A as 👤 Admin
U->>F: Dépose un fichier
F->>API: POST /documents multipart/form-data
API->>DB: documents.create + users_documents.create(user_id)
DB-->>API: document créé
API-->>F: uuid, name, size, created_at
A->>F: Ouvre /admin/folders/:uuid
F->>API: GET /folders/:uuid/documents
API->>DB: documents WHERE folder_id + users_documents.user
DB-->>API: documents + depositor simple
API-->>F: [{uuid, name, size, created_at, depositor}]
F-->>A: Affiche "Déposé par ..."4. Périmètre fonctionnel
Backend
| Fichier | Rôle |
|---|---|
back/src/api/documents/document.service.ts | Crée la liaison users_documents lors du dépôt |
back/src/api/documents/document-access-policy.service.ts | Charge le déposant simple dans la liste des documents accessibles |
back/src/api/documents/document.presenter.ts | Transforme users_documents.user en champ depositor |
back/src/api/folders/folder.service.ts | Charge le déposant dans findDocuments pour la vue admin d'un dossier |
Frontend
| Fichier | Rôle |
|---|---|
front/src/components/documents/DocumentListItem.vue | Affiche le déposant si showDepositor est actif, avec fallback |
front/src/pages/admin/folders/AdminFolderDetailPage.vue | Active showDepositor dans la vue admin d'un dossier |
front/src/pages/upload/UploadPage.vue | N'active pas showDepositor dans la liste standard des fichiers déposés |
5. Contrats API
Dépôt
http
POST /documents
X-App-Access-Token: <app_access_token>
Content-Type: multipart/form-dataLe service crée le document et conserve la liaison avec l'utilisateur connecté :
ts
users_documents: {
create: {
user_id: user.id;
}
}Consultation admin des fichiers d'un dossier
http
GET /folders/:uuid/documents
X-App-Access-Token: <app_access_token>Réponse :
json
[
{
"uuid": "11111111-1111-4111-8111-111111111111",
"name": "rapport-client.csv",
"size": 15432,
"created_at": "2026-04-16T08:12:00.000Z",
"depositor": {
"id": 7,
"firstname": "Jean",
"lastname": "Dupont",
"email": "[email protected]"
}
}
]Si le déposant ne peut pas être résolu, depositor vaut null.
Décision sécurité
La liste standard GET /documents ne retourne pas le champ depositor aux utilisateurs non-admin. Le déposant est exposé uniquement pour les rôles admin/super-admin ou via les endpoints admin protégés comme GET /folders/:uuid/documents.
6. Affichage UI
- Dans
/admin/folders/:uuid, chaque ligne de fichier affiche une information discrète :Déposé par Jean DupontDéposé par [email protected]si le nom est absentDéposé par utilisateur inconnusi aucune information n'est exploitable
- Dans
/upload, la liste standard des fichiers déposés n'affiche pas le déposant.
7. Points de vérification
- Un upload crée toujours une ligne
users_documentspour le déposant. GET /folders/:uuid/documentsretournedepositor.firstname,depositor.lastname,depositor.emailsi disponibles.GET /documentsne retourne pasdepositorpour un utilisateur standard.- La vue admin dossier active
showDepositor. - La liste standard
/uploadne passe passhowDepositor. - Le fallback
utilisateur inconnuest affiché si le déposant est absent. - Aucun changement n'est nécessaire sur les droits d'accès : les endpoints admin restent protégés par
AuthGuard+AdminGuard.
8. Tests associés
Backend
back/src/api/documents/document.service.spec.ts— conservation du lienusers_documents, transformationdepositor, casnullback/src/api/folders/folder.service.spec.ts—findDocumentsretourne le déposant simple et le fallbacknull
Frontend
front/src/__tests__/components/documents/DocumentListItem.spec.js— affichage nom, email, fallback et masquage horsshowDepositorfront/src/__tests__/pages/admin/folders/AdminFolderDetailPage.spec.js— activation deshowDepositordans la vue admin dossier
