Esta API permite a leitura automatizada de medições de água, gás e energia a partir de imagens enviadas em base64. O serviço utiliza a API Gemini para processar as imagens e retornar os valores de medição.
Adicione um arquivo .env
na raiz do projeto com a chave da API do Gemini e os dados para geração e conexão do banco de dados:
GEMINI_API_KEY=
DB_HOST=mysql
DB_PORT=
DB_NAME=
MYSQL_DATABASE=
DB_PASSWORD=
MYSQL_PASSWORD=
DB_USER=
MYSQL_USER=
MYSQL_ROOT_PASSWORD=
Para iniciar o serviço, execute:
docker-compose up --build
Para visualizar a documentação da API acesse Docs após iniciar o projeto.
POST /upload
Este endpoint recebe uma imagem de um medidor (de água ou gás ou energia) em base64, envia a imagem para a API Gemini para leitura, e retorna o valor medido.
Request body:
{
"image": "base64",
"customer_code": "string",
"measure_datetime": "datetime",
"measure_type": "WATER, GAS or ENERGY"
}
Responses:
Status Code | Descrição Resposta | Response body |
---|---|---|
200 | Operação realizada com sucesso | { "image_url": string, "measure_value": integer, "measure_uuid": string } |
400 | Os dados fornecidos no corpo da requisição são inválidos | { "error_code": "INVALID_DATA", "error_description": <descrição do erro> } |
409 | Já existe uma leitura para este tipo no mês atual | { "error_code": "DOUBLE_REPORT", "error_description": "Leitura do mês já realizada" } |
PATCH /confirm
Este endpoint confirma ou corrige o valor lido previamente pela API Gemini.
Request body:
{
"measure_uuid": "string",
"confirmed_value": "integer"
}
Responses:
Status Code | Descrição Resposta | Response body |
---|---|---|
200 | Operação realizada com sucesso | { "success": true } |
400 | Os dados fornecidos no corpo da requisição são inválidos | { "error_code": "INVALID_DATA", "error_description": <descrição do erro> } |
404 | Leitura não encontrada | { "error_code": "MEASURE_NOT_FOUND", "error_description": "Leitura não encontrada" } |
GET /<customer_code>/list
Este endpoint lista todas as medições realizadas por um cliente específico, filtradas pelo tipo de medição (água ou gás).
Uso: {base_url}/<customer_code>/list?measure_type=WATER, GAS or ENERGY
Responses:
Status Code | Descrição Resposta | Response body |
---|---|---|
200 | Operação realizada com sucesso | { "customer_code": string, "measures": [ { "measure_uuid": string, "measure_datetime": datetime, "measure_type": string, "has_confirmed": boolean, "image_url": string }, { "measure_uuid": string, "measure_datetime": datetime, "measure_type": string, "has_confirmed": boolean, "image_url": string } ] } |
400 | Parâmetro measure type diferente de WATER, GAS ou ENERGY | { "error_code": "INVALID_TYPE", "error_description": "Tipo de medição não permitida" } |
controllers/
: Contém os controladores que lidam com as requisições HTTP.models/
: Contém os modelos de dados usados pela aplicação.routes/
: Define as rotas da API.docker-compose.yml
: Arquivo de configuração do Docker Compose para iniciar os serviços.git checkout -b feature/nome-da-sua-feature
).git commit -am 'Adiciona nova feature'
).git push origin feature/nome-da-sua-feature
).Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE para mais detalhes.