QrCodeController
Cria QR Codes vinculados a uma safra e consulta os dados da safra por meio do código. Todas as requisições exigem X-API-ACCESS-KEY e X-API-SECRET-KEY.
POST /qrcode
Cria o QR Code e retorna a imagem PNG diretamente. O QR Code contém a URL HTTPS /qrcode/codigo/{codigo}. O código tem 50 caracteres alfanuméricos, o QR Code é criado como ativo e a validade padrão é de um mês.
curl --request POST \
--url https://<url>/qrcode \
--header 'X-API-ACCESS-KEY: <chave_de_acesso>' \
--header 'X-API-SECRET-KEY: <chave_de_seguranca>' \
--header 'Content-Type: application/json' \
--data '{
"safraId": "<id_safra>",
"etapaId": "<id_etapa_opcional>",
"validate": "2026-02-15T23:59:59"
}' \
--output qrcode.png
validate usa o formato ISO LocalDateTime (yyyy-MM-dd'T'HH:mm:ss). Se for informado, substitui a validade padrão. A resposta é 200 OK, com Content-Type: image/png, dimensão 250x250 e sem corpo JSON.
GET /qrcode/codigo/{codigo}
Valida o código e retorna a consulta completa da safra. O QR Code é rejeitado quando não existe, não possui safra, está expirado, está inativo ou quando a safra vinculada não é encontrada.
{
"safra": {
"id": "<id_safra>",
"codigo": "<codigo_safra>",
"descricao": "<descricao>",
"cultura": "<cultura>",
"conformidades": ["DDS", "RC"],
"propriedade": {},
"produtores": [],
"proprietarios": []
},
"fases": {
"planoCultivo": [
{
"id": "<id_registro>",
"safraId": "<id_safra>",
"safraCodigo": "<codigo_safra>",
"faseClazz": "<fase>",
"dados": {}
}
]
}
}
Quando o QR Code possui etapaId, a resposta é filtrada para incluir somente as fases permitidas pela etapa do café.
GET /qrcode
Lista os QR Codes da API Key autenticada em uma página. Parâmetros opcionais: page, size (padrão 10) e sort.
Cada item contém id, codigo, apiKey, safraId, etapaId, active, createdAt, lastUsed e validate. O secretKey da API Key não é serializado.
PUT /qrcode
Atualiza somente active e/ou validate do QR Code.
{
"id": 1,
"active": false,
"validate": "2026-03-15T23:59:59"
}
id é obrigatório. O retorno é 200 OK sem corpo.
DELETE /qrcode/{id}
Exclui o QR Code pelo ID numérico (Long) e retorna 200 OK sem corpo.
Não existe endpoint ativo GET /qrcode/{id}; a consulta pública é feita por GET /qrcode/codigo/{codigo}.