Skip to main content

FluentValidation

Validator’lar AbstractValidator<TRequest> türünden yazılır ve assembly taramasıyla otomatik kaydedilir. ValidationPipelineBehavior bunları handler’dan önce çalıştırır (bkz. Pipeline Behaviors).

Kayıt

DependencyInjection.cs tüm Application assembly’sini tarar:

AbstractValidator örneği

SignUpUserCommandValidatorCascade(CascadeMode.Stop) ile boş telefon kontrolünden sonra format kontrolüne geçilir:

Custom validator’lar

SeedWork/Validations/ altında, Türkiye’ye özel domain kuralları için yeniden kullanılabilir validator’lar bulunur.
MobilePhoneValidatorExtensions.cs — en sık kullanılan kural. NotEmpty + MobilePhoneUtility doğrulamasını tek çağrıda paketler:
SeedWork/Validations/ altındaki diğer validator’lar: YabanciTCKimlikNoValidator, HESValidator, BirthdateValidator, ImageValidator, SmsCodeValidator, GuidValidator, RenkValidator, BasvuruBelgeValidator.
Format/checksum gibi tekrar eden kurallar value object seviyesinde de (Domain) doğrulanır — örn. Phone, TCKimlikNo value object’leri. Validator katmanı, request’i daha controller seviyesinde reddedip aggregate’i hiç kurmadan hızlı geri bildirim verir; value object ise invariant’ın son savunma hattıdır.

AutoMapper

Mapping’ler IMapFrom<T> convention’ı ile tanımlanır ve reflection ile otomatik toplanır.

Kayıt

IMapFrom convention

SeedWork/Mappings/IMapFrom.cs — default interface metodu basit CreateMap üretir; özel kural gerekirse DTO Mapping(Profile) metodunu override eder:

MappingProfile reflection taraması

MappingProfile.cs assembly’deki IMapFrom<> uygulayan tüm tipleri bulur ve Mapping metodlarını çağırır:

Örnek — UserDto mapping

VerifyOtp/UserDto.cs — value object’leri (Phone, Email) düz string’e, Status enumeration’ını .Name’e map eder:
Liste DTO’larında ağır alanları (örn. bytea görsel) SELECT etmeyin. AdminBagisBasvuruPlanDto görseli yüklemek yerine sadece HasImage flag’ini map eder: o.MapFrom(s => s.Image != null).

Pagination

Sayfalı yanıtlar IPaged<T> / Paged<T> ile döner.
Handler içinde CountAsync + ListAsync ile doldurulur:
Page 0-tabanlıdır. Backend specification ve PaginationHelper 0-based indeks bekler; frontend useState(0) ile uyumludur. page=1 ilk sayfayı sessizce atlar.

Sonraki adımlar

Command / Query deseni

Validator ve mapping’lerin handler içinde kullanımı.

Pipeline Behaviors

ValidationPipelineBehavior ve 422 yanıt üretimi.

Value Objects

Phone, Email, TCKimlikNo invariant’larının domain tarafı.

Caching

IReadRepository ve specification tabanlı HybridCache.