Sobre • Funcionalidades • Como executar • Tecnologias • Autor •
🖥 Labook - Essa API foi desenvolvida baseada numa rede social famosa e com o objetivo de possibilitar o cadastro de novos usuários, assim como a criação de publicações e a interação entre as pessoas, podendo cada uma manifestar se gostou ou não daquele conteúdo exibido por outro usuário. Este projeto possui inúmeras funcionalidades, as quais detalharemos mais adiante.
Projeto desenvolvido durante o Bootcamp Web Full-Stack da Labenu. Esse bootcamp é uma experiência online, um programa com mais de 1000 horas de experiência prática em desenvolvimento Full-stack e projetos individuais.
- getUsers
- signUp
- login
- editUser
- deleteUser
- getPosts
- createPost
- editPost
- likeOrDislikePost
- deletePost
Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas: Git, Node.js, Postman, é possível também utilizar a API pela versão web do Postman, no entanto, utilizaremos a versão para desktop para minimizar quaisquer chances de problemas. Além disto é bom ter um editor para trabalhar com o código como VSCode.
# Clone este repositório
$ git clone link-do-repositório-git
# Acesse a pasta do projeto no terminal/cmd
$ cd Labook
# Para abrir o vsCode
$ code .
# Instale as dependências
$ npm install
# Execute a aplicação em modo de desenvolvimento
$ npm run dev
# O servidor inciará na porta:3003
Para manipularmos manualmente código SQL será necessário instalar no VSCode a extensão chamada MySQL, criada por Weijan Chen. E sim, apesar do nome ser MySQL iremos aplicar o uso do SQLite. Essa extensão é utilizada para se conectar com diversos tipos de bancos relacionais, inclusive não relacionais. Caso a extensão não esteja instalada no seu projeto, é possível acessa-la por aqui:
Se a extensão for instalada corretamente, aparecerá no menu de navegação lateral à esquerda o ícone de banco de dados (destacado com a seta laranja). Esse é o menu da extensão e é onde você irá se conectar com o arquivo labook.db.
Ao clicar no botão “Create Connection” é aberta a aba de conexão da extensão. Escolha o Server Type como sendo SQLite (indicado na seta laranja).
Caso seja a primeira vez que você está instalando essa extensão, talvez seja necessário instalar algumas dependências para o SQLite rodar em sua máquina. A própria extensão irá te avisar se for o caso e você precisará clicar no botão para instalá-las. Se não aparecer nenhum aviso ou deu tudo certo, pode prosseguir!
- Dê um nome para a conexão
- Selecione o arquivo: labook.db
- Salve a conexão
Caso tenha dado tudo certo, irá aparecer no menu do banco de dados o nome de sua conexão junto com algumas informações.
Para criar as tabelas, basta clicar em "execute" em cada um dos três como mostra a imagem abaixo:
Lembre-se de configurar o arquivo .env como está feito no exemplo em .env.example
Feito isso acesse a documentação da API e clique em "Run in Postman" localizado no canto superior direito para abrir dentro do app.
ATENÇÃO! Todos os exemplos são fictícios, pois não haveria sentido em disponibilizarmos os dados de nossos usuários, portanto utilize essa API para construir a sua própria rede social.
A requisição getAllUsers tem duas funcionalidades diferentes: A requisição getUsers tem a funcionalidade de mostrar a lista de usuários cadastrados no banco de dados, no entanto, apenas "ADMINS" tem acesso a essa funcionalidade, passando um token de autorização compátivel.
A requisição signUp tem a funcionalidade de cadastrar uma nova conta, porém alguns dados precisam ser inseridos no corpo da requisição, são esses:
"name", "email", "password".
Contudo, foram implementadas as seguintes restrições: Caso o "email" já tenha sido cadastrado por outro usuário, não será possível concluir o cadastro; Caso o "email" não esteja com a formatação correta (@email.com), não será possível concluir o cadastro; Caso a senha não atenda a um padrão mínimo pré-estabelecido, não será possível concluir o cadastro, no caso do Labook, é obrigatório que "password" tenha entre 8 e 12 caracteres, com letras maiúsculas e minúsculas, e no mínimo um caractere especial. Todos os usuários cadastrados vem com a "role" como "NORMAL" impedindo seu acesso a recursos que são reservados a administradores. Como resposta da requisição, o usuário recebe um token de autorização, lembre-se de guardá-lo pois será necessário para acessar as outras funcionalidades do sistema.
A requisição login tem a funcionalidade de entrar na sua respectiva conta, porém alguns dados precisam ser inseridos no corpo da requisição, são esses:
"email", "password".
Contudo, foram implementadas as seguintes restrições: Caso o "email" e o "password" não correspondam com os utilizados no endpoint "signup", não será possível acessar a conta. Como resposta da requisição, o usuário recebe um token de autorização, lembre-se de guardá-lo pois será necessário para acessar as outras funcionalidades do sistema.
A requisição editUser permite ao usuário editar suas informações pessoais como "name", "email" e "password", no entanto, algumas restrições foram implementadas para o uso dessa funcionalidade, são essas: Apenas o dono da conta pode editar suas informações; Será necessário passar o token gerado no login para comprovar que a pessoa é realmente quem ela diz ser; Será necessário abrir uma solicitação para que um administrador informe ao usuário qual é seu "id" que foi gerado no momento em que fez o cadastro no sistema, pois o mesmo não tem acesso a essa informação por questão de segurança. Com o id em mãos, basta inseri-lo no campo "Path Variables" na aba "Params" junto ao token no campo "Authorization" na aba "Headers", e torna-se possível editar as informações de cadastro citadas acima.
A requisição deleteUser permite ao usuário excluir sua conta, no entanto, algumas restrições foram implementadas para o uso dessa funcionalidade, são essas: Apenas o dono da conta ou um administrador podem apagar um usuário; Será necessário passar o token gerado no login para comprovar que a pessoa é realmente quem ela diz ser; Caso o usuário queira apagar sua própria conta, será necessário abrir uma solicitação para que um administrador informe a pessoa qual é seu "id" que foi gerado no momento em que fez o cadastro no sistema, pois o mesmo não tem acesso a essa informação por questão de segurança. Com o id em mãos, basta inseri-lo no campo "Path Variables" na aba "Params" junto ao token no campo "Authorization" na aba "Headers", e torna-se possível apagar o cadastro do usuário.
A requisição getPosts possui duas funcionalides diferentes: Caso nada seja escrito após "/posts" será retornada a lista completa de posts, como podemos ver no exemplo "getPostsF1";
Caso um post não cadastrado seja enviado como paramêtro, por exemplo, "/posts?q=qualquer-coisa-aqui", será retornada uma lista vazia que é referenciada por [ ]; Caso não seja inserido um "id" completo representado pelo paramêtro "q", seram retornados todos os posts que contenham os paramêtros inseridos; Caso um post cadastrado seja enviado como paramêtro, apenas ele será retornado, como podemos ver no exemplo "getPostsF2".
No entanto para ter acesso aos posts será necessário informar um token válido no campo "Authorization" na aba "Headers"
A requisição createPost permite ao usuário criar uma nova postagem, informando apenas o conteúdo "content" da mesma no corpo da requisição. Entretanto é necessário também informar um token válido no campo "Authorization" na aba "Headers".
A requisição editPost permite ao usuário editar o conteúdo "content" da sua publicação, no entanto, algumas restrições foram implementadas para o uso dessa funcionalidade, são essas:
Apenas o dono do post pode editá-lo; Será necessário passar o token gerado no login para comprovar que a pessoa é realmente quem ela diz ser; Também é requerido o "id" específico da postagem, para ser inserido no campo "Path Variables" na aba "Params" junto ao token no campo "Authorization" na aba "Headers", e torna-se possível editar a sua publicação.
A requisição likeOrDislikePost tem duas funcionalidades que, permitem ao usuário manifestar se gostou ou não gostou do conteúdo publicado por outra pessoa, no entanto, algumas restrições foram implementadas para o uso dessa funcionalidade, são essas:
Quem criou o post não pode dar like ou dislike no mesmo; Caso dê um like em um post que já tenha dado like, o like é desfeito; Caso dê um dislike em um post que já tenha dado dislike, o dislike é desfeito; Caso dê um like em um post que tenha dado dislike, o like sobrescreve o dislike; Caso dê um dislike em um post que tenha dado like, o dislike sobrescreve o like;
Será necessário passar o token gerado no login para comprovar que a pessoa é realmente quem ela diz ser; Também é requerido o "id" específico da postagem, para ser inserido no campo "Path Variables" na aba "Params" junto ao token no campo "Authorization" na aba "Headers", e torna-se possível editar a sua publicação. Caso queira dar like num post, basta informar "like": true, no corpo da requisição "likePostF1";
Caso queira dar dislike num post, basta informar "like": false, no corpo da requisição "dislikePostF2".
A requisição deletePost permite ao usuário excluir seu post, no entanto, algumas restrições foram implementadas para o uso dessa funcionalidade, são essas:
Apenas o dono da publicação ou um administrador podem apagar um post; Será necessário passar o token gerado no login para comprovar que a pessoa é realmente quem ela diz ser; Também é requerido o "id" específico da postagem, para ser inserido no campo "Path Variables" na aba "Params" junto ao token no campo "Authorization" na aba "Headers", e torna-se possível deletar a sua publicação.
As seguintes ferramentas foram usadas na construção do projeto:
API (NodeJS + TypeScript)
- APIs & Express
- CORS
- SQLite
- Knex
- ts-node
- POO
- Arquitetura em camadas
- Geração de UUID
- Geração de hashes
- Autenticação e autorização
- Roteamento
- Postman
Lucas Henrique Proença























