Aller au contenu principal

PUT /api/menages/{id}

Modifie un ménage existant.

Endpoints

Deux endpoints sont disponibles :

PUT /api/menages/{id}
POST /api/menages/{id}/update
remarque

L'endpoint POST /api/menages/\{id\}/update est recommandé car il évite certains conflits avec API Platform pour les mises à jour complexes.

Headers

HeaderValeurRequis
AuthorizationBearer {token}Oui
Content-Typeapplication/jsonOui

Corps de la requête

Envoyez uniquement les champs à modifier :

{
"tailleMenage": 6,
"latitude": "14.7200",
"longitude": "-17.4700",
"chefMenage": {
"telephone": "771234568",
"numeroMobileMoney": "771234568"
},
"logement": {
"nbPieces": 5,
"sourceEau": "puits"
}
}

Réponse succès

Code: 200 OK

{
"@context": "/api/contexts/Menage",
"@id": "/api/menages/1",
"@type": "Menage",
"id": 1,
"codeMenage": "MEN-2024-00001",
"tailleMenage": 6,
"statut": "actif",
"chefMenage": {
"@id": "/api/chef_menages/1",
"nomComplet": "Mamadou Diallo",
"telephone": "771234568"
},
"updatedAt": "2024-01-20T14:15:00+00:00"
}

Réponses erreur

404 Not Found

{
"@context": "/api/contexts/Error",
"@type": "hydra:Error",
"hydra:title": "An error occurred",
"hydra:description": "Item not found"
}

422 Unprocessable Entity

{
"@context": "/api/contexts/ConstraintViolationList",
"@type": "ConstraintViolationList",
"violations": [
{
"propertyPath": "tailleMenage",
"message": "This value should be positive."
}
]
}

403 Forbidden

{
"@context": "/api/contexts/Error",
"@type": "hydra:Error",
"hydra:description": "Access Denied."
}

Exemples

cURL - PUT standard

curl -X PUT https://sig.ucp-pch.org/api/menages/1 \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-d '{
"tailleMenage": 6,
"chefMenage": {
"telephone": "771234568"
}
}'

cURL - POST /update (recommandé)

curl -X POST https://sig.ucp-pch.org/api/menages/1/update \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-d '{
"tailleMenage": 6,
"latitude": "14.7200",
"longitude": "-17.4700",
"chefMenage": {
"telephone": "771234568",
"age": 46
},
"logement": {
"nbPieces": 5
}
}'

JavaScript

const updateMenage = async (id, data) => {
const response = await fetch(
`https://sig.ucp-pch.org/api/menages/${id}/update`,
{
method: 'POST',
headers: {
'Authorization': `Bearer ${localStorage.getItem('token')}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
}
);

if (response.status === 404) {
throw new Error('Ménage non trouvé');
}

if (response.status === 422) {
const errors = await response.json();
throw new Error(errors['hydra:description']);
}

return response.json();
};

// Utilisation
const updated = await updateMenage(1, {
tailleMenage: 6,
chefMenage: {
telephone: '771234568'
}
});

console.log(`Modifié: ${updated.codeMenage}`);

Python

import requests

def update_menage(token, menage_id, data):
response = requests.post(
f'https://sig.ucp-pch.org/api/menages/{menage_id}/update',
headers={
'Authorization': f'Bearer {token}',
'Content-Type': 'application/json'
},
json=data
)

if response.status_code == 404:
raise Exception('Ménage non trouvé')

if response.status_code == 422:
raise Exception(response.json()['hydra:description'])

response.raise_for_status()
return response.json()

# Utilisation
menage = update_menage(token, 1, {
'tailleMenage': 6,
'chefMenage': {
'telephone': '771234568'
}
})

Gestion des valeurs vides

Les chaînes vides sont converties automatiquement :

Type de champValeur videRésultat
Champs décimaux (GPS)""null
Entiers nullables""null
Entiers non-nullables""0
tailleMenage""Erreur (requis > 0)

Exemple

{
"latitude": "",
"longitude": "",
"chefMenage": {
"age": ""
}
}

Résultat : latitude = null, longitude = null, age = null

Changer la localisation géographique

curl -X POST https://sig.ucp-pch.org/api/menages/1/update \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-d '{
"region": "/api/regions/2",
"secteur": "/api/secteurs/5",
"commune": "/api/communes/10",
"localite": "/api/localites/25"
}'

Notes

  • Utilisez POST /api/menages/\{id\}/update pour les mises à jour complexes
  • Les relations (region, secteur) s'expriment en IRI
  • Les modifications sont enregistrées dans l'historique d'audit
  • Le champ updatedAt est mis à jour automatiquement