- Introdução
- Conteúdos abordados no projeto
- Endpoints
- Dependências
- Rodando o projeto
- Tecnologias utilizadas
- Link da Documentação
- Banco de Dados
O projeto Labook é uma rede social com o objetivo de promover a conexão e interação entre pessoas. Quem se cadastrar no aplicativo poderá criar e curtir publicações.
- NodeJS
- Typescript
- Express
- SQL e SQLite
- Knex
- Programação Orientada a Objetos
- Arquitetura em camadas
- Geração de UUID
- Geração de hashes
- Autenticação e autorização
- Roteamento
- Postman
- Signup
- Login
- Get Posts
- Create Post
- Edit Post
- Delete Post
- Like or Dislike Post
// request POST /users/signup
// body JSON
{
"name": "Lorenzo Ferreira",
"email": "lorenzoferreira@email.com",
"password": "lorenfefe"
}
// response
// status 201 CREATED
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6I"
}
// request POST /users/login
// body JSON
{
"email": "marisantos@email.com",
"password": "masantos22"
}
// response
// status 200 OK
{
"token": "eyJhbGciOiJIXVCJ9.eyJpZCI6ImYyZjhjYWE4LTgzMTMb"
}
// request GET /posts
// headers.authorization = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjFjZTQ2YmQ1LTQ5Y"
// response
// status 200 OK
[
{
"id": "b80ba0c4-53c3-4b6a-91d9-d022a9594cc5",
"content": "Partiu piscina e churrasco! :D",
"likes": 1,
"dislikes": 0,
"createdAt": "2023-02-17T18:32:36.089Z",
"updatedAt": "2023-02-17T18:32:36.089Z",
"creator": {
"id": "9cca4c22-63f6-4b89-ad67-d07e83fbbc2d",
"name": "Eloá Silva"
}
},
{
"id": "b71aa9a0-ba33-44b6-bcdc-6d6b4bec7fe6",
"content": "Vou pegar uma praia em Copacabana!!!",
"likes": 1,
"dislikes": 0,
"createdAt": "2023-02-17T20:37:26.144Z",
"updatedAt": "2023-02-17T20:37:26.144Z",
"creator": {
"id": "1ce46bd5-49c3-4642-94ba-07c7127cc97a",
"name": "Lorenzo Ferreira"
}
}
]
// request POST /posts
// headers.authorization = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjA3Nzc4Z"
// body JSON
{
"content": "Hoje é dia de relaxar e ver um filminho!"
}
// response
// status 201 CREATED
🎯 EDIT POST - Endpoint protegido, precisa de um token jwt para acessá-lo. E apenas quem criou o post pode editá-lo e somente o conteúdo pode ser editado.
// request PUT /posts/:id
// headers.authorization = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjA3Nzc4ZWQ5LWFiN2ItNDI1NS1hYmU0L"
// body JSON
{
"content": "Dia de relaxar e ver filmes de terror! :D"
}
// response
// status 200 OK
🎯 DELETE POST - Endpoint protegido, requer um token jwt para acessá-lo. Só quem criou pode deletá-lo. E admins podem deletar o post de qualquer pessoa.
// request DELETE /posts/:id
// headers.authorization = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjA3Nzc4ZWQ5LWFiN2ItNDI1NS1hYmU0LTdjMDFkNWQ1"
// response
// status 200 OK
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.
Primeira funcionalidade - Like
// request PUT /posts/:id/like
// headers.authorization = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImYyZjhjYWE4LTgzMTMtNDMzNy04ZD"
// body JSON
{
"like": true
}
// response
// status 200 OK
Segunda funcionalidade - Dislike
// request PUT /posts/:id/like
// headers.authorization = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImYyZjhjYWE4LTgzMTMtNDMzNy04ZD"
// body JSON
{
"like": false
}
// response
// status 200 OK
"scripts": {
"start": "node ./build/index.js",
"build": "tsc",
"dev": "ts-node-dev ./src/index.ts"
}
"dependencies": {
"bcryptjs": "^2.4.3",
"cors": "^2.8.5",
"dotenv": "^16.0.3",
"express": "^4.18.2",
"jsonwebtoken": "^9.0.0",
"knex": "^2.4.2",
"sqlite3": "^5.1.4",
"uuid": "^9.0.0"
}
"devDependencies": {
"@types/bcryptjs": "^2.4.2",
"@types/cors": "^2.8.13",
"@types/express": "^4.17.16",
"@types/jsonwebtoken": "^9.0.1",
"@types/knex": "^0.16.1",
"@types/node": "^18.11.18",
"@types/uuid": "^9.0.0",
"ts-node-dev": "^2.0.0",
"typescript": "^4.9.5"
}
Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas: Git, o Node.js e o Postman. Além disto é bom ter um editor para trabalhar com o código como VSCode
# Clone este repositório
$ git clone <https://github.com/endioliveira/projeto-labook-backend.git>
# Acesse a pasta do projeto no terminal
$ cd projeto-labook-backend
# Instale as dependências
$ npm install
# Execute a aplicação em modo de desenvolvimento
$ npm run dev
# O servidor iniciará na porta:3003>