Her playbook gerçek dosya/sınıf/metod adlarına dayanır (örn.
SignUpUserCommandHandler, UserRegistrationService.RegisterNewUserAsync, SendOtpSmsDomainEventHandler). Snippet’leri kopyalayıp kendi feature’ınıza uyarlayabilirsiniz.Senaryolar
Vatandaş Kaydı
SignUpUserCommand → OTP SMS → VerifyOtp ile aktivasyon. Domain service, factory, domain event ve SMS gönderiminin tam akışı.Personel Girişi
Admin SPA → Keycloak (OIDC + PKCE) → JwtBearer doğrulama → davet bazlı provisioning → permission policy →
GetAdminMeQuery.OTP / TOTP Akışı
SignInUser → challenge token → VerifyOtp / VerifyTotp → access + refresh token + oturum. ResendOtp cooldown ve limitleri.Cache Invalidation
Bir kaydı güncelleyince cache nasıl düşer: domain event →
RemoveByTagAsync → çoklu-instance broadcast. Yeni cache’lenebilir query ekleme.Yeni Domain Event
Sıfırdan domain event ekleme reçetesi: event sınıfı →
AddDomainEvent → handler → (opsiyonel) integration event yayını + abonelik.Senaryo → katman matrisi
Her senaryonun hangi katmanlara dokunduğu:| Senaryo | API (Controller) | Application (Handler) | Domain (Aggregate / Event) | Infra (Servis) | Cache | Event Bus |
|---|---|---|---|---|---|---|
| Vatandaş kaydı | AuthController | SignUpUserCommandHandler | User + UserOtpGeneratedDomainEvent | SMS (NetGSM) | — | — |
| Personel girişi | AuthController (Keycloak) | ProvisionKeycloakUserCommandHandler | User.ActivateOnExternalLogin | Keycloak (JWKS) | UserContext | — |
| OTP / TOTP | AuthController | VerifyOtpCommandHandler / VerifyTotpCommandHandler | User.VerifyChallenge / VerifyTotp | SMS / Authenticator | — | — |
| Cache invalidation | (ilgili admin controller) | Komut handler + InvalidateFaqCacheDomainEventHandler | FaqUpdatedDomainEvent | — | HybridCache (L1+L2) | CacheInvalidationIntegrationEvent |
| Yeni domain event | — | XxxDomainEventHandler | XxxDomainEvent | (opsiyonel) | (opsiyonel) | (opsiyonel) |
Uçtan uca akışın iskeleti
Tüm senaryolar aynı omurgayı paylaşır:Reçete: yeni bir Command’ı uçtan uca eklemek
En sık ihtiyaç, var olmayan bir işlem için yeni bir Command/Query yazmaktır. Sıra:Command + DTO tanımla
Application/Features/<Alan>/<Admin|Website>/Commands/<Ad>/ altında:IResponseWrapper<T> (zarf).Validator yaz (FluentValidation)
ValidationPipelineBehavior validator’ı otomatik bulur; başarısızlık → 422 + errors.Gerekirse domain event + handler ekle
Cache düşmesi, e-posta vs. gerekiyorsa aggregate’te
AddDomainEvent(...) ve bir INotificationHandler<...> ekleyin. Bkz. Yeni Domain Event.Sonraki adımlar
İlk senaryo: Vatandaş Kaydı
En basit uçtan uca akışla başlayın.
Domain Event'ler
Event akışının teorik temeli.