MoneyTransferCenter

"Clean Architecture, DDD, Repository Design Pattern ,UnitOfWork ve Outbox Pattern prensipleriyle geliştirilmiş, OpenTelemetry ve Docker ile tam izlenebilirlik sağlayan kurumsal seviyede finansal işlem altyapısı."

10 Temmuz 2026
Backend
2 hafta
FULL STACK DEVELOPER
MoneyTransferCenter

🏦 Money Transfer Center

Kurumsal Seviyede Finansal İşlem Altyapısı(Bu proje Rasyonet bünyesinde staj yaparken geliştirdiğim projenin ilkidir.)

Race Condition Koruması · Composite Index Optimizasyonu · Tam Gözlemlenebilirlik (Full Observability)

.NET Docker SQL Server MongoDB Grafana Jaeger


📖 Proje Hakkında

Money Transfer Center, para yatırma, çekme ve hesaplar arası transfer işlemlerini yöneten, kurumsal (enterprise) seviyede .NET backend projesidir. Sistem;

  • Aynı anda gelen isteklerde paranın asla eksiye düşmemesini garanti eden Concurrency kilitleri,
  • Milyonlarca kayıt içinde sorguları milisaniyeler içinde sonuçlandıran B-Tree Composite Indexleri,
  • Sistemi gerçek zamanlı izleyen Grafana + Loki + Prometheus + Jaeger gözlemlenebilirlik kulesi

ile donatılmıştır.


🏗️ Mimari: Clean Architecture & Katman Yapısı

Proje, bağımlılıkları sıkı bir şekilde yöneten Clean Architecture prensibine göre tasarlanmıştır. Her katman yalnızca bir iç katmanı tanır ve dışa olan bağımlılık yoktur.


🎯 Tasarım Desenleri (Design Patterns)


🔐 Güvenlik & Performans Özellikleri

Rate Limiting (Hız Sınırlama) — RateLimitingExtension.cs

Sistemi aşırı yüklenme ve DDoS saldırılarından koruyan iki katmanlı rate limiting mimarisi:

Akıllı IP Ban Mekanizması: Rate limit'i 10 kez aşan bir IP adresi otomatik olarak 24 saat yasaklanır ve bu olay Critical seviyesinde loglanır.

Polly Resilience (Dayanıklılık) — ResilienceExtension.cs

Dış servis (TCMB Döviz API) çağrılarındaki geçici hataları otomatik olarak iyileştiren üç katmanlı dayanıklılık pipeline'ı:

  • Retry: 3 deneme, katlanarak artan süre (2s → 4s → 8s) + Jitter
  • Timeout: Tek istek 10 saniyeyi geçerse iptal
  • Circuit Breaker: Son 30 saniyede %50 hata oranı → 30 saniye boyunca şalter indirilir

IP Blacklist — IPBlockMiddleware.cs

Ban yiyen IP'lerin gelen her isteği doğrudan 403 Forbidden ile reddedilir. İstek uygulama koduna bile ulaşamaz.

Concurrency (Eşzamanlılık) Koruması — AccountLockService.cs

Aynı hesaba aynı anda gelen 10 farklı "100 TL çek" isteğinde paranın eksiye düşmesini (Race Condition) engelleyen çift katmanlı kilit mimarisi:

  1. SemaphoreSlim(1,1): Aynı AccountId için sadece 1 istek eş zamanlı çalışır, diğerleri kuyrukta bekler.
  2. EF Core RowVersion (Optimistic Lock): İlk katmanı aşan senaryolarda (çoklu sunucu) veritabanı seviyesinde HTTP 409 Conflict döndürür.

🔭 Gözlemlenebilirlik Kulesi (Observability Stack)

Sistemin her milisaniyesi 4 farklı araç tarafından izlenmektedir:

Özel Metrikler (AppMetrics.cs):

  • rate_limit_rejected_total — Rate limit'e takılan toplam istek sayısı
  • ip_banned_total — Banlanan IP sayısı
  • outbox_processed_total — Başarıyla işlenen outbox mesajları
  • outbox_failed_total — Hatalı outbox mesajları

🗄️ Veri Katmanı

Veritabanı Şeması (SQL Server)

Performans: B-Tree Composite Index Optimizasyonu

İşlem geçmişi sorgularında (filtreleme + tarihe göre sıralama) pahalı SQL Sort operasyonlarını ortadan kaldırmak için bileşik indexler kullanılmıştır:

IX_Transactions_SenderAccountId_CreatedAt   → "Gönderdiğim işlemler" sorgusunu 100x hızlandırır
IX_Transactions_ReceiverAccountId_CreatedAt → "Aldığım işlemler" sorgusunu 100x hızlandırır

🧪 Test Altyapısı

Proje hem domain iş kurallarını hem uygulama servislerini hem de altyapıyı doğrulayan kapsamlı bir test suite'ine sahiptir:

Tests/
├── MoneyTransferCenter.UnitTests/
│   ├── Domain/
│   │   ├── AccountTests.cs         → Hesap oluşturma, para yatırma/çekme domain kuralları
│   │   └── TransactionTests.cs     → Transfer iş kuralları (negatif tutar, öz transfer vb.)
│   └── Application/
│       ├── AccountServiceTests.cs  → Hesap servis iş akışları (mock ile)
│       ├── AuthServiceTests.cs     → Kimlik doğrulama senaryoları
│       └── TransactionServiceTests.cs → Concurrency ve transfer senaryoları
│
└── MoneyTransferCenter.IntegrationTests/
    └── Infrastructure/
        └── AccountRepositoryTests.cs → Gerçek veritabanı ile CRUD doğrulaması

🚀 Kurulum ve Çalıştırma

Tek ön koşul: Bilgisayarınızda Docker Desktop kurulu ve çalışıyor olmalıdır.

# 1. Projeyi klonlayın
git clone <repo-url>

# 2. Proje dizinine gidin
cd MoneyTransferCenter

# 3. Tüm sistemi tek komutla ayağa kaldırın
docker compose up -d --build

Sistem başlatıldıktan sonra tüm servisler hazırdır:

Not: Uygulama başlarken context.Database.Migrate() ile tüm migration'lar otomatik uygulanır. Manuel Update-Database gerekmez.


📦 Teknoloji Yığını (Tech Stack)

Proje Bilgileri

Müşteri

yok

Kategori

Backend

Süre

2 hafta

Rol

FULL STACK DEVELOPER


Benzer Proje İste