API Documents des Plaintes
Endpoints pour la gestion des documents attaches aux plaintes.
Endpoints
| Methode | Endpoint | Description |
|---|---|---|
| GET | /api/plaintes/{id}/documents | Liste des documents |
| POST | /api/plaintes/{id}/documents | Ajouter un document |
| GET | /api/plaintes/{id}/documents/{docId} | Detail d'un document |
| GET | /api/plaintes/{id}/documents/{docId}/download | Telecharger |
| DELETE | /api/plaintes/{id}/documents/{docId} | Supprimer |
Liste des documents
GET /api/plaintes/{id}/documents
Parametres
| Parametre | Type | Description |
|---|---|---|
type | string | Filtrer par type |
includeConfidential | bool | Inclure les confidentiels |
Exemple
curl "https://sig.ucp-pch.org/api/plaintes/550e8400-e29b-41d4-a716-446655440000/documents" \
-H "Authorization: Bearer TOKEN"
Reponse
{
"success": true,
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440001",
"nomFichier": "recu_paiement.pdf",
"type": "justificatif",
"description": "Recu du paiement conteste",
"tailleFichier": 125678,
"tailleFormatee": "122.7 Ko",
"mimeType": "application/pdf",
"estConfidentiel": false,
"uploadedBy": {
"id": 1,
"nom": "M. Mendes"
},
"createdAt": "2026-03-15T10:30:00+00:00"
},
{
"id": "550e8400-e29b-41d4-a716-446655440002",
"nomFichier": "photo_terrain.jpg",
"type": "photo",
"description": "Photo de la situation",
"tailleFichier": 2456789,
"tailleFormatee": "2.3 Mo",
"mimeType": "image/jpeg",
"estConfidentiel": false,
"thumbnailUrl": "/api/plaintes/.../documents/.../thumbnail",
"createdAt": "2026-03-15T11:00:00+00:00"
}
]
}
Ajouter un document
POST /api/plaintes/{id}/documents
Content-Type: multipart/form-data
Corps de requete (FormData)
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
file | file | Oui | Le fichier a uploader |
type | string | Oui | Type de document |
description | string | Non | Description |
estConfidentiel | bool | Non | Marquer comme confidentiel |
Types valides
| Type | Description |
|---|---|
justificatif | Piece justificative |
photo | Image ou capture |
rapport | Document de synthese |
autre | Document divers |
Exemple cURL
curl -X POST "https://sig.ucp-pch.org/api/plaintes/550e8400.../documents" \
-H "Authorization: Bearer TOKEN" \
-F "file=@/chemin/vers/fichier.pdf" \
-F "type=justificatif" \
-F "description=Recu de paiement" \
-F "estConfidentiel=false"
Exemple JavaScript
const formData = new FormData();
formData.append('file', fileObject);
formData.append('type', 'justificatif');
formData.append('description', 'Recu de paiement');
formData.append('estConfidentiel', 'false');
const response = await fetch(`/api/plaintes/${plainteId}/documents`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`
},
body: formData
});
Reponse
{
"success": true,
"data": {
"id": "550e8400-e29b-41d4-a716-446655440003",
"nomFichier": "recu_paiement.pdf",
"type": "justificatif",
"description": "Recu de paiement",
"tailleFichier": 125678,
"tailleFormatee": "122.7 Ko",
"mimeType": "application/pdf",
"estConfidentiel": false,
"createdAt": "2026-03-15T14:00:00+00:00"
}
}
Formats acceptes
Images
| Format | Extension | MIME Type |
|---|---|---|
| JPEG | .jpg, .jpeg | image/jpeg |
| PNG | .png | image/png |
| GIF | .gif | image/gif |
| WebP | .webp | image/webp |
Documents
| Format | Extension | MIME Type |
|---|---|---|
| application/pdf | ||
| Word | .doc | application/msword |
| Word | .docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
| Excel | .xls | application/vnd.ms-excel |
| Excel | .xlsx | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
| Texte | .txt | text/plain |
Limites
| Limite | Valeur |
|---|---|
| Taille max par fichier | 10 Mo |
| Total par plainte | 50 Mo |
| Nombre max de fichiers | 20 |
Detail d'un document
GET /api/plaintes/{id}/documents/{docId}
Reponse
{
"success": true,
"data": {
"id": "550e8400-e29b-41d4-a716-446655440001",
"nomFichier": "recu_paiement.pdf",
"type": "justificatif",
"description": "Recu du paiement conteste",
"tailleFichier": 125678,
"tailleFormatee": "122.7 Ko",
"mimeType": "application/pdf",
"estConfidentiel": false,
"uploadedBy": {
"id": 1,
"nom": "M. Mendes",
"email": "mendes@example.com"
},
"downloadUrl": "/api/plaintes/.../documents/.../download",
"createdAt": "2026-03-15T10:30:00+00:00"
}
}
Telecharger un document
GET /api/plaintes/{id}/documents/{docId}/download
Headers de reponse
Content-Type: application/pdf
Content-Disposition: attachment; filename="recu_paiement.pdf"
Content-Length: 125678
Reponse
Le fichier binaire est retourne directement.
Supprimer un document
DELETE /api/plaintes/{id}/documents/{docId}
Comportement
La suppression est logique (soft delete) :
- Le document est marque comme supprime
- Le fichier est conserve pour audit
- N'apparait plus dans les listes
Reponse
{
"success": true,
"message": "Document supprime"
}
Contraintes
- Seul l'uploader ou un superviseur peut supprimer
- Les documents confidentiels ne peuvent etre supprimes que par un superviseur
Documents confidentiels
Les documents marques comme estConfidentiel: true :
- Ne sont visibles que par les superviseurs
- Affichent une icone de cadenas dans l'interface
- Necessitent une permission speciale pour telecharger
Verifier l'acces
GET /api/plaintes/{id}/documents/{docId}
Retourne 403 si l'utilisateur n'a pas acces aux documents confidentiels.
Codes d'erreur
| Code | Description |
|---|---|
| 400 | Requete invalide (format fichier) |
| 401 | Non authentifie |
| 403 | Permission refusee |
| 404 | Plainte ou document non trouve |
| 413 | Fichier trop volumineux |
| 422 | Type de document invalide |
| 507 | Quota de stockage depasse |
Permissions
| Action | Permission |
|---|---|
| Voir les documents | plaintes.view |
| Voir les confidentiels | plaintes.view_confidential ou superviseur |
| Ajouter un document | plaintes.document_upload |
| Telecharger | plaintes.view |
| Supprimer | Uploader ou superviseur |