Projeto Labeddit

O Labook é uma rede social com o objetivo de promover a conexão e interação entre pessoas. Quem se cadastrar no aplicativo poderá criar, curtir e comentar publicações.

Tecnologias utilizadas

  • NodeJS
  • Typescript
  • Express
  • Express router
  • Banco de dados SQLite
  • Query Builder Knex
  • Programação orientada a objetos - POO
  • Arquitetura em camadas - Controller, Business, Database
  • IDs geradas via UUID
  • Segurança - Geração de senhas hasheadas
  • Autenticação e autorização
  • Deploy realizado no webservice Render

Postman

Clique aqui para ver a documentação no Postman

Datalhes da API

  • Endpoints

    • signup
    • login
    • get posts
    • create post
    • edit post
    • delete post
    • like / dislike post
    • Create comment
    • like / dislike comment
  • Recursos

    • Autenticação e autorização
      • identificação UUID
      • senhas hasheadas com Bcrypt
      • tokens JWT
    • Código
      • Programação orientada a objetos
      • Arquitetura em camadas
      • Roteadores no Express

Exemplos de requisição

Signup

Endpoint público utilizado para cadastro. Devolve um token jwt.

// request POST /users/signup
// body JSON
{
  "name": "Beltrana",
  "email": "beltrana@email.com",
  "password": "beltrana00"
}

// response
// status 201 CREATED
{
  token: "um token jwt"
}

Login

Endpoint público utilizado para login. Devolve um token jwt.

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

// response
// status 200 OK
{
  token: "um token jwt",
  userName: "nome_de_usuario"
}

Get posts

Endpoint protegido, requer um token jwt para acessá-lo.

// request GET /posts
// headers.authorization = "token jwt"

// response
// status 200 OK
[
    {
        "id": "uma uuid v4",
        "content": "Hoje vou estudar POO!",
        "likes": 2,
        "dislikes" 1,
        "createdAt": "2023-01-20T12:11:47:000Z"
        "updatedAt": "2023-01-20T12:11:47:000Z"
        "creator": {
            "id": "uma uuid v4",
            "name": "Fulano"
        }
    },
    {
        "id": "uma uuid v4",
        "content": "kkkkkkkkkrying",
        "likes": 0,
        "dislikes" 0,
        "createdAt": "2023-01-20T15:41:12:000Z"
        "updatedAt": "2023-01-20T15:49:55:000Z"
        "creator": {
            "id": "uma uuid v4",
            "name": "Ciclana"
        }
    }
]

Create post

Endpoint protegido, requer um token jwt para acessá-lo.

// request POST /posts
// headers.authorization = "token jwt"
// body JSON
{
    "content": "Partiu happy hour!"
}

// response
// status 201 CREATED

Edit post

Endpoint protegido, requer um token jwt para acessá-lo.
Só quem criou o post pode editá-lo e somente o conteúdo pode ser editado.

// request PUT /posts/:id
// headers.authorization = "token jwt"
// body JSON
{
    "content": "Partiu happy hour lá no point de sempre!"
}

// response
// status 200 OK

Delete post

Endpoint protegido, requer um token jwt para acessá-lo.
Só quem criou o post pode deletá-lo. Admins podem deletar o post de qualquer pessoa.

// request DELETE /posts/:id
// headers.authorization = "token jwt"

// response
// status 200 OK

Like or dislike post (mesmo endpoint faz as duas coisas)

Endpoint protegido, requer um token jwt para 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.

Like (funcionalidade 1)

// request PUT /posts/:id/like
// headers.authorization = "token jwt"
// body JSON
{
    "like": true
}

// response
// status 200 OK

Dislike (funcionalidade 2)

// request PUT /posts/:id/like
// headers.authorization = "token jwt"
// body JSON
{
    "like": false
}

// response
// status 200 OK

Like or dislike comment (mesmo endpoint faz as duas coisas)

Endpoint protegido, requer um token jwt para 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.

Like (funcionalidade 1)

// request PUT /posts/:id/like
// headers.authorization = "token jwt"
// body JSON
{
    "like": true
}

// response
// status 200 OK

Dislike (funcionalidade 2)

// request PUT /posts/:id/like
// headers.authorization = "token jwt"
// body JSON
{
    "like": false
}

// response
// status 200 OK