- Sobre e motivação
- Tecnologias utilizadas
- Como executar o projeto
- Documentação
- Estrutura do projeto
- API
- > Endpoint POST /login:
- > Endpoint POST /user:
- > Endpoint GET /user/:id:
- > Endpoint GET /user:
- > Endpoint POST /categories:
- > Endpoint GET /categories:
- > Endpoint POST /post:
- > Endpoint GET /post:
- > Endpoint GET /post/:id:
- > Endpoint PUT /post/:id:
- > Endpoint DELETE /post/:id:
- > Endpoint DELETE /user/me:
- Créditos
O projeto é um API para gerênciar posts, categories e escritores(users) de um blog. O objetivo foi estudar ORM e JWT. Para estudar ORM escolhi Sequelize visto que é uma tecnologia bem estabelecida no mercado. Neste projeto pude entender que:
- Migrations são uma maneira de evoluir a estrutura da banco de dados (tabelas, colunas e relacionamentos) de forma organizada, segura e produtiva;
- Seeds são muito úteis para testes ou pré-popular o banco de dados;
- Transaction servem para garantir a atomicidade do banco de dados;
- Operações são a base de todo ORM. São métodos que facilitam o CRUD;
- JWT é usado para garantir a integridade da mensagem. Garantido que ela não foi adulterada;
- Relacionamentos (1:1, 1:N e N:N) até que são um pouco mais simples com ORM;
- Sequelize
- JavaScript
- Docker
- Eslint
- Joi
- Express.js
- Node.js
- Nodemon
- NYC
- JWT
- MySQL
1 - Levante os containers:
docker-compose up -d --build
2 - Acesse o container:
docker exec -it blogs_api bash
3 - Instale as dependências:
npm install
4 - De permissão para o container modificar a pasta app:
chown -R root /app
5 - Crie o banco de dados e execute as migrations:
npm run prestart
6 - Execute as seeds:
npm run seed
7 - Execute o projeto:
npm run debug
8 - Use algum serviço para fazer requisições HTTP:
- As requisições deve ser feitas no localhost na porta 3000
- Dicas de serviços: Thunder Client e Insomnia
Corpo da requisição:
{
"email": "email",
"password": "senha"
}
Resposta:
- Status code: 200
- json:
{ "token": "código JWT" }
Corpo da requisição:
{
"displayName": "name",
"email": "email",
"password": "senha",
"image": "url da imagem"
// o campo image não é obrigatório
}
Resposta:
- Status code: 201
- json:
{ "token": "código JWT" }
Header da requisição:
Authorization: "token(código JWT)"
Resposta:
- Status code: 200
- json:
{ "id": id, "displayName": "nome", "email": "email", "image": "url da imagem" },
Header da requisição:
Authorization: "token(código JWT)"
Resposta:
- Status code: 200
- json:
[ { "id": id, "displayName": "nome", "email": "email", "image": "url da imagem" }, /* ... */ ]
Header da requisição:
Authorization: "token(código JWT)"
Corpo da requisição:
{
"name": "name",
}
Resposta:
- Status code: 201
- json:
{ "id": id, "name": "nome", }
Header da requisição:
Authorization: "token(código JWT)"
Resposta:
- Status code: 200
- json:
[ { "id": id, "name": "nome" }, /* ... */ ]
Header da requisição:
Authorization: "token(código JWT)"
Corpo da requisição:
{
"title": "titulo",
"content": "conteúdo",
"categoryIds": [id, id, ...]
}
Resposta:
- Status code: 201
- json:
{ "id": id, "title": "titulo", "content": "conteúdo", "userId": id, "updated": "data da atualização", "published": "data de publicação" }
Header da requisição:
Authorization: "token(código JWT)"
Resposta:
- Status code: 200
- json:
[ { "id": id, "title": "titulo", "content": "conteúdo", "userId": id, "updated": "data da atualização", "published": "data de publicação", "user": { "id": id, "displayName": "nome", "email": "email", "image": "url da imagem" }, "categories": [ { "id": id, "name": "nome" } ] }, /* ... */ ]
Header da requisição:
Authorization: "token(código JWT)"
Resposta:
- Status code: 200
- json:
{ "id": id, "title": "titulo", "content": "conteúdo", "userId": id, "updated": "data da atualização", "published": "data de publicação", "user": { "id": id, "displayName": "nome", "email": "email", "image": "url da imagem" }, "categories": [ { "id": id, "name": "nome" } ] }
Header da requisição:
Authorization: "token(código JWT)"
Corpo da requisição:
{
"title": "titulo",
"content": "conteúdo"
}
Resposta:
- Status code: 200
- json:
{ "id": id, "title": "titulo", "content": "conteúdo", "userId": id, "updated": "data da atualização", "published": "data de publicação", "user": { "id": id, "displayName": "nome", "email": "email", "image": "url da imagem" }, "categories": [ { "id": id, "name": "nome" } ] }
Header da requisição:
Authorization: "token(código JWT)"
Resposta:
- Status code: 204
Header da requisição:
Authorization: "token(código JWT)"
Resposta:
- Status code: 204
Esses arquivos foram desenvolvidos pela Trybe:
- /src/config/ (tudo)
- /src/seeders/ (tudo)
- /src/app.js (parcial)
- /src/serve.js (parcial)
- Dockerfile (tudo)
- docker-compose.yml (tudo)
- package.json (parcial)]
- .eslintignore (tudo)
- .sequelizerc (tudo)
- .eslintrc.json (tudo)
- package-lock.json (parcial)
todo os outros arquivos foram desenvolvidos por mim