/feira-api

Primary LanguageGoMIT LicenseMIT

FEIRA-API

golang sqllite

Menu

Visão Geral

Este projeto visa carregar informações das feiras públicas disponibilizadas no formato CSV pela Prefeitura de São Paulo, e alimentar um banco de dados em memória (SQL Lite) para simular um fluxo de CRUD com os recursos: GET, POST, PUT e DELETE.

Architectural Decision Record (ADR)

1. Atributos de Estruturas de Dados e Documentação em Português

2. Banco de Dados em Memória (SQL Lite) para Gerenciamento de Feiras

3. Layout de Estrutura de Pasta e Arquitetura de Software

4. Testes focados no core da aplicação e percentual de cobertura de testes

5. Desnormalização da tabela de feiras livres

Requisitos

Como executar

Seguir os comandos abaixo:

  1. Clone do projeto através do Git
git clone https://github.com/jeffersonto/feira-api.git
  1. Na pasta raiz do projeto, executar a integração das dependências:
go mod tidy
  1. Executar o run do GO
go run github.com/jeffersonto/feira-api/cmd

Ou abrir o projeto em sua IDE preferida e executá-lo através de atalhos disponíveis.

O arquivo de feira será importado automaticamente a cada execução da aplicação, não sendo necessário quaisquer passos adicionais.

Testes

Para acessar o coverage clique aqui

Para execução dos testes com cobertura, na pasta raiz do projeto, seguir os passos:

  1. Executar o go test
go test -v -coverprofile cover.out ./...
  1. Executar o go tool cover
go tool cover -html cover.out -o cover.html
  1. Abrir o cover.html no seu navegador de preferência.

Principais End-Points e Retornos

Swagger - http://localhost:8080/swagger/index.html

  • Verifica se a aplicação está em execução (Ping)
curl --location --request GET 'http://localhost:8080/ping'

200 - Ok: busca realizada com registros

  • Busca uma feira por ID
curl --location --request GET 'http://localhost:8080/v1/feiras/1'

200 - Ok: busca realizada com registros

204 - No Content: busca realizada sem registros

400 - Bad Request: path parameter inválido

500 - Internal Server Error: erro desconhecido na busca dos dados

  • Busca feiras Por Query Params
curl --location --request GET 'http://localhost:8080/v1/feiras?bairro=VL FORMOSA'
Parameters Type
distrito string
regiao5 string
nomeFeira string
bairro string

200 - Ok: busca realizada com registros

204 - No Content: busca realizada sem registros

400 - Bad Request: query parameter inválido

500 - Internal Server Error: erro desconhecido na busca dos dados

  • Busca todas as feiras
curl --location --request GET 'http://localhost:8080/v1/feiras''

200 - Ok: busca realizada com registros

204 - No Content: busca realizada sem registros

500 - Internal Server Error: erro desconhecido na busca dos dados

  • Cria uma Nova Feira
curl --location --request POST 'http://localhost:8080/v1/feiras' \
--header 'Content-Type: application/json' \
--data-raw '{
    "longitude": -46550164,
    "latitude": -23558733,
    "setor_censitario": 355030885000091,
    "area_ponderacao": 3550308005040,
    "codigo_ibge": "87",
    "distrito": "VILA FORMOSA",
    "codigo_subprefeitura": 26,
    "subprefeitura": "ARICANDUVA-FORMOSA-CARRAO",
    "regiao5": "Leste",
    "regiao8": "Leste 1",
    "nome_feira": "VILA FORMOSA",
    "registro": "4041-0",
    "logradouro": "RUA MARAGOJIPE",
    "numero": "S/N",
    "bairro": "VL FORMOSA",
    "referencia": "TV RUA PRETORIA"
}'

O novo recurso gerado será retornado no header location

Exemplo:

content-length: 0
content-type: application/json
date: Mon,19 Sep 2022 13:22:26 GMT
location: http://localhost:8080/v1/feiras/881

201 - Created: novo registro criado com sucesso

400 - Bad Request: body passado incorretamente

500 - Internal Server Error: erro desconhecido na busca dos dados

  • Atualiza uma Feira
curl --location --request PUT 'http://localhost:8080/v1/feiras/1' \
--header 'Content-Type: application/json' \
--data-raw '{
    "longitude": -46550164,
    "latitude": -23558733,
    "setor_censitario": 355030885000091,
    "area_ponderacao": 3550308005040,
    "codigo_ibge": "87",
    "distrito": "VILA FORMOSA",
    "codigo_subprefeitura": 26,
    "subprefeitura": "ARICANDUVA-FORMOSA-CARRAO",
    "regiao5": "Leste",
    "regiao8": "Leste 1",
    "nome_feira": "VILA FORMOSA",
    "registro": "4041-0",
    "logradouro": "RUA MARAGOJIPE",
    "numero": "S/N",
    "bairro": "VL FORMOSA",
    "referencia": "TV RUA PRETORIA - 3"
}'

200 - Ok

204 - No Content: não foi encontrado registro para atualizar

400 - Bad Request: body ou path parameter passado incorretamente

500 - Internal Server Error: erro desconhecido na busca dos dados

  • Deleta uma Feira por ID
curl --location --request DELETE 'http://localhost:8080/v1/feiras/1'

204 - No Content: deleção executada corretamente ou não houve afetação por ausência do dado

404 - Bad Request: path parameter inválido

500 - Internal Server Error: erro desconhecido na busca dos dado

Collection Postman

No link abaixo será possível fazer o download da collection do Postman para facilitar as chamadas dos end-points:

Feita-Api Collection Postman

Débitos Técnicos

  • Implementação de cache
  • Atualização de feiras por Patch

Licença

The MIT License (MIT)

Autor