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/kurumlarla 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 (DB okur + batch'e iç RPC, HHS'e bağlanmaz)
│ │ └── src/
│ │ ├── FinevoConnect.Yos.Api/ Giriş noktası: Controller'lar, Middleware, Filter'lar
│ │ ├── FinevoConnect.Yos.Application/ İş akışları: Services/<özellik>, Validators, Common
│ │ ├── FinevoConnect.Yos.Infrastructure/ Veritabanı, güvenlik, kimlik, tanılama
│ │ └── FinevoConnect.Yos.Integration/ Batch'in iç uçlarına senkron RPC istemcileri
│ │
│ └── batch/ Hangfire işçi (bankayla/kurumla konuşan TEK taraf)
│ └── src/
│ ├── FinevoConnect.Yos.Batch.Worker/ Host + iç RPC uçları + zamanlanmış işlerin kaydı
│ ├── FinevoConnect.Yos.Batch.Application/ Senkron akışları, niyet işleyicileri (handler)
│ ├── FinevoConnect.Yos.Batch.Infrastructure/ Job'lar, olay işleme altyapısı
│ └── FinevoConnect.Yos.Batch.Infrastructure.Integration/ ÖHVPS entegrasyonu: mTLS, JWS imza, Türkçe wire
│
└── 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/kurumlara asla doğrudan bağlanmaz. Sorgularda ortak veritabanını okur; banka/kurum gerektiren işleri ya batch'in iç ucunu senkron çağırarak (iç RPC — rıza açma/iptal, yetkilendirme tamamlama, canlı okuma) ya da niyet kutusuna not düşerek (ödeme, periyodik yenileme) işçiye (apps/batch) devreder.
| Klasör | Görevi |
|---|---|
FinevoConnect.Yos.Api | Dış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 Services/ altında bir klasör ve o klasörde bir servis. Auth (kimlik), Hhs (banka/kurum listesi), HhsConnections (banka/kurum bağlantıları), Accounts (hesaplar), Cards (kartlar), Transactions (işlemler), PaymentOrders (ödeme emirleri), RecurringPayments (düzenli ödemeler), ForwardDatedPayments (ileri tarihli ödemeler), SyncIntents (asenkron işler için not düşülen niyetler). Validators/ girdi doğrulayıcıları, Common/ ortak yapıları (ör. LiveRefresh — canlı veri tazeleme koordinasyonu) tutar. |
FinevoConnect.Yos.Infrastructure | Dış 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ı), Web/ ve Features/ (web yardımcıları ve özellik anahtarları). |
FinevoConnect.Yos.Integration | Batch'in iç uçlarını çağıran senkron RPC istemcileri: ConsentCreateRpcClient (rıza aç), ConsentCancelRpcClient (rıza iptal), AuthorizationCompleteRpcClient (yetkilendirmeyi tamamla), LiveQueryClient (fresh=true canlı okuma). Hepsi iç ağdan, gizli başlıkla (X-Internal-Secret) konuşur. |
apps/batch — İşçi katmanları
Kullanıcının hiç görmediği, arka planda çalışan işçi. Bankalarla/Kurumlarla (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 REST'i yoktur; yalnız API'nin çağırdığı iç RPC uçlarını ve banka/kurum olay webhook'unu barındırır.
| Klasör | Gö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). Controllers/ API'nin senkron çağırdığı iç RPC uçlarını (/internal/consent-create, /internal/authorization-complete, /internal/consent-cancel, /internal/live-query...) ve banka/kurum olay webhook'unu (/api/v1/ohvps/events) barındırır. 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.Application | Senkron (bankadan/kurumdan veri çekme) mantığı: iç RPC'lerin arkasındaki servisler (rıza oluşturma/iptal, canlı sorgu), Sync/Handlers asenkron niyet türleri için işleyiciler (InitialFetch = ilk veri çekimi, PaymentOrderSubmit = ödeme emrini bankaya/kuruma ilet, AuthorizationComplete = yedek aktivasyon...), Consent/ rıza aktivasyonu ve ayrık yoklamayı, Events/ bankadan/kurumdan gelen olayların işlenmesini yönetir. |
FinevoConnect.Yos.Batch.Infrastructure | Jobs/ zamanlanmış Hangfire işlerini ve olay işleme altyapısını barındırır. |
FinevoConnect.Yos.Batch.Infrastructure.Integration | Ohvps/ bankayla/kurumla 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ör | Görevi |
|---|---|
FinevoConnect.Yos.Shared.Domain | Sistemin 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.Persistence | Veritabanı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. |
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
| Yol | Görevi |
|---|---|
compose.yml + override | Docker ile hangi servislerin ayağa kalkacağını tanımlar: veritabanı (MSSQL) + FinevoConnect YÖS + batch. Sertifikalar güvenlik için yalnızca batch servisine bağlanır (FinevoConnect YÖS'e bağlanmaz, çünkü o bankayla/kurumla konuşmaz). |
certs/ | Bankaya/Kuruma 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/kurum üzerinden uçtan uca), Architecture (katman sınırları ve Türkçe wire sızıntısı ihlallerini yakalayan testler). |