Skip to content

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.

Notifications You must be signed in to change notification settings

endioliveira/projeto-labook-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔷 Projeto Labook 🔷

Índice

Introdução

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.

Conteúdos abordados no projeto

  • 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

Endpoints

  • Signup
  • Login
  • Get Posts
  • Create Post
  • Edit Post
  • Delete Post
  • Like or Dislike Post

🎯 SIGNUP - Endpoint público para fazer um cadastro. Esse endpoint devolve um token jwt.

// request POST /users/signup
// body JSON
{
    "name": "Lorenzo Ferreira",
    "email": "lorenzoferreira@email.com",
    "password": "lorenfefe"
}

// response
// status 201 CREATED

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6I"
}

🎯 LOGIN - Endpoint público utilizado para fazer login. Ele também devolve um token jwt.

// request POST /users/login
// body JSON
{
    "email": "marisantos@email.com",
    "password": "masantos22"
}

// response
// status 200 OK
{
  "token": "eyJhbGciOiJIXVCJ9.eyJpZCI6ImYyZjhjYWE4LTgzMTMb"
}

🎯 GET POSTS - Esse endpoint é protegido, precisa de um token jwt para acessá-lo.

// 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"
      }
    }
]

🎯 CREATE POST - Endpoint protegido, precisa de um token jwt para poder acessá-lo.

// 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

🎯 LIKE OR DISLIKE POST - Endpoint protegido, requer um token jwt para poder acessá-lo.

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

Dependências

🔵 SCRIPTS

"scripts": {
    "start": "node ./build/index.js",
    "build": "tsc",
    "dev": "ts-node-dev ./src/index.ts"
  }

🔵 Dependencies

"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

"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"
  }

Rodando o projeto

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> 

Tecnologias Utilizadas

Link da Documentação

https://documenter.getpostman.com/view/20168491/2s93CHtZng

Banco de dados

Copy of projeto-labook

https://dbdiagram.io/d/63e7f2b3296d97641d803362

About

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.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published