- 1. Resumo do Projeto
- 2. Tecnologias e Conteúdos Utilizados
- 3. Banco de Dados
- 4. Instalação
- 5. Inicialização
- 6. Endpoints
- 7. Tratamento de Erros
- 8. Lista de Requisitos do Projeto
- 9. Desenvolvedora
O Labook é uma API de rede social que permite a interação entre os usuários. Ao se cadastrar e fazer login na plataforma, os usuários podem criar, dar like ou dislike em postagens de outros usuários.
A plataforma oferece uma variedade de recursos e funcionalidades que incluem:
-
Cadastro de Usuários: Através do processo de cadastro, os usuários podem criar suas contas na plataforma, fornecendo informações pessoais básicas como nome, email e senha.
-
Criação de Postagens: Os membros do Labook têm a capacidade de compartilhar suas ideias, pensamentos e experiências por meio de postagens.
-
Likes e Dislikes: Os usuários podem "curtir" ou "descurtir" postagens de outros membros, permitindo uma variedade de interações e opiniões sobre o conteúdo compartilhado.
-
Gerenciamento de Postagens: Os criadores de postagens têm controle total sobre seu conteúdo, podendo editá-lo ou excluí-lo conforme necessário.
-
Recursos de Segurança: Para garantir a segurança e privacidade dos usuários, o Labook implementa medidas de segurança, como senhas criptografadas e autenticação por meio de tokens JWT.
- NodeJS
- Typescript
- Express
- SQL e SQLite
- Knex
- POO
- Arquitetura em camadas
- Geração de UUID
- Geração de hashes
- Autenticação e Autorização
- Roteamento
- Postman
As entidades do banco de dados estão estruturadas da seguinte forma:
Clique aqui para conferir o site com a estrutura do banco de dados.
Ter instalado o node.js
, o npm
e rodar o seguinte comando:
npm install
Para rodar o servidor localmente digite o seguinte comando:
npm run dev
Clique AQUI para visualizar a documentação da API LABOOK.
A base URL para esta API é http://localhost:3003
Os endpoints estão divididos em pastas de acordo com o que é gerenciado. A API fornece os seguintes endpoints:
- Endpoint privado (Somente administradores podem acessar esse recurso)
- Método HTTP: GET
- Descrição: Retorna todos os usuários cadastrados no sistema.
- Enviar via headers.authorization:
token_de_autenticação
INPUT:
// headers.authorization = "token_de_autenticação"
OUTPUT:
[
{
"id": "7ed8d1f6-4b22-4a0e-a38b-45f275c32d21",
"name": "Morgana",
"email": "morgana@gmail.com",
"password": "$2a$12$IOmC1TDDM6YNMTTkRWqRxOeZ06jz/OnMsjLEHZdX5OrFD3sJIVBXy",
"role": "NORMAL",
"createdAt": "04-12-2023 11:31:26"
},
{
"id": "16f86eba-fde0-42f5-a251-b0afe72b5c93",
"name": "Amanda",
"email": "amanda@gmail.com",
"password": "$2a$12$7VRnTvXK8X5wsj84O207POIWCWhs/Ps8pw5wJH49OyuwqedAijnKe",
"role": "ADMIN",
"createdAt": "19-11-2023 12:27:51"
},
{
"id": "527348d8-434d-4243-b5c9-927d8e96b418",
"name": "Atlas",
"email": "atlas@gmail.com",
"password": "$2a$12$KOKtDri0bntdxt5488R1nOZabISu9jF4vBCOWIMlt6vcrUnp3hhm.",
"role": "NORMAL",
"createdAt": "19-11-2023 13:10:34"
},
{
"id": "8b4d95ab-0b13-4092-8661-0b29bfa46830",
"name": "Luan",
"email": "luan@gmail.com",
"password": "$2a$12$DMX1r916xqOPGrFgeVj0JeZXQYSOCmT5lzAmXc5tb2i3ddAO7geLi",
"role": "ADMIN",
"createdAt": "17-11-2023 14:26:54"
}
]
- Endpoint público
- Método HTTP: POST
- Descrição: Cria um novo usuário.
- Enviar via body:
name
,email
epassword
INPUT:
{
"name": "Morgana",
"email": "morgana@email.com",
"password": "Morgana@123"
}
OUTPUT:
{
"message": "Usuário criado com sucesso",
"token": "token_de_autenticação"
}
- Endpoint público
- Método HTTP: POST
- Descrição: Realiza o login do usuário.
- Enviar via body:
email
epassword
INPUT:
{
"email": "morgana@email.com",
"password": "Morgana@123"
}
OUTPUT:
{
"message": "Login realizado com sucesso",
"token": "token_de_autenticação"
}
- Endpoint privado
- Método HTTP: POST
- Descrição: Cria um novo post.
- Enviar via headers.authorization:
token_de_autenticação
- Enviar via body:
content
INPUT:
// headers.authorization = "token_de_autenticação"
// body:
{
"content": "Mais um post para a comunidade!"
}
OUTPUT:
{
"message": "Post criado com sucesso",
"content": "Mais um post para a comunidade!"
}
- Endpoint privado
- Método HTTP: GET
- Descrição: Retorna um array de objetos, onde cada objeto contém as informações de um post.
- Enviar via headers.authorization:
token_de_autenticação
INPUT:
// headers.authorization = "token_de_autenticação"
OUTPUT:
[
{
"id": "0e3f6d82-ec45-4c81-8ecb-ac7aac044b50",
"content": "O sem-coroa há de reinar!",
"likes": 1,
"dislikes": 0,
"createdAt": "19-11-2023 12:47:07",
"updatedAt": "19-11-2023 12:47:07",
"creator": {
"id": "8b4d95ab-0b13-4092-8661-0b29bfa46830",
"name": "Luan"
}
},
{
"id": "5153f8a9-a449-424c-89a4-981dd5c1ce9f",
"content": "Pode parar de nadar agora, Lily. Finalmente chegamos à costa",
"likes": 0,
"dislikes": 1,
"createdAt": "19-11-2023 13:29:20",
"updatedAt": "19-11-2023 13:34:13",
"creator": {
"id": "527348d8-434d-4243-b5c9-927d8e96b418",
"name": "Atlas"
}
}
]
- Endpoint privado
- Método HTTP: PUT
- Descrição: Edita o conteúdo de um post existente.
- Enviar via params:
id
do post - Enviar via headers.authorization:
token_de_autenticação
- Enviar via body:
content
INPUT:
// params :id
// headers.authorization = "token_de_autenticação"
// body:
{
"content": "Texto editado do post"
}
OUTPUT:
{
"message": "Post atualizado com sucesso",
"content": "Texto editado do post"
}
- Endpoint privado
- Método HTTP: DELETE
- Descrição: Deleta um post criado por você.
- Enviar via params: id
- Enviar via headers.authorization:
token_de_autenticação
// params :id
// headers.authorization = "token_de_autenticação"
OUTPUT:
{
"message": "Post deletado com sucesso"
}
- Endpoint privado
- Método HTTP: PUT
- Descrição: Dá like ou dislike em um post que não foi criado por você.
- Enviar via params: id
- Enviar via headers.authorization:
token_de_autenticação
- Enviar via body: like (true para like, false para dislike)
INPUT:
like
{
"like": true
}
dislike
{
"like": false
}
-
Documentação
- Documentação Postman de todos os endpoints (obrigatória para correção)
-
Endpoints
- signup
- login
- create post
- get posts
- edit post
- delete post
- like / dislike post
-
Autenticação e Autorização
- identificação UUID
- senhas hasheadas com Bcrypt
- tokens JWT
-
Código
- POO
- Arquitetura em camadas
- Roteadores no Express
-
README.md
- Criar Readme
O Labook implementa tratamento de erros para fornecer respostas adequadas em diferentes cenários. Abaixo estão alguns dos erros tratados no projeto:
- Código: 400
- Descrição: Indica que a requisição feita pelo cliente é inválida.
- Código: 404
- Descrição: Indica que o recurso solicitado não foi encontrado.
Além disso, o Zod também pode ser utilizado para validar e customizar erros relacionados ao BadRequestError. Por exemplo, para o endpoint de signup:
// Uso do Zod para validação detalhada
export const SignupSchema = z
.object({
name: z
.string({
required_error: "'name' é obrigatório",
invalid_type_error: "'name' deve ser do tipo string",
})
.min(2, "'name' deve possuir no mínimo 2 caracteres"),
// ... outras validações ...
})
.transform((data) => data as SignupInputDTO);
O uso do Zod permite validar os dados recebidos de forma detalhada, gerando mensagens de erro específicas que contribuem para uma resposta mais informativa ao cliente.
Este projeto foi desenvolvido por: