📦 D3 · DTO + class-validator + ValidationPipe
D3 · DTO + class-validator +: DTO (Data Transfer Object) + `class-validator` + `ValidationPipe` üçlüsü, Spring'in Bean Validation'ının **TAM YAPISAL karşılığıdır**: Java'da `@Not
DTO (Data Transfer Object) + `class-validator` + `ValidationPipe` üçlüsü, Spring'in Bean Validation'ının **TAM YAPISAL karşılığıdır**: Java'da `@NotBlank`/`@Size` bir sınıf alanına yapıştırılır ve `@Valid` bunu tetikler; Nest'te `@IsNotEmpty()`/`@Length()` bir DTO sınıfının alanına yapıştırılır ve `ValidationPipe` bunu tetikler. Bu, Express'teki (C4) "kuralları tanımla, SONUCU elle oku" modelinden TAMAMEN farklıdır — burada framework, Spring'deki gibi, doğrulamayı SENİN İÇİN otomatik yapar. Peki neden Nest, Express'in aksine bu otomasyona geri dönüyor? Çünkü Nest zaten "opinionated" bir seçim yaptı (D1) — decorator tabanlı bir yapıyı benimseyince, validation da doğal olarak aynı decorator mantığına oturur. Ama burada YENİ bir tuzak var: `ValidationPipe`, Spring'deki gibi "her zaman açık" değildir — `main.ts`'te `app.useGlobalPipes(new ValidationPipe())` ile AÇIKÇA etkinleştirilmesi gerekir. DTO'daki decorator'lar süs kalabilir, tıpkı B1'deki eksik `starter-validation` gibi — ama bu sefer kök neden "eksik kütüphane" değil, "kütüphane kurulu ama devreye ALINMAMIŞ".
DTO Yazmak ve Pipe'ı Etkinleştirmek
Micro Lab: Kod yazma
TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.
Adim Adim: Kod yazma
Amaci ve girdiyi belirle
Kritik satiri tamamla
Cikti veya davranisi kontrol et
Hata mesajini kanit olarak oku
Duzeltmeyi tekrar calistir
Kod okuma ve dogrulama akisini sirala.
**🐞 Defect Doğum Anı — `app.useGlobalPipes(new ValidationPipe())` unutulursa** **Kod:** `CreateBugDto` tüm `class-validator` decorator'larıyla KUSURSUZ yazıldı, controller `@Body() dto: CreateBugDto` ile DOĞRU tip kullanıyor — ama `main.ts`'te `app.useGlobalPipes(new ValidationPipe())` satırı YOK. **Ne olur:** Nest, DTO'yu sadece bir TypeScript TİPİ olarak kullanır (derleme zamanı bilgisi, JavaScript'e derlenince kaybolur); `class-validator` decorator'larını kimse ÇALIŞTIRMAZ. `POST /api/v1/bugs { "title": "" }` request'i 400 yerine 201 döner. **Neden sinsi:** DTO dosyası açıldığında decorator'lar tamamen doğru görünür — bir code review "validation var" der ve geçer. Ama decorator'ların ÇALIŞMASI için global bir pipe'ın etkinleştirilmesi gerekir; bu, B1'deki eksik dependency'den ve C4'teki okunmayan sonuçtan FARKLI bir üçüncü kök nedendir: "kurallar var, ama hiç TETİKLENMİYOR". **Tester nerede yakalar:** Boş title ile POST atıp 201 alınca — DTO dosyasını incelemek yeterli değildir, `main.ts`'te `useGlobalPipes` çağrısının GERÇEKTEN var olduğu ayrıca doğrulanmalıdır.
🎬 Nest'in Pipe Hattı
CreateBugDto decorator'ları