Tecnologias • Começando • Endpoints da API
A aplicação consiste em um sistema simples de e-commerce de livros, com gestão de estoque, realização de pedidos, filtros por diversos parâmetros e visualização dos produtos vendidos.
- JavaScript
- Jest
- Supertest
- Sequelize
- NodeJS
- PostgreSQL
- Git
/bookstore
├── /db
│ ├── /migrations
│ ├── /config
│ └── /seeders
├── /src
│ ├── /controllers
│ ├── /models
│ ├── /routes
│ ├── /services
│ ├── app.js
│ └── server.js
├── /tests
│ ├── bookController.test.js
│ └── orderController.test.js
├── jest.config.js
├── package.json
├── .env
└── README.md
-
db/migrations: Contém todos os arquivos de migração do banco de dados gerados pelo Sequelize. As migrations são utilizadas para criar, alterar ou remover tabelas e colunas no banco de dados de forma versionada e controlada.
-
db/config: Contém o arquivo de configuração do Sequelize que define os parâmetros de conexão para os diferentes ambientes (desenvolvimento, teste, produção).
-
src/controllers: Contém os controladores que lidam com a lógica de processamento das requisições HTTP. Eles são responsáveis por receber as requisições, chamar os serviços apropriados e retornar a resposta adequada ao cliente.
-
src/models: Contém os modelos Sequelize que definem a estrutura das tabelas do banco de dados e suas relações.
-
src/routes: Contém os arquivos de definição das rotas da API. Cada rota é associada a um controlador que trata as requisições para aquela rota.
-
src/services: Contém os serviços que encapsulam a lógica de negócio da aplicação. Os serviços são responsáveis por interagir com os modelos do banco de dados e realizar operações como criação, leitura, atualização e exclusão de registros.
-
src/app.js: O ponto de entrada da aplicação. Configura o Express, inicializa os middlewares, define as rotas.
-
src/server.js: Encapsulamento feito para separar as configurações do app e o servidor.
-
tests: Contém os arquivos de testes unitários escritos com Jest e Supertest. Os testes garantem que os controladores e os serviços funcionem corretamente.
-
package.json: Define as dependências do projeto, scripts de execução e configuração do npm.
-
.env: Arquivo de configuração que guarda variáveis de ambiente sensíveis como credenciais de acesso ao banco de dados.
Como clonar o projeto:
git clone https://github.com/danilomfreitas/desafio-backend-buzzmonitor.git
Use o .env.sample
como referência para criar seu arquivo de configuração .env
com suas credenciais do banco de dados
DB_USERNAME=your_username
DB_PASSWORD=your_password
DB_DATABASE_DEV=database_name
DB_DATABASE_TEST=database_name
DB_DATABASE_PROD=database_name
DB_HOST=your_host
DB_DIALECT=postgres
PORT=your_port
NODE_ENV=development/production/test
Instalando as dependências:
npm install
Conecte-se ao PostgreSQL e crie o banco de dados, após isso execute as migrações:
npx sequelize-cli db:migrate --config=db/config/config.js --migrations-path=db/migrations
Executando o projeto:
npm start
Executando os testes unitários:
npm test
rota | descrição |
---|---|
GET /books | recupera a lista de todos os livros registrados no sistema (ver detalhes) |
POST /books | cadastra um novo livro ao sistema (ver detalhes) |
GET /books/:id | recupera um livro por seu ID (ver detalhes) |
GET /books/search | recupera uma lista de livros baseados nos filtros escolhidos (ver detalhes) |
PUT /books/:id | edita as informações de um livro específico (ver detalhes) |
DELETE /books/:id | exclui um dos livros cadastrados a partir do ID (ver detalhes) |
POST /orders/ | solicita um pedido de venda de um livro (ver detalhes) |
GET /orders/ | recupera a lista de todos os pedidos solicitados (ver detalhes) |
GET /orders/search | recupera uma lista de pedidos baseado nos filtros escolhidos (ver detalhes) |
RESPONSE
[
{
"id": 2,
"title": "Harry Potter and the Philosopher's Stone",
"author": "JK Rowling",
"release_year": 1997,
"inventory": 12,
"createdAt": "2024-06-23T18:39:07.672Z",
"updatedAt": "2024-06-23T19:59:48.324Z"
},
{
"id": 4,
"title": "Lord of the Rings",
"author": "JRR Tolkien",
"release_year": 1954,
"inventory": 12,
"createdAt": "2024-06-24T14:30:41.346Z",
"updatedAt": "2024-06-24T14:30:41.346Z"
}
]
REQUEST
{
"title": "Harry Potter and the Philosopher's Stone",
"author": "JK Rowling",
"release_year": 1997,
"inventory":12
}
RESPONSE
{
"id": 2,
"title": "Harry Potter and the Philosopher's Stone",
"author": "JK Rowling",
"release_year": 1997,
"inventory": 2,
"createdAt": "2024-06-23T18:39:07.672Z",
"updatedAt": "2024-06-23T19:59:48.324Z"
}
RESPONSE
{
"id": 2,
"title": "Harry Potter and the Philosopher's Stone",
"author": "JK Rowling",
"release_year": 1997,
"inventory": 2,
"createdAt": "2024-06-23T18:39:07.672Z",
"updatedAt": "2024-06-23T19:59:48.324Z"
}
REQUEST
{
"inventory":10
}
Retorna um status code 204
, código de sucesso sem conteúdo adicional
REQUEST
{
"book_id":2,
"quantity":5
}
RESPONSE
{
"id": 7,
"book_id": 2,
"quantity": 2,
"status": "Accepted",
"updatedAt": "2024-06-24T14:58:15.421Z",
"createdAt": "2024-06-24T14:58:15.421Z"
}
RESPONSE
[
{
"id": 1,
"book_id": 2,
"quantity": 4,
"status": "Accepted",
"createdAt": "2024-06-23T18:48:36.858Z",
"updatedAt": "2024-06-23T18:48:36.858Z",
"book": {
"id": 2,
"title": "Harry Potter and the Philosopher's Stone",
"author": "JK Rowling",
"release_year": 1997,
"inventory": 8,
"createdAt": "2024-06-23T18:39:07.672Z",
"updatedAt": "2024-06-24T14:58:15.425Z"
}
},
{
"id": 2,
"book_id": 2,
"quantity": 20,
"status": "Refused",
"createdAt": "2024-06-23T18:48:44.975Z",
"updatedAt": "2024-06-23T18:48:44.975Z",
"book": {
"id": 2,
"title": "Harry Potter and the Philosopher's Stone",
"author": "JK Rowling",
"release_year": 1997,
"inventory": 8,
"createdAt": "2024-06-23T18:39:07.672Z",
"updatedAt": "2024-06-24T14:58:15.425Z"
}
}
]
RESPONSE
[
{
"id": 2,
"book_id": 2,
"quantity": 20,
"status": "Refused",
"createdAt": "2024-06-23T18:48:44.975Z",
"updatedAt": "2024-06-23T18:48:44.975Z",
"book": {
"id": 2,
"title": "Harry Potter and the Philosopher's Stone",
"author": "JK Rowling",
"release_year": 1997,
"inventory": 8,
"createdAt": "2024-06-23T18:39:07.672Z",
"updatedAt": "2024-06-24T14:58:15.425Z"
}
},
{
"id": 6,
"book_id": 2,
"quantity": 3,
"status": "Refused",
"createdAt": "2024-06-23T20:00:29.340Z",
"updatedAt": "2024-06-23T20:00:29.340Z",
"book": {
"id": 2,
"title": "Harry Potter and the Philosopher's Stone",
"author": "JK Rowling",
"release_year": 1997,
"inventory": 8,
"createdAt": "2024-06-23T18:39:07.672Z",
"updatedAt": "2024-06-24T14:58:15.425Z"
}
}
]