Skip to content

Commit

Permalink
Merge pull request #1 from MichelleAntunes/workInProgress
Browse files Browse the repository at this point in the history
Work in progress
  • Loading branch information
MichelleAntunes authored May 11, 2023
2 parents a41a5f0 + ad4e94c commit c66362d
Show file tree
Hide file tree
Showing 27 changed files with 1,316 additions and 209 deletions.
8 changes: 8 additions & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
PORT=3003

DB_FILE_PATH=./src/database/nome-do-arquivo.db

JWT_KEY=senha-de-exemplo-jwt-key
JWT_EXPIRES_IN=7d

BCRYPT_COST=12
255 changes: 74 additions & 181 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,207 +1,100 @@
# Projeto Labook

## Índice:

- <a href="#Objetivo"> Objetivo </a>
- <a href="#Documentação da API"> Documentação da API </a>
- <a href="#Estruturação do banco de dados"> Estruturação do banco de dados </a>
- <a href="#Requisitos"> Requisitos: </a>
- <a href="#Como rodar este projeto?"> Como rodar este projeto? </a>
- <a href="#Técnologias utilizadas"> Técnologias utilizadas </a>
- <a href="#Autoria"> Autoria </a>
- <a href="#Próximos Passos"> Próximos Passos </a>

## Objetivo

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 e curtir publicações.

Agora que temos as bases de criação de APIs e banco de dados, o próximo nível é a implementação de segurança e códigos mais escaláveis. Veremos durante o prazo de entrega desse projeto inúmeros conceitos e formas de desenvolvimento seguindo padrões de design e arquitetura, e seu desafio será unir as funcionalidades com as boas práticas de código.

# Conteúdos abordados
- 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
## Documentação da API

[Link Demonstração](https://documenter.getpostman.com/view/25825355/2s93ebUBDa)

## Estruturação do banco de dados

# Banco de dados
![projeto-labook (2)](https://user-images.githubusercontent.com/29845719/216036534-2b3dfb48-7782-411a-bffd-36245b78594e.png)

https://dbdiagram.io/d/63d16443296d97641d7c1ae1
## Requisitos:

# Lista de requisitos
- Documentação Postman de todos os endpoints (obrigatória para correção)

- Endpoints
- [ ] signup
- [ ] login
- [ ] get posts
- [ ] create post
- [ ] edit post
- [ ] delete post
- [ ] like / dislike post

- [x] signup
- [x] login
- [x] get posts
- [x] create post
- [x] edit post
- [x] 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

- [x] identificação UUID
- [x] senhas hasheadas com Bcrypt
- [x] tokens JWT

- Código

- [x] POO
- [x] Arquitetura em camadas
- [x] Roteadores no Express

- README.md

# Exemplos de requisição

## Signup
Endpoint público utilizado para cadastro. Devolve um token jwt.
```typescript
// request POST /users/signup
// body JSON
{
"name": "Beltrana",
"email": "[email protected]",
"password": "beltrana00"
}

// response
// status 201 CREATED
{
token: "um token jwt"
}
```
## Como rodar este projeto?

## Login
Endpoint público utilizado para login. Devolve um token jwt.
```typescript
// request POST /users/login
// body JSON
{
"email": "[email protected]",
"password": "beltrana00"
}

// response
// status 200 OK
{
token: "um token jwt"
}
```
```bash
#Clone este repositório
$ git clone lin krepo

## Get posts
Endpoint protegido, requer um token jwt para acessá-lo.
```typescript
// 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"
}
}
]
```
#Acesse a pasta do projeto no seu terminal
$ cd nomeDaPasta

## Create post
Endpoint protegido, requer um token jwt para acessá-lo.
```typescript
// request POST /posts
// headers.authorization = "token jwt"
// body JSON
{
"content": "Partiu happy hour!"
}

// response
// status 201 CREATED
```
# Instale as dependencias
$ npm install

# Execute a aplicação
$ npm run dev

# A aplicação será iniciada na porta 3004, acesse pelo navegador: http://localhost:3003

## Edit post
Endpoint protegido, requer um token jwt para acessá-lo.<br>
Só quem criou o post pode editá-lo e somente o conteúdo pode ser editado.
```typescript
// 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.<br>
Só quem criou o post pode deletá-lo. Admins podem deletar o post de qualquer pessoa.
## Técnologias utilizadas

```typescript
// request DELETE /posts/:id
// headers.authorization = "token jwt"
1. [Node.js](https://nodejs.org/en)
2. [TypeScript](https://www.typescriptlang.org/)
3. [Express](https://expressjs.com/)
4. [SQLite3 / SQL](https://sqlite.org/index.html)
5. [Knex](https://knexjs.org/)
6. [POO](https://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_orientada_a_objetos)
7. [Arquiterura em camadas](https://pt.wikipedia.org/wiki/Arquitetura_multicamada)
8. [Geração de UUID](https://pt.wikipedia.org/wiki/Identificador_%C3%BAnico_universal)
9. [Geração de hashes](https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_hash_criptogr%C3%A1fica)
10. [Autenticação e autorização](https://pt.wikipedia.org/wiki/Autoriza%C3%A7%C3%A3o)
11. [Roteamento](https://acervolima.com/roteamento-em-node-js/)
12. [Postman](https://www.postman.com/)

// response
// status 200 OK
```
## Autoria

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

Endpoint protegido, requer um token jwt para acessá-lo.<br>
Quem criou o post não pode dar like ou dislike no mesmo.<br><br>
Caso dê um like em um post que já tenha dado like, o like é desfeito.<br>
Caso dê um dislike em um post que já tenha dado dislike, o dislike é desfeito.<br><br>
Caso dê um like em um post que tenha dado dislike, o like sobrescreve o dislike.<br>
Caso dê um dislike em um post que tenha dado like, o dislike sobrescreve o like.
### Like (funcionalidade 1)
```typescript
// request PUT /posts/:id/like
// headers.authorization = "token jwt"
// body JSON
{
"like": true
}

// response
// status 200 OK
```
Michelle Antunes, abril/2023.
<br>

### Dislike (funcionalidade 2)
```typescript
// request PUT /posts/:id/like
// headers.authorization = "token jwt"
// body JSON
{
"like": false
}

// response
// status 200 OK
```
Linkedin: www.linkedin.com/in/michelle-antunes-868b24156
<br>
Email: [email protected]

## Próximos Passos

### Para entender a tabela likes_dislikes
- no SQLite, lógicas booleanas devem ser controladas via 0 e 1 (INTEGER)
- quando like valer 1 na tabela é porque a pessoa deu like no post
- na requisição like é true

- quando like valer 0 na tabela é porque a pessoa deu dislike no post
- na requisição like é false

- caso não exista um registro na tabela de relação, é porque a pessoa não deu like nem dislike
- caso dê like em um post que já tenha dado like, o like é removido (deleta o item da tabela)
- caso dê dislike em um post que já tenha dado dislike, o dislike é removido (deleta o item da tabela)
- [ ] Deploy
- [ ] Testes unitários
Loading

0 comments on commit c66362d

Please sign in to comment.