Skip to content

mikaelmessias-lab/nlw-ecoleta-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NLW Ecoleta - Backend

GitHub issues GitHub forks GitHub stars GitHub license

O Ecoleta é um projeto desenvolvido durante a primeira edição da Next Level Week voltado para fins ecológicos, servindo como uma conexão entre empresas e entidades que coletam resíduos orgânicos ou inorgânicos às pessoas que precisam descartar esses resíduos. O backend foi desenvolvido para atender as demandas tanto do frontend quanto do mobile.

Começando

O backend foi desenvolvido utilizando Knex como query builder, permitindo que o banco de dados utilizado (SQLite 3) possa facilmente ser migrado. As instruções para instalar e executar a API em ambiente de desenvolviment estão descritas a seguir.

Pré-requisitos

Para começar a utilizar a API, é necessário instalar as dependências do Node:

npm install

Instalação

Primeiramente, execute os scripts do Knex para migrates e seeds:

npm run knex:migrate
npm run knex:seed

Em seguida, execute o script para iniciar a API:

npm run start

Pronto! Agora bastar acessar o endereço http://localhost:3333 para começar a usar.

Endpoints

O Ecoleta possui duas entidades: Items e Points. Os Items são os resíduos orgânicos e inorgânicos que podem ser coletados, e estes são cadastrados através do script de seeds do Knex. Os Points são os pontos de coletas que fazem a coleta dos itens. A seguir segue a descrição dos endpoints das entidades para listagem e/ou cadastro de instâncias.

Items

O único endpoint de Items é acessado através da rota /items por uma requisição GET. Esse endpoint é uma rota de listagem de todos os items e não recebe nenhum tipo de parâmetro. Seu retorno é um JSON do tipo:

[
  {
    "id": 1,
    "title": "Lâmpadas",
    "image_url": "http://localhost:3333/uploads/lampadas.svg"
  },
  ...
]

Points

Existem três endpoints disponíveis para Points.

Criação

O endpoint de criação pode ser acessado pela url /points através de uma requisição POST. No exemplo a seguir é possível visualizar os dados que precisam ser enviados através do body da requisição. Note que em items são armazenados os IDs dos itens que aquele ponto de coleta recolhe:

{
  "name": "Mercado Pão de Mel",
  "email": "contato@paodemel.com.br",
  "whatsapp": "1122487513",
  "latitude": "-21.56498765",
  "longitude": "25.12548561",
  "city": "São Paulo",
  "uf": "SP",
  "items": [
    1,
    2,
    3
  ]
}

Caso a requisição seja realizada com sucesso, um JSON é retornado como a seguir:

{
  "id": 1,
  "name": "Mercado Pão de Mel",
  "email": "contato@paodemel.com.br",
  ...
}
Listagem única

O endpoint de listagem única é acessado através de uma requisição GET para a url /points/:id, onde :id é o id do ponto de coleta que se deseja listar. O retorno é um JSON como exemplificado a seguir:

{
  "point": {
    "id": 1,
    "name": "Mercado Pão de Mel",
    "email": "contato@paodemel.com.br",
    ...
  },
  "items": [
    {
      "title": "Lâmpadas"
    },
    ...
  ]
}

Note que o título de todos os itens cadastrados aqui são retornados junto com as informações do ponto de coleta.

Listagem múltipla com filtros

A listagem múltipla com filtros pode ser acessada através da url /points por meio de uma requisição GET. Os filtros devem ser enviados através de query params, e atualmente existem três disponíveis: city, uf, items. Por exemplo, uma requisição com o query param items = 1,2,3 (os IDs dos itens) tem o seguinte retorno:

[
  {
    "id": 1,
    "name": "Mercado Pão de Mel",
    "email": "contato@paodemel.com.br",
    ...
  },
  {
    "id": 2,
    "name": "Mercado Imperatriz",
    "email": "contato@imperatriz.com.br",
    ...
  },
]

Ferramentas

Ferramentas utilizadas para construção do sistema.

  • Node.js - Ambiente de execução JavaScript server-side.
  • Typescript - Superconjunto tipado do JavaScript.
  • Express - Framework para criação de API's do Node.js.
  • SQLite 3 - Biblioteca da linguagem C que implementa um motor pequeno, rápido, independente, de alta confiabilidade e completo para banco de dados SQL.
  • Knex - Query builder SQL flexível, portável e divertido de usar para Postgres, MSSQL, MySQL, MariaDB, SQLite3, Oracle, e Amazon Redshift.

Autores

  • Mikael Messias - Desenvolvedor frontend - Github

Licença

Esse projeto está licenciado sob a licença GNU v3.0 - veja o arquivo LICENSE.md para mais detalhes.

Agradecimentos