PUT /api/menages/{id}
Modifica um agregado familiar existente.
Endpoints
Dois endpoints estao disponiveis:
PUT /api/menages/{id}
POST /api/menages/{id}/update
observação
O endpoint POST /api/menages/\{id\}/update e recomendado porque evita certos conflitos com o API Platform para atualizacoes complexas.
Headers
| Header | Valor | Obrigatorio |
|---|---|---|
| Authorization | Bearer {token} | Sim |
| Content-Type | application/json | Sim |
Corpo da requisicao
Envie apenas os campos a modificar:
{
"tailleMenage": 6,
"latitude": "14.7200",
"longitude": "-17.4700",
"chefMenage": {
"telephone": "771234568",
"numeroMobileMoney": "771234568"
},
"logement": {
"nbPieces": 5,
"sourceEau": "puits"
}
}
Resposta de sucesso
Codigo: 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"
}
Respostas de erro
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."
}
Exemplos
cURL - PUT padrao
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 (recomendado)
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('Agregado familiar nao encontrado');
}
if (response.status === 422) {
const errors = await response.json();
throw new Error(errors['hydra:description']);
}
return response.json();
};
// Utilizacao
const updated = await updateMenage(1, {
tailleMenage: 6,
chefMenage: {
telephone: '771234568'
}
});
console.log(`Modificado: ${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('Agregado familiar nao encontrado')
if response.status_code == 422:
raise Exception(response.json()['hydra:description'])
response.raise_for_status()
return response.json()
# Utilizacao
menage = update_menage(token, 1, {
'tailleMenage': 6,
'chefMenage': {
'telephone': '771234568'
}
})
Gestao de valores vazios
As cadeias vazias sao convertidas automaticamente:
| Tipo de campo | Valor vazio | Resultado |
|---|---|---|
| Campos decimais (GPS) | "" | null |
| Inteiros nulaveis | "" | null |
| Inteiros nao nulaveis | "" | 0 |
tailleMenage | "" | Erro (obrigatorio > 0) |
Exemplo
{
"latitude": "",
"longitude": "",
"chefMenage": {
"age": ""
}
}
Resultado: latitude = null, longitude = null, age = null
Alterar a localizacao geografica
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"
}'
Notas
- Utilize
POST /api/menages/\{id\}/updatepara atualizacoes complexas - As relacoes (region, secteur) sao expressas em IRI
- As modificacoes sao registadas no historico de auditoria
- O campo
updatedAte atualizado automaticamente