SupplyChainQueueSystem, tedarik zinciri süreçleri gibi yüksek hacimli ve paralel işlem gerektiren senaryolarda mesaj tabanlı haberleşme sağlayan, .NET 8 ile geliştirilmiş mikroservis mimarisine sahip bir kuyruk yönetim sistemidir. RabbitMQ, Docker, Unit of Work ve Domain-Driven Design (DDD) prensipleriyle inşa edilmiştir.
- Mikroservis mimarisi üzerine gerçek dünyaya yakın bir yapı kurmak
- RabbitMQ üzerinden asenkron haberleşmeyi yönetmek
- SOLID prensiplerine uygun, modüler ve ölçeklenebilir bir yapı oluşturmak
- Katmanlı mimari, validation, logging ve unit testing gibi yazılım geliştirme disiplinlerini uygulamak
| Teknoloji | Açıklama |
|---|---|
| .NET 8 | Temel backend framework |
| RabbitMQ | Mesajlaşma altyapısı |
| Docker / Compose | Servis konteynerleştirme ve orkestrasyon |
| GitHub Actions | CI: otomatik build ve test |
| FluentValidation | DTO seviyesinde veri doğrulama |
| MailKit | SMTP ile e-posta gönderimi |
| Unit of Work | Veri erişim yönetimi |
| Serilog | Loglama (planlandı) |
| xUnit | Unit test altyapısı |
/SupplyChainQueueSystem
│
├── .github
│ └── workflows
│ └── ci.yml
├── src
│ ├── AccountApi
│ ├── BillApi
│ ├── BuyerAPI
│ ├── FinancialAPI
│ ├── Shared
│ └── SupplierAPI
├── tests
│ └── AccountUnitTest
│
├── MicrosevicesQueque.sln
├── docker-compose.yml
└── README.md-
📦 Mikroservisler
- AccountApi: Kullanıcı kayıt ve giriş işlemlerini kontrol eder.
- BillApi: Fatura kesimi yapar.
- FinancialApi: Finans kurumlarının tedarikçilerin attıkları isteklere cevap verdiği servis.
- SupplierApi: Tedarikçilerin erken ödeme talebi açmalarını sağlayan ve kuyruğu dinleyerek alınan faturaları bildiren servis.
-
🔁 Ortak Bileşenler
-
Shared: Mikroservisler arasında ortak kullanılan tüm yardımcı sınıfları içerir:
-
Interfaces: Repository, Mail, Hashing gibi servis soyutlamaları.
-
Event Models: RabbitMQ mesajlaşma altyapısı için kullanılan event sınıfları.
-
BaseEntity: Ortak entity özelliklerini tanımlar (örneğin Id, CreatedDate).
-
Security: JWT token yönetimi, TokenOptions ve şifreleme algoritmaları (SHA256, HMAC).
-
Result Yapısı: Başarı/başarısızlık durumları için standart sonuç modelleri.
-
MailService: SMTP üzerinden e-posta gönderimi yapan yapı.
-
Generic Repository & Unit of Work: Veritabanı işlemleri için ortak veri erişim katmanı.
-
-
Projeyi çalıştırmak için Docker ve .NET 8 SDK yüklü olmalıdır.
-
Repoyu klonlayın:
git clone https://github.com/yacnuzun/SupplyChainQueueSystem.git cd SupplyChainQueueSystem -
Ortam değişkenlerini hazırlayın (gizli değerler
.envdosyasında tutulur, repoya eklenmez):cp .env.example .env
.env.exampleyerel geliştirme için çalışan varsayılan değerlerle gelir. Mail gönderimi için isteğe bağlı olarakEMAIL_SENDERveEMAIL_APP_PASSWORDalanlarını doldurabilirsiniz, boş bırakılırsa servisler çalışır ama e-posta gönderilmez. -
Servisleri ayağa kaldırın:
docker compose up --build
- RabbitMQ Publisher / Consumer yapısı
- DTO validasyonları (FluentValidation)
- Unit of Work ve Generic Repository altyapısı
- JWT tabanlı kimlik doğrulama ve rol bazlı yetkilendirme (Admin, Buyer, Supplier)
- Temel test altyapısı (xUnit)
- GitHub Actions ile her push ve pull request'te otomatik build ve test (CI)
- AccountApi kullanıcı kaydı ve girişini yönetir, başarılı girişte JWT üretir. Şifreler hash ve salt ile saklanır.
- Diğer servisler (BillApi, BuyerAPI, SupplierAPI) aynı token'ı doğrular. Doğrulama ayarları
SharedkütüphanesindekiTokenValidatesınıfında ortaktır. - Yetkilendirme
[Authorize(Roles = ...)]attribute'larıyla rol bazlı yapılır:
| Rol | Erişebildiği alanlar |
|---|---|
| Admin | Claim yönetimi ve mail şablonu yönetimi uçları (AccountApi) |
| Buyer | Alıcıya ait uçlar (BuyerAPI) ve fatura işlemlerinin alıcı tarafı (BillApi) |
| Supplier | Tedarikçiye ait uçlar (SupplierAPI) ve fatura işlemlerinin tedarikçi tarafı (BillApi) |
- xUnit ile yazılmış unit test örnekleri mevcuttur.
- Test coverage ileride artırılacaktır.
-
NotificationService, gelen mesajlara göre SMTP üzerinden e-posta gönderimi yapar.
-
MailKit kullanılmaktadır, SMTP ayarları
.envdosyasındakiEMAIL_SENDERveEMAIL_APP_PASSWORDdeğerleriyle verilir (Gmail için uygulama şifresi kullanılmalıdır).
✅ Docker container eklendi (Commit: 58be5dd5, 2025-08-30)
- [2025-08-30] Docker Container Eklendi.
Proje halen geliştirme aşamasındadır. Süreç şeffaf bir şekilde commit geçmişi üzerinden takip edilebilir.
Gelecek adımlar aşağıdaki gibi planlanmıştır:
- Mikroservis yapısının kurulması
- RabbitMQ entegrasyonu
- Dockerfile ve docker-compose yapılandırmaları
- CI pipeline (GitHub Actions: build + test)
- Authentication (JWT + role-based authorization)
- CD pipeline (deployment)
- Test coverage oranının artırılması
Projede her mikroservis için ayrı bir Dockerfile oluşturulmuştur.
Ayrıca docker-compose.yml ile tüm servisler aynı anda ayağa kaldırılabilmektedir.
Dockerfile→ Her servis için publish edilen.dlldosyaları Kestrel üzerinde çalışacak şekilde yapılandırıldı.docker-compose.yml→ PostgreSQL, RabbitMQ ve mikroservisler aynı network üzerinde tanımlandı, servisler healthcheck ile sıralı başlar. Gizli değerler.envdosyasından okunur..dockerignore→ Gereksiz dosyaların (bin, obj, user secrets vb.) imaja dahil edilmesi engellendi.- Kestrel URL ayarları güncellendi (örn:
http://0.0.0.0:5001).
- AccountApi →
http://localhost:8081 - BillApi →
http://localhost:8083 - BuyerApi →
http://localhost:8084 - FinancialApi →
http://localhost:8085 - SupplierApi →
http://localhost:8086 - RabbitMQ Management UI →
http://localhost:15672(varsayılan: guest / guest, port ve kimlik bilgileri.envile değiştirilebilir)