O Labeddit é uma rede social inspirada no reddit, com o objetivo de promover a conexão e interação entre pessoas através de postagens e comentários. Quem se cadastrar no aplicativo poderá criar, comentar e curtir publicações.
- 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 com as instruções de uso de cada endpoint da aplicação Labeddit.
Links do deploy e repositório do bando de dados da aplicação Labeddit.
Labeddit Deploy Backend
Labeddit Repo Backend
Links do deploy e repositório do front da aplicação Labeddit.
Labeddit Deploy Frontend
Labeddit Repo Frontend
- Endpoints seguindo as boas práticas HTTP
- Uso do ExpressJS, Typescript e SQLite
- Cobertura de testes (pelo menos 70%)
- API deployada
- Documentação README e POSTMAN
Requisições para a API devem seguir os padrões:
Método | Descrição |
---|---|
GET |
Retorna informações de um ou mais registros. |
POST |
Utilizado para criar um novo registro ou acesso a Login. |
PUT |
Atualiza dados de um registro ou altera sua situação. |
DELETE |
Remove um registro do sistema. |
Código | Descrição |
---|---|
200 |
Requisição executada com sucesso (success). |
201 |
Dados creado com sucesso(sucess). |
400 |
Erros de validação ou os campos informados não existem no sistema. |
404 |
Registro pesquisado não encontrado (Not found). |
500 |
Erro inesperado. |
Esse é um exemplo das intruções de como você configura o projeto localmente. Para ter uma copia local, siga os passos abaixo:
- Clone do repositório
git clone https://github.com/marinajaudy/labeddit-backend.git
- Install --> TypeScript packages, Express packages, Cors packages, Node packages, Identificador Único Universal (UUID), Variáveis de ambiente (ENV), JWT(Token), Bcrypt, Jest, developer tools:
npm install
Uma API onde as pessoas se conectam e interagem entre si.
Para iniciar o uso da API primeiramente entre no labeddit.sql na pasta database, crie a tabela users e insira o conteúdo, faça o mesmo com a tabela post e comments. A tabela likes_dislikes, tanto do post como o do comments deve ser criada, porém não insira nenhum dado nessas duas tabelas, se popular essas tabelas acarretará em erros no momento de inserir like e dislike no post e comentário.
Não precisa cadastrar o mesmo nome, email e quaisquer outros valores vistos aqui nos exemplos de saída. Porém, lembre-se de respeitar a estrutura pedida no banco de dados (nome das tabelas e colunas) e os nomes das propriedades na resposta da API.
Colunas a mais na tabela não tem problema, por exemplo adicionar uma 'category' dentro da tabela 'products', mas a falta de uma coluna ou propriedade na resposta será considerada falha de implementação!
Endpoint público utilizado para cadastro. Devolve um token jwt.
// request POST /users/signup
// body JSON
{
"nickname": "Andrea",
"email": "[email protected]",
"password": "Andre@123"
}
// 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": "[email protected]",
"password": "Andre@123"
}
// response
// status 200 OK
{
token: "um token jwt"
}
Endpoint protegido, requer um token jwt para acessá-lo.
// request GET /posts
// headers.authorization = "token jwt"
// response
// status 200 OK
[
{
id: "db704ae1-18c8-4895-9f54-165af46f66e6",
content: "To cansada e com o corpo doendo!!",
likes: 0,
dislikes: 0,
comments: 0,
creator: {
id: "8bc4ea9c-b511-4c14-bedd-16df2a077485",
nickname: "Andrea"
},
createdAt: "2023-02-20T19:35:38.841Z",
updatedAt: "2023-02-20T19:37:22.265Z"
},
{
id: "uma uuid v4",
content: "kkkkkkkkkrying",
likes: 0,
dislikes: 0,
comments: 0,
creator: {
id: "uma uuid v4",
nickname: "Ciclana"
},
createdAt: "2023-01-20T15:41:12:000Z"
updatedAt: "2023-01-20T15:49:55:000Z"
}
]
Endpoint protegido, requer um token jwt para acessá-lo.
// request POST /posts
// headers.authorization = "token jwt"
// body JSON
{
"content": "Partiu praia!"
}
// response
// status 201 CREATED
{
id: "52fbc8b7-bd7e-4ce2-bba7-2e51c7124bdc",
content: "Partiu praia!",
likes: 0,
dislikes: 0,
creator: {
id: "u002",
nickname: "Alex"
},
createdAt: "2023-03-12T16:41:17.187Z",
updatedAt: "2023-03-12T16:41:17.187Z"
}
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 festinha na casa da Mari!"
}
// response
// status 200 OK
{
message: "Post editado com sucesso"
}
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
// params.id = "idToDelete"
// headers.authorization = "token jwt"
// response
// status 200 OK
{
message: "Post deletado com sucesso"
}
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
{
message: "Reação realizada com sucesso"
}
Endpoint protegido, requer um token jwt para acessá-lo.
// request GET /comments
// headers.authorization = "token jwt"
// response
// status 200 OK
[
{
id: "ef894ae1-17f4-8900-9f54-165af46f66e6",
postId: "db704ae1-18c8-4895-9f54-165af46f66e6",
content: "Feliz demais!!",
likes: 0,
dislikes: 0,
createdAt: "2023-02-20T19:35:38.841Z",
updatedAt: "2023-02-20T19:37:22.265Z",
creator: {
id: "8bc4ea9c-b511-4c14-bedd-16df2a077485",
nickname: "Andrea"
}
},
{
id: "uma uuid v4",
postId: "uma uuid v4",
content: "jhdlkjhdkljhdk!!",
likes: 0,
dislikes: 0,
createdAt: "2023-02-20T19:35:38.841Z",
updatedAt: "2023-02-20T19:37:22.265Z",
creator: {
id: "uma uuid v4",
nickname: "Fulano"
}
}
]
Endpoint protegido, requer um token jwt para acessá-lo.
// request POST /comments
// headers.authorization = "token jwt"
// body JSON
{
"content": "To saindo pra praia!"
}
// response
// status 201 CREATED
{
id: "uma uuid v4",
content: "To saindo pra praia!",
likes: 0,
dislikes: 0,
creator: {
id: "uma uuid v42",
nickname: "Alex"
},
createdAt: "2023-03-12T16:41:17.187Z",
updatedAt: "2023-03-12T16:41:17.187Z"
}
Endpoint protegido, requer um token jwt para acessá-lo.
Só quem criou o comentário pode editá-lo e somente o conteúdo pode ser editado.
// request PUT /posts/:id
// headers.authorization = "token jwt"
// body JSON
{
"content": "Partiu festinha na casa da Mari!"
}
// response
// status 200 OK
{
message: "Comentário editado com sucesso"
}
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
// params.id = "idToDelete"
// headers.authorization = "token jwt"
// response
// status 200 OK
{
message: "Comentário deletado com sucesso"
}
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
{
message: "Reação realizada com sucesso"
}
-
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 valor 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)
Marina Jaudy - [email protected]
Project Backend Link: https://github.com/marinajaudy/labeddit-backend.git
Project Frontend Link: https://github.com/marinajaudy/labeddit-frontend.git
- Aos professores da Labenu
- Meus colegas de sala que me ajudaram no processo do projeto
- Meus familiares pelo apoio ao longo da construção do projeto