Essa API foi desenvolvida afim de resolver um desafio técnico de vaga JR em NodeJS. Ela tinha a seguinte descrição:
Desenvolver a API de um produto similar ao Pensador. O objetivo é que usuários possam se cadastrar, e após cadastro publicar seus pensamentos (citações). Essas citações podem ser curtida tanto pelo proprio usuário, como também por outros usuários logados.
- O usuário pode criar, excluir, editar e visualizar sua conta.
- O usuário pode criar, excluir, editar e visualizar suas citações.
- O usuário pode visualizar a listagem de todas as citações de todos usuários, ordenadas por data.
- O usuário logador poderá curtir citações de outros usuários ou de si mesmo.
- O usuário NÃO PODE excluir e editar a conta de outros usuários.
- O usuário NÃO PODE excluir e editar as publicações de outros usuários.
- Documentação da API
- Teste na API
Ficava em aberto todos os campos necessários para criar uma conta ou para criar uma citação, então para isso criei um modelo de usuário (Author) e um modelo de citação (Quote).
O usuário Author tem os campos:
- name, nome do usário
- nameAsQuote, nome fictício atrelado a citação
- email, usado para autenticação
- password, usado para autenticação
A frase Quote tem os campos:
- quote, a citação/frase
- author, o dono/criador da citação
- createdAt, a data de criação, que seria utilizada para listagem de mais recente para a mais antiga
Para identificar cada usuário também seria necessário algum tipo de identifição básica, assim foi utilizado através da Basic Authorization do HTTP o método de autenticação Barear Token, onde seria possível passar pelos headers de cada requisição a identificação do usuário que estaria realizando aquela requisição.
A seguir tem algumas tasks que seguir para concluir o projeto, usando claro boas práticas de programação e designs patterns como usecases, repositories e singletons.
- Create a author (POST /author)
- Delete a author account (DELETE /author with BT)
- Update a author informations (PATCH /author with BT)
- View a author informations (GET /author with BT)
- Login in an author account (POST /auth)
*BT = Barear Token
- Create a quote (POST /quotes with BT)
- List quotes of all user order by create date (GET /quotes)
- Update a quote of quote (PATCH /quote with BT)
- Delete a quote (DELETE /quote with BT)
- Like a quote (owner or others users) (PUT /quote/:quoteId/like with BT)
- Dislike a quote (owner or others users) (PUT /quote/:quoteId/dislike with BT)
*BT = Barear Token
- Create routes for Authors
- Create routes for Quotes
- Authors units tests
- Quotes units tests
- Doc the API with SWAGGER
É necessário você ter instalado o node na versão v18.14.0 ou superior e o yarn. Caso não tenha o comando yarn, digite npm i -g yarn
que você terá acesso ao comando yarn no seu terminal.
Após clonar esse repositório na sua máquina, utilize o comando yarn
para instalar as depedências. Renomei o arquivo .env.example para .env e preencha os campos de JWT_SECRET e PORT para sua preferência.
Para rodar o projeto em modo de produção utilize o comando yarn start
, para desenvolvimente utilize yarn dev
e para rodar testes unitários utilize o comando yarn test
. Todos os dados são salvos In Memory por enquanto.
Projeto feito para vaga em NodeJS júnior da One Blue durante 3 dias. Infelizmente a vaga foi cancelada mas o projeto fica de destaque para meu portifólio backend.
Qualquer dúvida pode entrar em contato comigo pelo email [email protected] ou no meu linkedin.