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: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:1
Command + DTO tanımla
Application/Features/<Alan>/<Admin|Website>/Commands/<Ad>/ altında:IResponseWrapper<T> (zarf).2
Validator yaz (FluentValidation)
ValidationPipelineBehavior validator’ı otomatik bulur; başarısızlık → 422 + errors.3
Handler yaz — aggregate metodunu çağır
4
Controller'a ince bir action ekle
_mediator.Send yapar.5
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.