Giter VIP home page Giter VIP logo

api-bossa-tools's Introduction

API - VUTTR (Very Useful Tools to Remember)

Acesso a aplicação em produção

http://64.227.106.80:3000

Índice

O que é

Este projeto tem como objetivo atender ao desafio proposto pela BossaBox, onde foi solicitado o desenvolvimento de uma API para a aplicação VUTTR (Very Useful Tools to Remember).

Decidi realizar em NodeJs, com Express e banco de dados MongoDB. Abaixo pode ser visto mais detalhes sobre as bibliotecas utilizadas.

Quais tecnologias foram utilizadas

A API foi desenvolvida utilizando Node e Express, juntamente com o banco de dados MongoDB. O código foi desenvolvido em Typescript utilizando as práticas de TDD com Jest para os testes unitários e funcionais end-to-end.

O projeto utiliza as ferramentas do Github Workflows para CI (Continuous Integration) e configurações em Docker e Docker Compose.

📦️ Como baixar e executar o projeto

Para baixar o projeto

# Clone do repositório
$ git clone https://github.com/sobucki/api-bossa-tools.git

# Entrar no repositório
$ cd api-bossa-tools

Pode ser executado de duas maneiras. Utilizando Docker Compose ou com manualmente com Node.

Opção 1 - Docker Compose:

# Iniciar os containers em modo detached
$ docker-compose up -d

Opção 2 - Iniciando o Node

# Iniciando o processo de compilação e execução da aplicação
$ npm start

Para este passo é necessário ter o MongoDB instalado ou utilizar uma imagem Docker do MongoDB antes de iniciar a aplicação.

Sobre a aplicação

A aplicação tem por finalidade o cadastro de ferramentas úteis para um usuário. O usuário para realizar o cadastro dessas ferramentas, precisa primeiramente possuir uma conta com nome, e-mail e senha. Após a autenticação feita pelo usuário, ele poderá cadastrar e deletar suas ferramentas. A listagem das ferramentas não necessita de autenticação, podendo exibir assim, todas as ferramentas cadastradas no sistema.

Requisitos necessários para atender

  • Toda a aplicação é exposta na porta 3000
  • Rota para listagem de todas ferramentas cadastradas GET /tools
  • Possibilidade de filtragem por tag na rota de listagem GET /tools?tag=node
  • Para realização de cadastro e remoção de ferramentas é necessário autenticação
  • Cadastro de novas ferramentas POST /tools (somente com autenticação)
  • Remoção de uma ferramenta DELETE /tools/:id (semente com autenticação e a ferramenta criada pelo usuário)

Extras:

  • Autenticação JWT
  • Cadastro de usuário POST /users
  • Autenticação de usuário POST /authenticate
  • Atualização de token GET /me
  • Testes unitários
  • Testes de integração (end-to-end)
  • Utilização de ESLint, Prettier
  • Conteinerização da aplicação
  • Pipeline CI com Github Workflows
  • Deploy em ambiente real utilizando Digital Ocean
  • Documentação com OpenAPI (Swagger)

TODO:

  • Filtragem por qualquer campo
  • Associação de usuário com o projeto (exemplo: Lista de ferramentas favoritas)
  • CD - Continous Deployment
  • Rate limit
  • Graceful Shutdown

API REST

Swagger

GET /docs

Nesta rota pode ser acessado a documentação e especificação OpenAPI, podendo realizar requisições através da estrutura Swagger.

Tools

GET /tools

Parâmetro Tipo Obrigatório Descrição
tag query Não array[string]

Exemplo:

GET /tools?tag=node&tag=web

Resposta:

[
  {
    "id": "5f9b3c3178bb7fcf2d98c49d",
    "title": "Exemple of title",
    "link": "http://sometool.com/",
    "description": "This is a description of the tool. Here will be detailing most about the software related.",
    "tags": ["Utility"]
  }
]
Código Descrição
200 Listagem de ferramentas

POST /tools

{
  "title": "Exemple of title",
  "link": "http://sometool.com/",
  "description": "This is a description of the tool. Here will be detailing most about the software related.",
  "tags": ["Utility"]
}
Parâmetro Tipo Obrigatório Descrição
x-access-token header Sim Token JWT

Resposta:

  "id": "5f9b3c3178bb7fcf2d98c49d",
  "title": "Exemple of title",
  "link": "http://sometool.com/",
  "description": "This is a description of the tool. Here will be detailing most about the software related.",
  "tags": [
    "Utility"
  ]
}
Código Descrição
201 Criado com sucesso

DELETE /tools/:id

Parâmetro Tipo Obrigatório Descrição
x-access-token header Sim Token JWT
id path Sim Id da ferramenta

Exemplo:

DELETE /tools/5fa060b235cf6e710f3ff3aa

Resposta:

Código Descrição
204 Ferramenta deletada

Autenticação

POST /users

Resposta:

{
  "name": "John Doe",
  "email": "[email protected]",
  "password": "12345#@$%"
}
Código Descrição
201 Usuário criado com sucesso
409 E-mail já utilizado

POST /authenticate

Resposta:

{
  "email": "[email protected]",
  "password": "12345#@$%"
}
Código Descrição
200 Autenticação do usuário e o JWT
401 Não autorizado

GET /me

Parâmetro Tipo Obrigatório Descrição
x-access-token header Sim Token JWT

Resposta:

{
  "user": {
    "name": "John Doe",
    "email": "[email protected]",
    "password": "12345#@$%",
    "id": "5f9b3c3178bb7fcf2d98c49d"
  }
}
Código Descrição
200 Informações do usuário
404 Usuário não encontrado

api-bossa-tools's People

Contributors

sobucki avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.