Esta é a documentação para configurar e executar a API Jedex utilizando Docker Compose.
Certifique-se de ter os seguintes softwares instalados em sua máquina:
-
Clone o repositório:
git clone https://github.com/marmota-alpina/jedex_api.git cd jedex_api
-
Crie e inicie os containers:
Execute o comando abaixo para criar e iniciar os containers definidos no arquivo
docker-compose.yml
.docker-compose up --build
O comando acima fará o seguinte:
- Construirá a imagem da API a partir do Dockerfile na raiz do projeto.
- Criará e iniciará um container para a API com o nome
jedex_api
. - Criará e iniciará um container para o banco de dados PostgreSQL com o nome
jedex_postgres
. - Configurará uma rede interna para comunicação entre os containers.
- Mapeará a porta 8000 do container da API para a porta 5001 da máquina host.
- Mapeará a porta 5432 do container do PostgreSQL para a porta 5434 da máquina host.
- Criará um volume Docker para persistir os dados do banco de dados.
-
Acesse a API:
Após iniciar os containers, a API estará disponível em
http://localhost:5001
.
- Build: O container da API é construído a partir do Dockerfile na raiz do projeto.
- Container Name:
jedex_api
- Ports: A API está mapeada para a porta
5001
no host e8000
no container. - Depends On: A API depende do serviço
jedex_postgres
. - Environment Variables:
DATABASE_URL
: URL de conexão com o banco de dados PostgreSQL.
- Image:
postgres:13
- Environment Variables:
POSTGRES_USER
: Nome do usuário do PostgreSQL (jedex_user
).POSTGRES_PASSWORD
: Senha do usuário do PostgreSQL (password
).POSTGRES_DB
: Nome do banco de dados (jedex_db
).
- Volumes: Um volume Docker (
jedex_postgres_data
) é utilizado para persistir os dados do banco de dados. - Ports: O PostgreSQL está mapeado para a porta
5434
no host e5432
no container.
jedex_postgres_data
: Volume Docker para persistir os dados do banco de dados PostgreSQL.
Para parar e remover os containers, utilize o comando:
docker-compose down
Se você deseja contribuir com este projeto, por favor, siga os passos abaixo:
- Faça um fork do repositório.
- Crie uma branch para a sua feature (
git checkout -b feature/nova-feature
). - Commit suas alterações (
git commit -am 'Adiciona nova feature'
). - Faça um push para a branch (
git push origin feature/nova-feature
). - Crie um novo Pull Request.
Para quaisquer dúvidas ou problemas, sinta-se à vontade para abrir uma issue.
Jedex API é uma aplicação desenvolvida com Flask para fornecer serviços relacionados ao cálculo de frete, gerenciamento de empresas e contratos. Este README fornece informações sobre como usar os endpoints disponíveis na API.
- Versão da API: 1.0.0
- Documentação OpenAPI: 3.1.0
Calcula o valor do frete com base nos dados fornecidos.
- Tags: Freight
- Resumo: Calcula o valor do frete
- Request Body: Necessário (JSON)
- Schema:
FreightRequest
- Schema:
- Responses:
200
: Sucesso (Schema:FreightResponse
)422
: Erro de Validação404
: Não Encontrado500
: Erro Interno do Servidor
Obtém a lista de todas as empresas cadastradas.
- Tags: Company
- Resumo: Lê as empresas cadastradas
- Responses:
200
: Sucesso (Array deCompanyResponse
)422
: Erro de Validação404
: Não Encontrado500
: Erro Interno do Servidor
Cria uma nova empresa.
- Tags: Company
- Resumo: Cria uma nova empresa
- Request Body: Necessário (JSON)
- Schema:
CompanyCreate
- Schema:
- Responses:
200
: Sucesso (Schema:CompanyResponse
)422
: Erro de Validação404
: Não Encontrado500
: Erro Interno do Servidor
Obtém detalhes de uma empresa específica.
- Tags: Company
- Resumo: Lê uma empresa específica
- Path Parameters:
company_id
(string): ID da empresa
- Responses:
200
: Sucesso (Schema:CompanyResponse
)422
: Erro de Validação404
: Não Encontrado500
: Erro Interno do Servidor
Atualiza os dados de uma empresa específica.
- Tags: Company
- Resumo: Atualiza uma empresa específica
- Path Parameters:
company_id
(string): ID da empresa
- Request Body: Necessário (JSON)
- Schema:
CompanyUpdate
- Schema:
- Responses:
200
: Sucesso (Schema:CompanyResponse
)422
: Erro de Validação404
: Não Encontrado500
: Erro Interno do Servidor
Deleta uma empresa específica.
- Tags: Company
- Resumo: Deleta uma empresa específica
- Path Parameters:
company_id
(string): ID da empresa
- Responses:
200
: Sucesso (booleano)422
: Erro de Validação404
: Não Encontrado500
: Erro Interno do Servidor
Obtém a lista de todos os contratos cadastrados.
- Tags: Contract
- Resumo: Obtém todos os contratos
- Responses:
200
: Sucesso (Array deContract
)422
: Erro de Validação404
: Não Encontrado500
: Erro Interno do Servidor
Cria um novo contrato.
- Tags: Contract
- Resumo: Cria um novo contrato
- Request Body: Necessário (JSON)
- Schema:
ContractCreate
- Schema:
- Responses:
201
: Sucesso (Schema:Contract
)422
: Erro de Validação404
: Não Encontrado500
: Erro Interno do Servidor
Obtém detalhes de um contrato específico.
- Tags: Contract
- Resumo: Obtém um contrato específico
- Path Parameters:
contract_id
(string): ID do contrato
- Responses:
200
: Sucesso (Schema:Contract
)422
: Erro de Validação404
: Não Encontrado500
: Erro Interno do Servidor
Atualiza os dados de um contrato específico.
- Tags: Contract
- Resumo: Atualiza um contrato específico
- Path Parameters:
contract_id
(string): ID do contrato
- Request Body: Necessário (JSON)
- Schema:
ContractUpdate
- Schema:
- Responses:
200
: Sucesso (Schema:Contract
)422
: Erro de Validação404
: Não Encontrado500
: Erro Interno do Servidor
Deleta um contrato específico.
- Tags: Contract
- Resumo: Deleta um contrato específico
- Path Parameters:
contract_id
(string): ID do contrato
- Responses:
204
: Sucesso422
: Erro de Validação404
: Não Encontrado500
: Erro Interno do Servidor
Lê a raiz do serviço.
- Resumo: Lê a raiz do serviço
- Responses:
200
: Sucesso
{
"type": "object",
"required": ["register_number", "name", "address", "city", "state", "postal_code", "phone", "email"],
"properties": {
"register_number": { "type": "string", "title": "Register Number" },
"name": { "type": "string", "title": "Name" },
"address": { "type": "string", "title": "Address" },
"city": { "type": "string", "title": "City" },
"state": { "type": "string", "title": "State" },
"postal_code": { "type": "string", "title": "Postal Code" },
"phone": { "type": "string", "title": "Phone" },
"email": { "type": "string", "format": "email", "title": "Email" }
},
"title": "CompanyCreate"
}
{
"type": "object",
"required": ["register_number", "name", "address", "city", "state", "postal_code", "phone", "email", "id"],
"properties": {
"register_number": { "type": "string", "title": "Register Number" },
"name": { "type": "string", "title": "Name" },
"address": { "type": "string", "title": "Address" },
"city": { "type": "string", "title": "City" },
"state": { "type": "string", "title": "State" },
"postal_code": { "type": "string", "title": "Postal Code" },
"phone": { "type": "string", "title": "Phone" },
"email": { "type": "string", "format": "email", "title": "Email" },
"id": { "type": "string", "title": "Id" }
},
"title": "CompanyResponse"
}
{
"type": "object",
"properties": {
"register_number": { "anyOf": [{ "type": "string" }, { "type": "null" }], "title": "Register Number" },
"name": { "anyOf": [{ "type": "string" }, { "type": "null" }], "title": "Name" },
"address": { "anyOf": [{ "type": "string" }, { "type": "null" }], "title": "Address" },
"city": { "anyOf": [{ "type": "string" }, { "type": "null" }], "title": "City" },
"state": { "anyOf": [{ "type": "string" }, { "type": "null" }], "title": "State" },
"postal_code": { "anyOf": [{ "type": "string" }, { "type": "null" }], "title": "Postal Code" },
"phone": { "anyOf": [{ "type": "string" }, {
"type": "null" }], "title": "Phone" },
"email": { "anyOf": [{ "type": "string" }, { "type": "null" }], "format": "email", "title": "Email" }
},
"title": "CompanyUpdate"
}
{
"type": "object",
"required": ["company_id", "contract_number", "start_date", "end_date"],
"properties": {
"company_id": { "type": "string", "title": "Company Id" },
"contract_number": { "type": "string", "title": "Contract Number" },
"start_date": { "type": "string", "format": "date", "title": "Start Date" },
"end_date": { "type": "string", "format": "date", "title": "End Date" }
},
"title": "ContractCreate"
}
{
"type": "object",
"properties": {
"company_id": { "anyOf": [{ "type": "string" }, { "type": "null" }], "title": "Company Id" },
"contract_number": { "anyOf": [{ "type": "string" }, { "type": "null" }], "title": "Contract Number" },
"start_date": { "anyOf": [{ "type": "string" }, { "type": "null" }], "format": "date", "title": "Start Date" },
"end_date": { "anyOf": [{ "type": "string" }, { "type": "null" }], "format": "date", "title": "End Date" }
},
"title": "ContractUpdate"
}
{
"type": "object",
"required": ["company_id", "contract_number", "start_date", "end_date", "id"],
"properties": {
"company_id": { "type": "string", "title": "Company Id" },
"contract_number": { "type": "string", "title": "Contract Number" },
"start_date": { "type": "string", "format": "date", "title": "Start Date" },
"end_date": { "type": "string", "format": "date", "title": "End Date" },
"id": { "type": "string", "title": "Id" }
},
"title": "Contract"
}
{
"type": "object",
"required": ["origin_postal_code", "destination_postal_code", "weight"],
"properties": {
"origin_postal_code": { "type": "string", "title": "Origin Postal Code" },
"destination_postal_code": { "type": "string", "title": "Destination Postal Code" },
"weight": { "type": "number", "title": "Weight" }
},
"title": "FreightRequest"
}
{
"type": "object",
"required": ["value", "estimated_days"],
"properties": {
"value": { "type": "number", "title": "Value" },
"estimated_days": { "type": "integer", "title": "Estimated Days" }
},
"title": "FreightResponse"
}