Aller au contenu principal

CRUD Community Workers

Cette page documente les operations de creation, lecture, mise a jour et suppression des Community Workers.


Liste des Community Workers​

Endpoint​

GET /api/community-workers

Parametres de requete​

ParametreTypeRequisDescription
pageintNonNumero de page (defaut: 1)
limitintNonElements par page (defaut: 20)
searchstringNonRecherche par nom, prenom, code ou telephone
statutstringNonFiltrer par statut
regionUUIDNonFiltrer par region
secteurUUIDNonFiltrer par secteur
localiteUUIDNonFiltrer par localite
typeContratstringNonvolontaire ou contractuel
sexestringNonM ou F

Reponse​

{
"success": true,
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"code": "CW-OIO-00001",
"nomComplet": "Fatou Sane",
"prenom": "Fatou",
"nom": "Sane",
"sexe": "F",
"telephone": "+245955123456",
"typeContrat": "volontaire",
"statut": "actif",
"dateRecrutement": "2025-01-15",
"region": {"id": "...", "nom": "Oio"},
"secteur": {"id": "...", "nom": "Farim"},
"localite": {"id": "...", "nom": "Farim Centro"}
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 150,
"pages": 8
}
}

Detail d'un Community Worker​

Endpoint​

GET /api/community-workers/{id}

Reponse​

{
"success": true,
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"code": "CW-OIO-00001",
"prenom": "Fatou",
"nom": "Sane",
"nomComplet": "Fatou Sane",
"sexe": "F",
"dateNaissance": "1990-05-10",
"lieuNaissance": "Farim",
"age": 36,
"telephone": "+245955123456",
"email": "fatou.sane@example.com",
"niveauInstruction": "secondaire",
"pieceIdentite": "carte_identite",
"numeroPieceIdentite": "GB123456",
"adresse": "Quartier Central, Farim",
"languePrincipale": "crioulo",
"languesSecondaires": ["portugais", "fula"],
"typeContrat": "volontaire",
"dateRecrutement": "2025-01-15",
"dateFinContrat": null,
"statut": "actif",
"photo": "photos/CW-OIO-00001_abc123.jpg",
"region": {"id": "...", "nom": "Oio"},
"secteur": {"id": "...", "nom": "Farim"},
"localite": {"id": "...", "nom": "Farim Centro"},
"superviseur": {
"id": "...",
"nomComplet": "Mamadou Diallo"
},
"affectationActuelle": {
"id": "...",
"zone": "Oio > Farim > Farim Centro",
"dateDebut": "2025-01-15"
},
"nbRapportsValides": 45,
"tauxValidation": 92.5,
"nbCertificationsValides": 3,
"derniereNote": "A",
"dernierRapport": "2026-06-10",
"derniereEvaluation": "2026-03-15",
"joursDepuisDerniereEvaluation": 88,
"prochaineCertificationExpire": {
"formation": "Sensibilisation VBG",
"dateExpiration": "2026-09-15",
"joursRestants": 95
},
"createdAt": "2025-01-15T10:00:00+00:00",
"updatedAt": "2026-06-10T14:30:00+00:00"
}
}

Creer un Community Worker​

Endpoint​

POST /api/community-workers

Corps de la requete​

{
"prenom": "Fatou",
"nom": "Sane",
"sexe": "F",
"dateNaissance": "1990-05-10",
"lieuNaissance": "Farim",
"telephone": "+245955123456",
"email": "fatou.sane@example.com",
"niveauInstruction": "secondaire",
"pieceIdentite": "carte_identite",
"numeroPieceIdentite": "GB123456",
"adresse": "Quartier Central, Farim",
"languePrincipale": "crioulo",
"languesSecondaires": ["portugais", "fula"],
"typeContrat": "volontaire",
"dateRecrutement": "2025-01-15",
"statut": "actif",
"regionId": "550e8400-e29b-41d4-a716-446655440001",
"secteurId": "550e8400-e29b-41d4-a716-446655440002",
"localiteId": "550e8400-e29b-41d4-a716-446655440003",
"superviseurId": "550e8400-e29b-41d4-a716-446655440004"
}

Champs requis​

  • prenom : Prenom du community worker
  • nom : Nom du community worker

Comportement​

  1. Un code unique est genere automatiquement (format: CW-{REGION_CODE}-{SEQUENCE})
  2. Si une region/secteur/localite est renseignee, une affectation initiale est creee automatiquement
  3. La date de debut de l'affectation est la date de recrutement (ou aujourd'hui si non renseignee)

Reponse (201 Created)​

{
"success": true,
"data": { ... },
"message": "Community Worker cree avec succes"
}

Modifier un Community Worker​

Endpoint​

PUT /api/community-workers/{id}
PATCH /api/community-workers/{id}

Corps de la requete​

Tous les champs sont optionnels. Seuls les champs envoyes sont mis a jour.

{
"telephone": "+245955999888",
"statut": "suspendu",
"typeContrat": "contractuel"
}

Reponse​

{
"success": true,
"data": { ... },
"message": "Community Worker mis a jour"
}

Supprimer un Community Worker​

Endpoint​

DELETE /api/community-workers/{id}

Reponse​

{
"success": true,
"message": "Community Worker supprime"
}
Attention

La suppression est definitive et entraine la suppression de toutes les donnees associees (affectations, rapports d'activite, certifications, evaluations, fiches de paiement).


Modification en masse du statut​

Endpoint​

POST /api/community-workers/bulk-status

Corps de la requete​

{
"ids": [
"550e8400-e29b-41d4-a716-446655440001",
"550e8400-e29b-41d4-a716-446655440002"
],
"statut": "suspendu"
}

Statuts valides​

  • actif
  • suspendu
  • inactif

Reponse​

{
"success": true,
"message": "10 community workers mis a jour",
"count": 10
}

Verifier les doublons​

Endpoint​

POST /api/community-workers/check-duplicates

Corps de la requete​

{
"nom": "Sane",
"prenom": "Fatou",
"telephone": "+245955123456",
"excludeId": "550e8400-e29b-41d4-a716-446655440000"
}

Reponse​

{
"success": true,
"data": [
{
"id": "...",
"code": "CW-OIO-00005",
"nomComplet": "Fatou Sane",
"telephone": "+245955123456",
"statut": "actif"
}
],
"hasDuplicates": true
}

Utilisation​

Cette fonction est appelee automatiquement avant la creation pour avertir l'utilisateur de doublons potentiels.


Upload de photo​

Endpoint​

POST /api/community-workers/{id}/photo

Format de la requete​

Utiliser multipart/form-data avec le champ photo.

Parametres​

ParametreTypeRequisDescription
photofileOuiFichier image

Formats acceptes​

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

Limites​

  • Taille maximale : 5 Mo
  • Dimensions recommandees : 400x400 pixels

Reponse​

{
"success": true,
"data": {
"photo": "photos/cw_abc123.jpg",
"photoUrl": "/api/photos/cw_abc123.jpg?_expiration=1767225600&_hash=…"
},
"message": "Photo uploadée avec succès"
}

Exemple cURL​

curl -X POST "https://api.example.com/api/community-workers/{id}/photo" \
-H "Authorization: Bearer <token>" \
-F "photo=@/path/to/photo.jpg"

Supprimer la photo​

DELETE /api/community-workers/{id}/photo

Réponse : { "success": true, "message": "Photo supprimée" }.


Photos de la pièce d'identité (recto / verso)​

MéthodeEndpointDescription
POST/api/community-workers/{id}/photo-document/{face}Téléverse la face recto ou verso (champ multipart photo)
DELETE/api/community-workers/{id}/photo-document/{face}Supprime cette face

Mêmes formats et même limite (5 Mo) que la photo de profil. Un nouvel envoi remplace l'ancien fichier.

{
"success": true,
"data": {
"face": "recto",
"photoDocument": "photos/document-recto-abc123.jpg",
"photoDocumentUrl": "/api/photos/document-recto-abc123.jpg?_expiration=…&_hash=…"
},
"message": "Photo du document enregistrée"
}

Le détail de l'agent expose photoDocumentRectoUrl et photoDocumentVersoUrl.

URL signées​

Les champs …Url pointent vers /api/photos/…. Ces routes ne demandent pas de jeton (une balise <img> n'en envoie pas) mais exigent la signature _hash / _expiration ajoutée par l'API, valable 12 heures. Un lien modifié ou périmé renvoie 403 ; il faut relire la ressource pour obtenir un lien neuf. Voir Photos.


Export des Community Workers​

MéthodeEndpointDescription
GET/api/export/community-workersDonnées d'export en JSON
GET/api/export/community-workers/fileFichier Excel (format=excel, par défaut) ou CSV (format=csv)

Parametres de requete​

ParametreDescription
searchRecherche texte
statutStatut de l'agent
region, secteur, localiteFiltres géographiques (UUID)
typeContratType de contrat
sexeM ou F
formatexcel ou csv (route /file seulement)

Exemple cURL​

curl "https://sig.example.com/api/export/community-workers/file?format=excel&region=<uuid>" \
-H "Authorization: Bearer <token>" \
-o community_workers.xlsx