📦 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ı