Pular para o conteúdo principal

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

HeaderValorObrigatorio
AuthorizationBearer {token}Sim
Content-Typeapplication/jsonSim

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 campoValor vazioResultado
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\}/update para atualizacoes complexas
  • As relacoes (region, secteur) sao expressas em IRI
  • As modificacoes sao registadas no historico de auditoria
  • O campo updatedAt e atualizado automaticamente