Aller au contenu principal

API Documents des Plaintes

Endpoints pour la gestion des documents attaches aux plaintes.

Endpoints

MethodeEndpointDescription
GET/api/plaintes/{id}/documentsListe des documents
POST/api/plaintes/{id}/documentsAjouter un document
GET/api/plaintes/{id}/documents/{docId}Detail d'un document
GET/api/plaintes/{id}/documents/{docId}/downloadTelecharger
DELETE/api/plaintes/{id}/documents/{docId}Supprimer

Liste des documents

GET /api/plaintes/{id}/documents

Parametres

ParametreTypeDescription
typestringFiltrer par type
includeConfidentialboolInclure 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)

ChampTypeObligatoireDescription
filefileOuiLe fichier a uploader
typestringOuiType de document
descriptionstringNonDescription
estConfidentielboolNonMarquer comme confidentiel

Types valides

TypeDescription
justificatifPiece justificative
photoImage ou capture
rapportDocument de synthese
autreDocument 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

FormatExtensionMIME Type
JPEG.jpg, .jpegimage/jpeg
PNG.pngimage/png
GIF.gifimage/gif
WebP.webpimage/webp

Documents

FormatExtensionMIME Type
PDF.pdfapplication/pdf
Word.docapplication/msword
Word.docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document
Excel.xlsapplication/vnd.ms-excel
Excel.xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Texte.txttext/plain

Limites

LimiteValeur
Taille max par fichier10 Mo
Total par plainte50 Mo
Nombre max de fichiers20

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

CodeDescription
400Requete invalide (format fichier)
401Non authentifie
403Permission refusee
404Plainte ou document non trouve
413Fichier trop volumineux
422Type de document invalide
507Quota de stockage depasse

Permissions

ActionPermission
Voir les documentsplaintes.view
Voir les confidentielsplaintes.view_confidential ou superviseur
Ajouter un documentplaintes.document_upload
Telechargerplaintes.view
SupprimerUploader ou superviseur