Sistem

Dosya Katalogu

Tüm kod tek bir depoda (monorepo — birden çok uygulamanın aynı depoyu paylaşması) durur ve üç ana parçaya bölünür: apps/api kullanıcının doğrudan konuştuğu servistir (mobil/web uygulaması buraya istek atar). apps/batch arka planda çalışan ve bankalarla konuşan işçidir (kullanıcı onu hiç görmez). packages/FinevoConnect.Yos.Shared ise bu ikisinin ortak kullandığı çekirdektir (varlıklar, kurallar, veritabanı şeması). Her parça ayrıca Clean Architecture katmanlarına ayrılır: dış dünyaya bakan giriş katmanı, iş kurallarını tutan uygulama katmanı ve veritabanı/güvenlik gibi altyapı katmanı.

Kuş bakışı ağaç

api-yos/
├── apps/
│   ├── api/                          Public REST API (sadece DB okur, HHS'e bağlanmaz)
│   │   └── src/
│   │       ├── FinevoConnect.Yos.Api/              Giriş noktası: Controller'lar, Middleware, Filter'lar
│   │       ├── FinevoConnect.Yos.Application/      İş akışları: her özellik için bir servis
│   │       └── FinevoConnect.Yos.Infrastructure/  Veritabanı, güvenlik, kimlik, tanılama
│   │
│   └── batch/                        Hangfire işçi (bankayla konuşan TEK taraf)
│       └── src/
│           ├── FinevoConnect.Yos.Batch.Worker/          Host + zamanlanmış işlerin kaydı
│           ├── FinevoConnect.Yos.Batch.Application/      Senkron akışları, niyet işleyicileri (handler)
│           └── FinevoConnect.Yos.Batch.Infrastructure/  Job'lar, ÖHVPS entegrasyonu, JWS imza, olaylar
│
└── packages/FinevoConnect.Yos.Shared/             Ortak çekirdek — tek doğruluk kaynağı
    ├── FinevoConnect.Yos.Shared.Domain/           Varlıklar, kimlikler, enum'lar, sabitler, arayüzler
    └── FinevoConnect.Yos.Shared.Persistence/      EF Core şeması (iki uygulama da paylaşır)

apps/api — Public API katmanları

Kullanıcının konuştuğu servis. Önemli kural: bu uygulama bankalara asla doğrudan bağlanmaz; yalnızca ortak veritabanını okur ve yapılması gereken işleri (örneğin "şu bankaya bağlan") bir sıraya not düşer. Bankayla konuşmayı işçi (apps/batch) üstlenir.

KlasörGörevi
FinevoConnect.Yos.ApiDışarıdan gelen HTTP isteklerinin ilk uğradığı yer. Controllers/ istek adreslerini (uçları) tanımlar, Middleware/ her isteğe uygulanan ortak adımları içerir (istek takibi/correlation, hata yakalama, loglama, dil seçimi), Filters/ girdi doğrulama ve idempotency (aynı isteğin tekrarına karşı koruma) yapar, Program.cs ise tüm bu boru hattını kurar.
FinevoConnect.Yos.Applicationİş mantığının yaşadığı yer: her özellik bir klasör ve o klasörde bir servis. Auth (kimlik), HhsConnections (banka bağlantıları), Accounts (hesaplar), Cards (kartlar), Transactions (işlemler), PaymentOrders (ödeme emirleri), RecurringPayments (düzenli ödemeler), ForwardDatedPayments (ileri tarihli ödemeler), SyncIntents (bankayla senkron için not düşülen niyetler) ve Common/LiveRefresh (canlı veri tazeleme koordinasyonu).
FinevoConnect.Yos.InfrastructureDış dünyayla ve teknik altyapıyla ilgilenen katman: Persistence/ (veritabanı bağlamı ve repository'ler — veri okuma/yazma yardımcıları), Security/ (JWT token üretimi, hassas verinin şifrelenmesi için DataProtection), Identity/ (o an giriş yapmış kullanıcıyı çözme), Diagnostics/ (denetim/audit kayıtları), Localization/ (hata metinlerinin Türkçe/İngilizce çevirileri).

apps/batch — İşçi katmanları

Kullanıcının hiç görmediği, arka planda çalışan işçi. Bankalarla (HHS) konuşan tek taraf burasıdır: sertifika ile güvenli bağlantı kurar, istekleri imzalar ve zamanlanmış işlerle verileri tazeler. Dışarıya açık bir REST API'si yoktur.

KlasörGörevi
FinevoConnect.Yos.Batch.Workerİşçinin barındırıldığı ve zamanlanmış işlerin (belirli aralıklarla çalışan görevler) kaydedildiği yer (Program.cs). Ayrıca geliştirme sırasında işleri izlemek için Hangfire panosu ve bir sağlık ucu içerir.
FinevoConnect.Yos.Batch.ApplicationSenkron (bankadan veri çekme) mantığı: Sync/Handlers her niyet türü için bir işleyici barındırır (ConsentCreate = rıza oluştur, AuthorizationComplete = yetkilendirmeyi tamamla, InitialFetch = ilk veri çekimi, PaymentOrderSubmit = ödeme emrini bankaya ilet...), Consent/ rıza aktivasyonu ve ayrık yoklamayı, Events/ bankadan gelen olayların işlenmesini yönetir.
FinevoConnect.Yos.Batch.InfrastructureJobs/ zamanlanmış 8 Hangfire işini, Integration/Ohvps/ bankayla konuşan istemcileri (güvenli mTLS bağlantısı, JWS imzalama ve Türkçe wire alan adlarını) barındırır — burası anti-corruption (yozlaşmaya karşı koruma) katmanıdır. Logging/ ise dış servis çağrılarının loglanmasını yapar.

packages/FinevoConnect.Yos.Shared — Ortak çekirdek

İki uygulamanın da paylaştığı ortak temel. Kurallar, tipler ve veritabanı şeması burada tek bir yerde tanımlanır (tek doğruluk kaynağı) ki iki taraf da aynı gerçeği görsün.

KlasörGörevi
FinevoConnect.Yos.Shared.DomainSistemin kalbindeki iş kavramları: Entities/ (varlıklar — hesap, kart, ödeme gibi), Identifiers/ (tipli kimlikler; UserId, HhsConnectionId gibi — bir kullanıcının ID'sini yanlışlıkla bir hesap ID'siyle karıştırmayı önler), Enums/ (sabit seçenek kümeleri), Constants/ (yollar, hata kodları, limitler, log alan adları gibi tüm sabit değerler), Abstractions/ (servis ve repository arayüzleri) ve Exceptions/ (özel hata türleri).
FinevoConnect.Yos.Shared.PersistenceVeritabanının nasıl kurulduğu: EntityConfigurations/ her tablonun EF Core yapılandırması, Migrations/ şemanın zaman içindeki değişim geçmişi ve değer dönüştürücüler. Veritabanı şemasının tek sahibi burasıdır.
Anti-corruption katmanı nedir? Bankaya gidip gelen isteklerde alan adları Türkçe'dir (rizaNo, hesaplar, yetKod...). Bu Türkçe adlar yalnızca apps/batch/.../Integration/Ohvps/ altında yaşar. Oradan içeri girerken AutoMapper ile İngilizce iç modellere çevrilir; böylece bu Türkçe adlar sistemin geri kalanına asla sızmaz. Bu kural gevşemesin diye mimari testlerle otomatik olarak zorlanır.

Depodaki diğer klasörler

YolGörevi
compose.yml + overrideDocker ile hangi servislerin ayağa kalkacağını tanımlar: veritabanı (MSSQL) + api-yos + batch. Sertifikalar güvenlik için yalnızca batch servisine bağlanır (api-yos'a bağlanmaz, çünkü o bankayla konuşmaz).
certs/Bankaya güvenli bağlanmak için kullanılan mTLS sertifikaları. Gizli oldukları için git deposuna girmez, yalnızca yerel makinede durur.
docs/Şu an okuduğun bu dokümantasyon sitesi (Next.js ile yazıldı) ve depoya eklenmiş diğer teknik doküman dosyaları (.md / .html).
tests (her projede)Otomatik testler: Domain (iş kuralları), Application (servis akışları), Integration (WireMock ile sahte banka üzerinden uçtan uca), Architecture (katman sınırları ve Türkçe wire sızıntısı ihlallerini yakalayan testler).