Skip to content

ArthurDS-tech/Order-Management-API

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C#

Sistema completo de gerenciamento de pedidos construído com .NET 8
Arquitetura de microsserviços escalável capaz de processar milhares de pedidos por minuto

🚀 Como rodar

Docker

🐳 Opção 1: Docker (Recomendado)

# Clone o repositório
git clone <repository-url>
cd OrderManagement

# Sobe tudo de uma vez - bancos, Redis, RabbitMQ e os serviços
docker-compose up -d

# Ou use o script PowerShell (Windows)
.\scripts\run-local.ps1

# Pra parar tudo
docker-compose down
# ou
.\scripts\stop-local.ps1

💻 Opção 2: Local (pra debug)

# 1. Suba a infraestrutura primeiro
docker-compose up -d postgres redis rabbitmq

# 2. Rode cada serviço em terminais separados
dotnet run --project src/ApiGateway
dotnet run --project src/OrderService
dotnet run --project src/PaymentService
dotnet run --project src/InventoryService
dotnet run --project src/NotificationService

🛠️ Opção 3: Scripts Úteis

# Build e testes
.\scripts\build.ps1

# Testa se a API tá funcionando
.\scripts\test-api.ps1

📋 Endpoints principais

Serviço Endpoint Descrição
🚪 Gateway http://localhost:5000 Ponto de entrada único
📦 Orders http://localhost:5001 Gerenciamento de pedidos
💳 Payments http://localhost:5002 Processamento de pagamentos
📋 Inventory http://localhost:5003 Controle de estoque
📬 Notifications http://localhost:5004 Envio de notificações

🔍 Swagger UI

Cada serviço tem sua documentação interativa:

📊 Monitoramento

  • RabbitMQ Management: http://localhost:15672 (dev/dev123)
  • Health Checks: Disponível em /health em cada serviço

🏗️ Arquitetura do Sistema

graph TB
    subgraph "Frontend"
        WEB[🌐 Web App]
        MOBILE[📱 Mobile App]
    end
    
    subgraph "API Gateway"
        GATEWAY[🚪 YARP Gateway<br/>Rate Limiting<br/>Load Balancing]
    end
    
    subgraph "Microsserviços"
        ORDER[📦 Order Service<br/>CRUD Pedidos<br/>Workflow Status]
        PAYMENT[💳 Payment Service<br/>Processamento<br/>Stripe Mock]
        INVENTORY[📋 Inventory Service<br/>Controle Estoque<br/>Reservas]
        NOTIFICATION[📬 Notification Service<br/>Email & SMS<br/>SendGrid Mock]
    end
    
    subgraph "Infraestrutura"
        POSTGRES[(🐘 PostgreSQL<br/>Database per Service)]
        REDIS[(⚡ Redis<br/>Cache Distribuído)]
        RABBIT[🐰 RabbitMQ<br/>Message Broker]
    end
    
    WEB --> GATEWAY
    MOBILE --> GATEWAY
    
    GATEWAY --> ORDER
    GATEWAY --> PAYMENT
    GATEWAY --> INVENTORY
    GATEWAY --> NOTIFICATION
    
    ORDER --> POSTGRES
    PAYMENT --> POSTGRES
    INVENTORY --> POSTGRES
    
    ORDER --> REDIS
    PAYMENT --> REDIS
    INVENTORY --> REDIS
    
    ORDER --> RABBIT
    PAYMENT --> RABBIT
    INVENTORY --> RABBIT
    NOTIFICATION --> RABBIT
    
    style GATEWAY fill:#00D4FF,stroke:#0099CC,color:#fff
    style ORDER fill:#4CAF50,stroke:#45a049,color:#fff
    style PAYMENT fill:#FF9800,stroke:#F57C00,color:#fff
    style INVENTORY fill:#9C27B0,stroke:#7B1FA2,color:#fff
    style NOTIFICATION fill:#F44336,stroke:#D32F2F,color:#fff
Loading

🔄 Fluxo de Pedido

sequenceDiagram
    participant C as 👤 Cliente
    participant G as 🚪 Gateway
    participant O as 📦 Order Service
    participant I as 📋 Inventory
    participant P as 💳 Payment
    participant N as 📬 Notification
    
    C->>G: 1. Criar Pedido
    G->>O: Validar & Criar
    O->>I: Reservar Estoque
    I-->>O: ✅ Estoque OK
    O->>N: Pedido Criado
    N->>C: 📧 Email Confirmação
    
    O->>P: Processar Pagamento
    P-->>O: ✅ Pagamento OK
    O->>O: Status → Pago
    O->>N: Pagamento Confirmado
    N->>C: 📧 Pagamento Aprovado
    
    O->>O: Status → Enviado
    O->>N: Pedido Enviado
    N->>C: 📱 SMS Rastreamento
    
    O->>O: Status → Entregue
    O->>N: Pedido Entregue
    N->>C: 📧 Avaliação
Loading

🧪 Testes

Testing

# Roda todos os testes
dotnet test

# Com coverage
dotnet test --collect:"XPlat Code Coverage"

# Só os testes de unidade
dotnet test --filter Category=Unit

# Testa a API funcionando
.\scripts\test-api.ps1

📚 Documentação

  • 📖 Exemplos de API - Como usar todos os endpoints
  • 🔧 Swagger UI - Documentação interativa em cada serviço
  • 📊 Postman Collection - Coleção completa para testes

📦 Stack Técnica

Categoria Tecnologias
Backend .NET C#
Database PostgreSQL Redis
Messaging RabbitMQ
Container Docker
Testing xUnit Moq
Patterns CQRS, DDD, Repository, Event Sourcing

🎯 Features Principais

Feature Descrição Status
📦 CRUD Pedidos Criação, leitura, atualização e exclusão de pedidos
🔄 Workflow Status Transições automáticas de status (Pendente → Pago → Enviado → Entregue)
Cache Distribuído Redis para consultas rápidas e invalidação inteligente
🛡️ Rate Limiting Proteção contra spam (100 req/min por IP)
📊 Logs Estruturados Serilog com formato JSON para análise
🔍 Health Checks Monitoramento de saúde de todos os serviços
📧 Notificações Email e SMS automáticos para eventos do pedido
💳 Pagamentos Integração mock com gateways (Stripe ready)
📋 Controle Estoque Reserva e liberação automática de produtos
🧪 Testes Cobertura de testes unitários e integração

🏛️ Padrões Arquiteturais

graph LR
    subgraph "Clean Architecture"
        DOMAIN[🎯 Domain<br/>Entities<br/>Value Objects<br/>Events]
        APP[⚙️ Application<br/>Commands<br/>Queries<br/>Handlers]
        INFRA[🔧 Infrastructure<br/>Repositories<br/>EF Core<br/>External APIs]
        PRES[🌐 Presentation<br/>Controllers<br/>DTOs<br/>Validators]
    end
    
    PRES --> APP
    APP --> DOMAIN
    INFRA --> DOMAIN
    
    style DOMAIN fill:#4CAF50,stroke:#45a049,color:#fff
    style APP fill:#2196F3,stroke:#1976D2,color:#fff
    style INFRA fill:#FF9800,stroke:#F57C00,color:#fff
    style PRES fill:#9C27B0,stroke:#7B1FA2,color:#fff
Loading

🎨 Design Patterns Utilizados

  • 🎯 CQRS - Separação de comandos e consultas com MediatR
  • 📦 Repository - Abstração da camada de dados
  • 🏭 Factory - Criação controlada de entidades
  • 📢 Domain Events - Comunicação entre agregados
  • 🔄 Event Sourcing - Histórico imutável de mudanças
  • 🛡️ Result Pattern - Tratamento de erros sem exceptions

🚀 Roadmap & Melhorias

Fase Feature Prioridade
🎯 Fase 1 Autenticação JWT & Autorização 🔴 Alta
🎯 Fase 2 Tracing Distribuído (Jaeger) 🟡 Média
🎯 Fase 3 GraphQL Gateway (HotChocolate) 🟡 Média
🎯 Fase 4 Kubernetes Deployment 🟢 Baixa
🎯 Fase 5 Métricas Prometheus/Grafana 🟢 Baixa

🤝 Como Contribuir

Contribution

  1. Fork o projeto
  2. Clone seu fork: git clone <your-fork-url>
  3. Crie uma branch: git checkout -b feature/nova-feature
  4. Commit suas mudanças: git commit -m 'Add: nova feature'
  5. Push para a branch: git push origin feature/nova-feature
  6. Abra um Pull Request

📋 Checklist para PRs

  • Código segue os padrões do projeto
  • Testes unitários adicionados/atualizados
  • Documentação atualizada
  • Build passa sem erros
  • Cobertura de testes mantida

📊 Estatísticas do Projeto

GitHub repo size GitHub language count GitHub top language GitHub last commit

📞 Contato & Suporte

Email LinkedIn GitHub

📄 Licença

Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.


⭐ Se este projeto te ajudou, deixe uma estrela! ⭐


Feito com ☕ e muito carinho para não virar mais um boilerplate sem alma


Visitor Count

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors