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.
- 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
Clique aqui para ver a documentação no Postman
-
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
- Autenticação e autorização
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"
}
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"
}
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"
}
}
]
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
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
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
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.
// request PUT /posts/:id/like
// headers.authorization = "token jwt"
// body JSON
{
"like": true
}
// response
// status 200 OK
// request PUT /posts/:id/like
// headers.authorization = "token jwt"
// body JSON
{
"like": false
}
// response
// status 200 OK
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.
// request PUT /posts/:id/like
// headers.authorization = "token jwt"
// body JSON
{
"like": true
}
// response
// status 200 OK
// request PUT /posts/:id/like
// headers.authorization = "token jwt"
// body JSON
{
"like": false
}
// response
// status 200 OK