Skip to content

Latest commit

 

History

History
37 lines (34 loc) · 3.68 KB

README.md

File metadata and controls

37 lines (34 loc) · 3.68 KB

Link manager API

API para gerenciador de links feita em NodeJS com express e sequelize

Base para o projeto

Esse projeto foi feito durante a Maratona JS, uma semana intensiva de conteúdo e muito aprendizado fornecida gratuitamente pelo @emersonbrogadev

Funcionalidades

  1. Acesso ao banco de dados:
  • Nesse projeto, foi utilizado um banco de dados relacional: o MySQL
  • Para fazer o acesso ao banco de dados, foi usada a biblioteca sequelize
  • Para criar tabelas, foram usados os models do sequelize
  • Para alterar a estrutura do banco de dados, foram utilizadas as migrations do sequelize, que permite que haja um histórico de mudanças no banco de dados, facilitando o desenvolvimento
  • Para alterar, inserir e acessar dados, o Sequelize ORM permite que isso seja feito de maneira abstrata, sem a necessidade da escrita de raw queries para o banco
  1. Middleware para padronização de respostas
  • Foi implementada um middleware para padronizar as respostas dadas pela aplicação a partir dos métodos res.jsonOk, res.jsonBadRequest, res.jsonNotFound, res.jsonUnauthorized, res.jsonServerError
  • Toda resposta tem os status data, metadata, status e message
  1. Acesso aos links pela rota /links
  • /links/add-link (método POST): adiciona um novo link, relacionando-o, no banco, com o usuário cujo token foi passados pelos headers em um relacionamento de 1..n (um para muitos)
  • /links/ (método GET): lista todos os links do usuário cujo token foi passado nos headers
  • /links/:id (método GET): retorna o link com id :id do usuário cujo token foi passado nos headers
  • /links/:id (método PUT): muda o link com id :id para os dados passados no body do usuário cujo token foi passado nos headers
  • /links/:id (método DELETE): deleta do banco de dados o link com id :id do usuário cujo token foi passado nos headers
  • Para as funcionalidades de read, update e delete, caso o link passado nos route params não pertença ao usuário do token enviado, é retornado status 404
  1. Autenticação com JWT na rota /auth
  • /auth/sign-up (método POST): permite que seja feito com cadastro de um novo usuário, já retornando o token e o refresh token no metadata da resposta
  • /auth/login (método GET): permite o login de um usuário, também retornado o token e o refresh token no metadata da resposta. Os dados são transmitidos pelo padrão Basic Auth, pelos headers da requisição, ganrantindo mais segurança.
  • /auth/refresh (método POST): recebe o refresh token nos headers e retorna um novo token
  • Validação: feita a partir da biblioteca @hapi/Joi e implementada a partir de um middleware, retornando mensagens traduzidas que foram especificadas em um arquivo messages.json
  • Toda vez que um usuário é cadastrado, sua senha é criptografada pela biblioteca bcrypt e seus dados são registrados no banco de dados
  • Foi implementado com middleware que pega o token dos headers e verifica a qual usuário ele corresponse, associando o ID desse usuário ao atributo req.accountId, que pode ser acessado em todas as rotas
  1. Upload de imagens com a biblioteca multer:
  • O nome das imagens é diferenciado com a adição de um hash
  • Apenas são aceitos arquivos de imagem com as extensões especificadas em um array
  • As imagens são enviadas para a pasta /uploads e retornadas pelas rota /uploads como arquivos estáticos do express
  • Foi implementado um middleware que retorna uma imagem apenas se ela pertencer ao usuário cujo token é passados pelos headers, caso contrário retorna 404