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/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ö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 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.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ı), Web/ ve Features/ (web yardımcıları ve özellik anahtarları).
FinevoConnect.Yos.IntegrationBatch'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ö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). 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.ApplicationSenkron (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.InfrastructureJobs/ zamanlanmış Hangfire işlerini ve olay işleme altyapısını barındırır.
FinevoConnect.Yos.Batch.Infrastructure.IntegrationOhvps/ 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ö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/Kuruma 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) + 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).