Este repositório contém o serviço de pedidos (order-service) de um sistema de lanchonete, onde os pedidos são gerenciados, os status são atualizados e as interações com o sistema de pagamento são realizadas.
O Order Service é responsável pela criação de pedidos, atualização de status e integração com o serviço de pagamento. Ele também gerencia a relação entre pedidos e produtos e oferece uma API para interagir com os dados de pedidos e produtos.
- Criação de pedidos: Permite a criação de novos pedidos a partir de um cliente autenticado.
- Atualização de status: Permite que o status do pedido seja atualizado, como
paid,preparing,delivered, etc. - Integração com serviço de pagamento: Comunica-se com um serviço de pagamento para gerar links de pagamento ou QR codes.
- Gerenciamento de produtos e categorias: Ações CRUD (Create, Read, Update, Delete) para produtos e categorias.
- Rastreamento de pedidos: Permite o rastreamento do status de cada pedido.
- FastAPI: Framework para construir APIs rápidas.
- SQLAlchemy: ORM para interação com o banco de dados.
- PostgreSQL: Banco de dados relacional usado para armazenar dados de pedidos, produtos e categorias.
- Docker: Utilizado para containerizar o serviço.
- Psycopg2: Adaptador de banco de dados PostgreSQL para Python.
- Python 3.10+
- Docker & Docker Compose (para containers)
- PostgreSQL (como banco de dados relacional)
Clone o repositório para sua máquina local:
git clone <<url>>
cd order-serviceCrie e ative um ambiente virtual:
python3 -m venv .venv
source .venv/bin/activate # Para macOS/Linux
.venv\Scripts\activate # Para WindowsInstale as dependências do projeto:
pip install poetry
poetry installO Order Service utiliza o PostgreSQL como banco de dados. Você pode usar o Docker para rodar uma instância do PostgreSQL localmente.
Execute o seguinte comando para iniciar o PostgreSQL:
docker-compose up -dCrie um arquivo .env com as seguintes variáveis:
DATABASE_URL= "<<suaconexão>>"
AUTH_SERVICE_URL=http://auth-service:8000
PAYMENT_SERVICE_URL=http://payment-service:8002DATABASE_URLcontém a URL de conexão do banco de dados PostgreSQL.AUTH_SERVICE_URLcontém a URL de integração com o serviço de autorização.PAYMENT_SERVICE_URLcontém a URL de integração com o serviço de pagamento.
Execute o comando abaixo para iniciar a aplicação:
docker compose up --build -dIsso criará o banco de dados e o serviço. Talvez seja necessário reiniciar o serviço caso o bd demore muito para ficar health.
Se estiver com o docker local, o servidor estará disponível em http://127.0.0.1:8001.
A API do Order Service possui os seguintes endpoints:
POST /orders/: Cria um novo pedido.GET /orders/: Recupera uma lista de pedidos ou,GET /orders/{order_id}: Recupera um pedido específico pelo ID.PATCH /orders/{order_id}: Atualiza o status de um pedido.
POST /products/: Cria um novo produto.GET /products/: Recupera uma lista de produtos, ouGET /products/{product_id}: Recupera um produto específico.PATCH /products/{product_id}: Atualiza um produto.
POST /categories/: Cria uma nova categoria.GET /categories/: Recupera uma lista de categorias, ouGET /categories/{category_id}: Recupera uma categoria específica.PATCH /categories/{category_id}: Atualiza uma categoria.
Para executar os testes automatizados com pytest, use o seguinte comando:
pytestIsso executará todos os testes definidos no repositório. (Necessidade de implementação).
Os testes de integração podem ser executados utilizando o banco de dados de testes configurado em um arquivo docker-compose.test.yml ou um banco de dados em memória.
A suíte de testes também inclui testes unitários para verificar o comportamento das funções e métodos principais.
Para produção, recomenda-se o uso de Docker e Docker Compose para orquestrar os containers de forma eficiente. O arquivo docker-compose.yml pode ser configurado para criar e gerenciar os containers em um ambiente de produção.
- Construir os containers:
docker-compose up -d --build- Acessar o serviço em produção
Após o deploy, a API estará acessível no endereço especificado no arquivo docker-compose.yml.
- Faça o fork deste repositório.
- Crie uma nova branch (
git checkout -b feature/nova-feature). - Faça suas alterações e commit (
git commit -am 'Adicionando nova feature'). - Faça o push para a branch (
git push origin feature/nova-feature). - Abra um pull request.
Este projeto está licenciado sob a MIT License - veja o arquivo LICENSE para mais detalhes.
Se você encontrar problemas ou tiver dúvidas, sinta-se à vontade para abrir um issue ou fazer uma contribuição!