http://64.227.106.80:3000
- O que é
- Tecnologias utilizadas
- Como baixar e executar
- Sobre a aplicação
- Requisitos necessários para atender
- API REST
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.
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.
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.
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.
- 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
Nesta rota pode ser acessado a documentação e especificação OpenAPI, podendo realizar requisições através da estrutura Swagger.
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 |
{
"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 |
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 |
Resposta:
{
"name": "John Doe",
"email": "[email protected]",
"password": "12345#@$%"
}
Código | Descrição |
---|---|
201 | Usuário criado com sucesso |
409 | E-mail já utilizado |
Resposta:
{
"email": "[email protected]",
"password": "12345#@$%"
}
Código | Descrição |
---|---|
200 | Autenticação do usuário e o JWT |
401 | Não autorizado |
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 |