- Descrição do projeto
- Funcionalidades
- Como rodar a aplicação
- Como rodar os testes
- Como executar a análise do código
- Como derrubar a aplicação
- Documentação da API
Esta API permite o gerenciamento de informações relacionadas a cargas, listas, produtos e usuários. Sua autenticação é baseado em tokens JWT (JSON Web Tokens), garantindo que apenas usuários autenticados acessem recursos protegidos.
- POST /api/v1/login
- GET /api/v1/loads (Listar todas as cargas com paginação)
- GET /api/v1/loads/:id (Detalhes de uma carga)
- POST /api/v1/loads (Criar uma carga)
- PUT /api/v1/loads/:id (Editar uma carga existente)
- DELETE /api/v1/loads/:id (Excluir uma carga)
- GET /api/v1/loads/:load_id/orders (Listar todas as listas de uma carga com paginação)
- GET /api/v1/orders/:id (Detalhes de uma lista)
- POST /api/v1/loads/:load_id/orders (Criar uma nova lista para uma carga)
- PUT /api/v1/orders/:id (Editar uma lista existente)
- DELETE /api/v1/orders/:id (Excluir uma lista)
- GET /api/v1/products (Listar todos os produtos com paginação)
- GET /api/v1/all/products (Listar todos os produtos sem paginação)
- GET /api/v1/products/:id (Detalhes de um produto)
- POST /api/v1/products (Criar um novo produto)
- PUT /api/v1/products/:id (Editar um produto existente)
- DELETE /api/v1/products/:id (Excluir um produto)
- GET /api/v1/orders/:order_id/order_products (Listar produtos de uma lista específica)
- GET /api/v1/order_products/:id (Detalhes de um produto da lista)
- POST /api/v1/orders/:order_id/order_products (Adicionar um novo produto a uma lista)
- PUT /api/v1/order_products/:id (Editar um produto da lista)
- DELETE /api/v1/order_products/:id (Excluir um produto da lista)
- GET /api/v1/users (Listar todos os usuários com paginação)
- GET /api/v1/users/:id (Detalhes de um usuário)
- POST /api/v1/users (Criar um novo usuário)
- PUT /api/v1/users/:id (Editar um usuário existente)
- DELETE /api/v1/users/:id (Excluir um usuário)
- POST /api/v1/loads/import (Importar dados da planilha de cargas)
- POST /api/v1/products/import (Importar dados da planilha de produtos)
- POST /api/v1/users/import (Importar dados da planilha de usuários)
No terminal, clone o projeto:
git clone [email protected]:thalis-freitas/easy_pallet_api.git
Entre na pasta do projeto:
cd easy_pallet_api
Certifique-se de que o Docker esteja em execução em sua máquina e construa as imagens:
docker compose build
Suba os containers:
docker compose up -d
Acesse o container da aplicação:
docker compose exec app bash
Crie o banco de dados:
rails db:create
Execute as migrações:
rails db:migrate
Crie um usuário:
rails db:seed
- Dados do usuário criado:
Login | Senha |
---|---|
user | pass |
rspec
rubocop
docker compose down
200 OK
: A requisição foi bem sucedida.201 Created
: O registro foi criado com sucesso.401 Unauthorized
: Acesso não autorizado.404 Not Found
: O recurso solicitado não foi encontrado.422 Unprocessable Entity
: Erro de validação de dados, detalhes dos erros são fornecidos no corpo da resposta.500 Internal Server Error
: Erro interno do servidor.
Nome | Tipo | Descrição |
---|---|---|
page |
Inteiro | Número da página desejada. |
per_page |
Inteiro | Número de cargas por página. |
Endpoint: POST /api/v1/login
Este endpoint permite que um usuário faça login fornecendo seu nome de usuário (login) e senha.
Nome | Tipo | Descrição |
---|---|---|
login |
String | Login do usuário. |
password |
String | A senha do usuário. |
{
"user": {
"login": "user",
"password": "pass"
}
}
Retorno 200
(Sucesso)
Se o login for bem-sucedido, o endpoint retornará um código de status 200 OK
juntamente com os detalhes do usuário autenticado e um token de acesso.
{
"user": {
"id": 3,
"name": "User",
"login": "user"
},
"token": "eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxfQ.ETUYUOkmfnWsWIvA8iBOkE2s1ZQ0V_zgnG_c4QRrhbg"
}
Retorno 422
(Erro de Validação)
Se o login ou a senha forem inválidos, o endpoint retornará um código de status 422 Unprocessable Entity
com informações sobre o erro de validação.
{
"errors": "Login ou senha inválidos"
}
Endpoint: GET /api/v1/loads
Este endpoint permite obter uma lista paginada de todas as cargas registradas no sistema.
GET /api/v1/loads?page=1&per_page=10
Se a consulta for bem-sucedida, o endpoint retornará um código de status 200 OK
juntamente com a lista de cargas e informações de paginação.
{
"loads": [
{
"id": 1,
"code": "EIG924L4",
"delivery_date": "2023-10-07"
},
{
"id": 2,
"code": "S29EBXI0",
"delivery_date": "2023-10-01"
}
],
"meta": {
"current_page": 1,
"total_items": 2,
"items_per_page": 10
}
}
Endpoint: GET /api/v1/loads/:id
Este endpoint permite obter detalhes de uma carga específica com base no ID fornecido.
Se a consulta for bem-sucedida, o endpoint retornará um código de status 200 OK juntamente com os detalhes da carga solicitada.
{
"id": 1,
"code": "EIG924L4",
"delivery_date": "2023-10-07"
}
Endpoint: POST /api/v1/loads
Este endpoint permite a criação de uma nova carga.
Nome | Tipo | Descrição |
---|---|---|
code |
String | O código da carga. |
delivery_date |
Data | Data de entrega da carga. |
{
"code": "EIG924L4",
"delivery_date": "2023-10-07"
}
Retorno 201
(Sucesso)
Se a carga for criada com sucesso, o endpoint retornará um código de status 201 Created
juntamente com os detalhes da carga criada.
{
"id": 3,
"code": "EIG924L4",
"delivery_date": "2023-10-07"
}
Retorno 422
(Erro de Validação)
Se a validação falhar devido a dados inválidos, o endpoint retornará um código de status 422 Unprocessable Entity
juntamente com informações sobre os erros de validação.
{
"errors": [
"code": "Código não pode ficar em branco",
"delivery_date": "Data de entrega não pode ficar em branco"
]
}
Endpoint: PUT /api/v1/loads/:id
Este endpoint permite a edição de uma carga existente com base no ID fornecido.
{
"code": "NOVO-CODIGO",
"delivery_date": "2023-10-14"
}
Retorno 200
(Sucesso)
Se a carga for editada com sucesso, o endpoint retornará um código de status 200 OK
juntamente com os detalhes da carga atualizada.
{
"id": 1,
"code": "NOVO-CODIGO",
"delivery_date": "2023-10-14"
}
Endpoint: DELETE /api/v1/loads/:id
Este endpoint permite a exclusão de uma carga com base no ID fornecido.
Retorno 200
(Sucesso)
Se a carga for excluída com sucesso, o endpoint retornará um código de status 200 Ok
.
Endpoint: GET /api/v1/loads/:load_id/orders
Este endpoint permite obter uma lista paginada com todas as listas de uma carga.
GET /api/v1/loads/1/orders?per_page=2&page=5
Se a consulta for bem-sucedida, o endpoint retornará um código de status 200 OK
juntamente com a lista de listas e informações de paginação.
{
"orders": [
{
"id": 10,
"code": "WBNPCO3WX",
"bay": "M8L",
"load_id": 1
},
{
"id": 11,
"code": "3GAHSYZC6",
"bay": "OL4",
"load_id": 1
}
],
"meta": {
"current_page": 5,
"total_items": 30,
"items_per_page": 2
}
}
Endpoint: GET /api/v1/orders/:id
Este endpoint permite obter detalhes de uma lista específica com base no ID fornecido.
Se a consulta for bem-sucedida, o endpoint retornará um código de status 200 OK juntamente com os detalhes da lista.
{
"id": 3,
"code": "WUT414FXL",
"bay": "FS3"
}
Endpoint: POST /api/v1/loads/:load_id/orders
Este endpoint permite a criação de uma nova lista para uma carga.
Nome | Tipo | Descrição |
---|---|---|
code |
String | Código da lista. |
bay |
String | Baia da lista. |
{
"code": "WUT414FXL",
"bay": "FS3"
}
Retorno 201
(Sucesso)
Se a lista for criada com sucesso, o endpoint retornará um código de status 201 Created
juntamente com as informações da lista criada.
{
"id": 3,
"code": "WUT414FXL",
"bay": "FS3"
}
Retorno 422
(Erro de Validação)
Se a validação falhar devido a dados inválidos, o endpoint retornará um código de status 422 Unprocessable Entity
juntamente com informações sobre os erros de validação.
{
"errors": [
"code": "Código não pode ficar em branco",
"bay": "Baia não pode ficar em branco"
]
}
Endpoint: PUT /api/v1/orders/:id
Este endpoint permite a edição de uma lista existente com base no ID fornecido.
{
"code": "NOVO-CODIGO",
"bay": "FS3"
}
Retorno 200
(Sucesso)
Se a lista for atualizada com sucesso, o endpoint retornará um código de status 200 OK
juntamente com os dados da lista atualizada.
{
"id": 1,
"code": "NOVO-CODIGO",
"bay": "FS3"
}
Endpoint: DELETE /api/v1/orders/:id
Este endpoint permite a exclusão de uma lista com base no ID fornecido.
Retorno 200
(Sucesso)
Se a lista for excluída com sucesso, o endpoint retornará um código de status 200 Ok
.
Endpoint: GET /api/v1/products
Este endpoint permite obter uma lista paginada de todos os produtos cadastrados no sistema.
GET /api/v1/products?per_page=1
Se a consulta for bem-sucedida, o endpoint retornará um código de status 200 OK
juntamente com a lista de produtos e informações de paginação.
{
"products": [
{
"id": 1,
"name": "QUI EXCEPTURI OPTIO ET.",
"ballast": "76"
},
],
"meta": {
"current_page": 1,
"total_items": 60,
"items_per_page": 2
}
}
Endpoint: GET /api/v1/all/products
Este endpoint permite obter uma lista com todos os produtos cadastrados no sistema.
Se a consulta for bem-sucedida, o endpoint retornará um código de status 200 OK
juntamente com a lista dos produtos.
[
{
"id": 1,
"name": "CONSEQUATUR QUASI REICIENDIS ET.",
"ballast": "100"
},
{
"id": 2,
"name": "EUM EST PERFERENDIS MODI.",
"ballast": "33"
},
{
"id": 3,
"name": "DOLORUM EVENIET QUIA VOLUPTATEM.",
"ballast": "51"
}
]
Endpoint: GET /api/v1/products/:id
Este endpoint permite obter detalhes de um produto específico com base no ID fornecido.
Se a consulta for bem-sucedida, o endpoint retornará um código de status 200 OK juntamente com os detalhes do produto.
{
"name": "ULLAM EOS TOTAM MODI",
"ballast": "16"
}
Endpoint: POST /api/v1/products
Este endpoint permite a criação de um novo produto.
Nome | Tipo | Descrição |
---|---|---|
name |
String | O nome do produto. |
ballast |
String | O lastro do produto. |
{
"name": "ULLAM EOS TOTAM MODI",
"ballast": "16"
}
Retorno 201
(Sucesso)
Se o produto for criado com sucesso, o endpoint retornará um código de status 201 Created
juntamente com os detalhes do produto criado.
{
"id": 3,
"name": "ULLAM EOS TOTAM MODI",
"ballast": "16"
}
Retorno 422
(Erro de Validação)
Se a validação falhar devido a dados inválidos, o endpoint retornará um código de status 422 Unprocessable Entity
juntamente com informações sobre os erros de validação.
{
"errors": [
"name":"Nome não pode ficar em branco",
]
}
Endpoint: PUT /api/v1/products/:id
Este endpoint permite a edição de um produto existente com base no ID fornecido.
{
"name": "NOVO NOME",
"ballast": "15"
}
Retorno 200
(Sucesso)
Se o produto for atualizado com sucesso, o endpoint retornará um código de status 200 OK
juntamente com os detalhes do produto atualizado.
{
"id": 3,
"name": "NOVO NOME",
"ballast": "15"
}
Endpoint: DELETE /api/v1/products/:id
Este endpoint permite a exclusão de um produto com base no ID fornecido.
Retorno 200
(Sucesso)
Se o produto for excluído com sucesso, o endpoint retornará um código de status 200 Ok
.
Endpoint: GET /api/v1/orders/:order_id/order_products
Este endpoint permite obter uma lista com todos os produtos de uma lista.
GET /api/v1/orders/1/order_products?per_page=2&page=5
Se a consulta for bem-sucedida, o endpoint retornará um código de status 200 OK
juntamente com os produtos da lista.
[
{
"id": 1,
"order_id": 1,
"product_id": 41,
"quantity": "229"
},
{
"id": 2,
"order_id": 1,
"product_id": 42,
"quantity": "242"
}
]
Endpoint: GET /api/v1/order_products/:id
Este endpoint permite obter detalhes de um produto da lista específico com base no ID fornecido.
Se a consulta for bem-sucedida, o endpoint retornará um código de status 200 OK juntamente com os detalhes do produto da lista.
{
"product_id": 1,
"quantity": "5"
}
Endpoint: POST /api/v1/orders/:order_id/order_products
Este endpoint permite a criação de um novo produto de uma lista.
Nome | Tipo | Descrição |
---|---|---|
product_id |
Inteiro | ID do produto. |
quantity |
String | Quantidade de produtos. |
{
"product_id": 1,
"quantity": "5"
}
Retorno 201
(Sucesso)
Se o produto da lista for criado com sucesso, o endpoint retornará um código de status 201 Created
juntamente com os dados do produto da lista.
{
"id": 5,
"order_id":1,
"product_id": 1,
"quantity":"5"
}
Retorno 422
(Erro de Validação)
Se a validação falhar devido a dados inválidos, o endpoint retornará um código de status 422 Unprocessable Entity
juntamente com informações sobre os erros de validação.
{
"errors": [
"quantity": "Quantidade não pode ficar em branco"
"product_id": "Produto é obrigatório(a)"
]
}
Endpoint: PUT /api/v1/orders/:id
Este endpoint permite a edição de um produto de uma lista com base no seu ID.
{
"product_id": "1",
"quantity": "12"
}
Retorno 200
(Sucesso)
Se o produto da lista for atualizada com sucesso, o endpoint retornará um código de status 200 OK
juntamente com os dados do produto da lista atualizados.
{
"id": 5,
"order_id":1,
"product_id": "1",
"quantity": "12"
}
Endpoint: DELETE /api/v1/order_products/:id
Este endpoint permite a exclusão de um produto de uma lista com base no ID fornecido.
Retorno 200
(Sucesso)
Se o produto da lista for removido com sucesso, o endpoint retornará um código de status 200 Ok
.
Endpoint: GET /api/v1/users
Este endpoint permite obter uma lista paginada com todos os usuários registrados no sistema.
GET /api/v1/users?per_page=2&page=3
Se a consulta for bem-sucedida, o endpoint retornará um código de status 200 OK
juntamente com a lista de usuários e informações de paginação.
{
"users": [
{
"id": 5,
"name": "officia",
"login": "autem24"
},
{
"id": 6,
"name": "dolores",
"login": "repellendus30"
}
],
"meta": {
"current_page": 3,
"total_items": 8,
"items_per_page": 2
}
}
Endpoint: GET /api/v1/users/:id
Este endpoint permite obter detalhes de um usuário com base no ID fornecido.
Se a consulta for bem-sucedida, o endpoint retornará um código de status 200 OK juntamente com os detalhes do usuário.
{
"id": 82,
"name": "User",
"login": "user_1999"
}
Endpoint: POST /api/v1/users
Este endpoint permite o cadastro de um novo usuário.
Nome | Tipo | Descrição |
---|---|---|
name |
String | O nome do usuário. |
login |
String | O login do usuário. |
password |
String | A senha do usuário. |
{
"name": "User",
"login": "user_1999",
"password": "pass1234"
}
Retorno 201
(Sucesso)
Se o usuário for cadastrado com sucesso, o endpoint retornará um código de status 201 Created
juntamente com os detalhes do usuário criado.
{
"user": {
"id": 82,
"name": "User",
"login": "user_1999"
}
}
Retorno 422
(Erro de Validação)
Se a validação falhar devido a dados inválidos, o endpoint retornará um código de status 422 Unprocessable Entity
juntamente com informações sobre os erros de validação.
{
"errors": {
"name": "Nome não pode ficar em branco",
"login": "Login já está em uso",
"password": "Senha deve conter, no mínimo, 4 caracteres"
}
}
Endpoint: PUT /api/v1/users/:id
Este endpoint permite a edição de um usuário com base no ID fornecido.
{
"login": "user84",
"password": "new_password"
}
Retorno 200
(Sucesso)
Se o usuário for editado com sucesso, o endpoint retornará um código de status 200 OK
juntamente com os detalhes do usuário.
{
"id": 84,
"name": "User",
"login": "user84"
}
Endpoint: DELETE /api/v1/users/:id
Este endpoint permite a exclusão de um usuário com base no ID fornecido.
Retorno 200
(Sucesso)
Se o usuário for removido com sucesso, o endpoint retornará um código de status 200 Ok
.
Nome | Tipo | Descrição |
---|---|---|
file |
Arquivo | Arquivo XLSX contendo dados de usuários. |
Retorno 201
(Sucesso)
Se a importação for bem-sucedida, o endpoint retornará um código de status 201 Created
e os dados serão criados com base nos dados do arquivo.
Retorno 422
(Erro de Validação)
Se a validação dos dados do arquivo falhar, devido a formato inválido o endpoint retornará um código de status 422 Unprocessable Entity
juntamente com a mensagem de erro de validação.
{ "error": "Formato de arquivo inválido" }
Endpoint: POST /api/v1/import/users
Este endpoint permite a importação de novos usuários a partir de um arquivo XLSX.
Endpoint: POST /api/v1/import/products
Este endpoint permite a importação de novos produtos a partir de um arquivo XLSX.
Endpoint: POST /api/v1/import/loads
Este endpoint permite a importação de novas cargas a partir de um arquivo XLSX.