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
| Parametre | Type | Requis | Description |
|---|---|---|---|
page | int | Non | Numero de page (defaut: 1) |
limit | int | Non | Elements par page (defaut: 20) |
search | string | Non | Recherche par nom, prenom, code ou telephone |
statut | string | Non | Filtrer par statut |
region | UUID | Non | Filtrer par region |
secteur | UUID | Non | Filtrer par secteur |
localite | UUID | Non | Filtrer par localite |
typeContrat | string | Non | volontaire ou contractuel |
sexe | string | Non | M 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 workernom: Nom du community worker
Comportement
- Un code unique est genere automatiquement (format:
CW-{REGION_CODE}-{SEQUENCE}) - Si une region/secteur/localite est renseignee, une affectation initiale est creee automatiquement
- 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"
}
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
actifsuspenduinactif
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
| Parametre | Type | Requis | Description |
|---|---|---|---|
photo | file | Oui | Fichier image |
Formats acceptes
| Format | Extension | MIME Type |
|---|---|---|
| JPEG | .jpg, .jpeg | image/jpeg |
| PNG | .png | image/png |
| GIF | .gif | image/gif |
| WebP | .webp | image/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éthode | Endpoint | Description |
|---|---|---|
| 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éthode | Endpoint | Description |
|---|---|---|
| GET | /api/export/community-workers | Données d'export en JSON |
| GET | /api/export/community-workers/file | Fichier Excel (format=excel, par défaut) ou CSV (format=csv) |
Parametres de requete
| Parametre | Description |
|---|---|
search | Recherche texte |
statut | Statut de l'agent |
region, secteur, localite | Filtres géographiques (UUID) |
typeContrat | Type de contrat |
sexe | M ou F |
format | excel ou csv (route /file seulement) |
Exemple cURL
curl "https://sig.example.com/api/export/community-workers/file?format=excel®ion=<uuid>" \
-H "Authorization: Bearer <token>" \
-o community_workers.xlsx