src/DiyanetCleanArchitecture.Infrastructure.Services.* ya da src/DiyanetCleanArchitecture.Infrastructure.Jobs.* altında yaşar.
Ortak desen
Tüm servisler aynı üç kuralı izler:1
Application arayüzünü implemente eder
Servis sınıfı, Application/Domain katmanının tanımladığı (ya da kendi projesindeki) bir arayüzü implemente eder:
IEmailService, IOtpSmsService, IAuthenticationTotpService, IOAuthClient<TUserInfo>, IAdminNotificationBroadcaster. Tüketici kod somut sınıfı değil arayüzü inject eder.2
Bir Add*Service extension'ı ile kaydedilir
Her projenin kök
DependencyInjection.cs dosyasında Add* adında bir IServiceCollection extension metodu vardır. Program.cs bunları sırayla çağırır:3
Config Services:* altında bind edilir
Servis ayarları
appsettings.json içinde Services:<Ad> bölümünden bind edilir (OAuth ve Keycloak istisna — kök seviyede OAuth ve Keycloak bölümlerini kullanır). Bind, services.Configure<TOptions>(o => configuration.GetSection("Services:...").Bind(o)) deseni ile yapılır.Çoğu servis Polly ile resilience (retry / circuit-breaker) ve bir health check ekler. Dış sağlayıcı health check’leri
[External] tag’i taşır: sağlayıcı çökse de /health/ready bozulmaz, sadece /health/external degraded olur. Mantık: e-posta/SMS sağlayıcısı geçici çökerse API çalışmaya devam etmeli.Servis matrisi
Resilience ve health check özeti
Servis detayları
Brevo SMTP üzerinden Scriban şablonlu e-posta; ResilientEmailGateway ile Polly koruması.
SMS
NetGSM REST v2 OTP entegrasyonu; ASCII-only mesaj, ortam bazlı telefon çözümleme.
Notification
SSE tabanlı, rol-hedefli admin bildirimleri; HMAC stream-token ile kimlik.
OAuth
Google, Meta ve Keycloak; PKCE (S256) tabanlı backend-driven akış.
Authenticator (TOTP)
OtpNet ile RFC 6238 TOTP; QR üretimi, drift toleranslı doğrulama.
Hangfire
PostgreSQL destekli arka plan iş kuyruğu; MediatR command/event köprüsü.