Proje: Okul Platform · Hub: Okul Platform — Conventions

DTO Yapısı

app/DTO/ dizininde tüm DTO’lar.

DTO/
├── Admin/     — Admin katmanı DTO'ları
├── Customer/  — B2B portal DTO'ları
├── General/   — Genel DTO'lar
├── Repository/ (ve Repositories/) — Repo katmanı DTO'ları
├── Common/    — Paylaşılan DTO'lar
├── Service/   — Servis katmanı DTO'ları
├── CustomTypes/ — Özel tipler
├── Traits/    — DTO trait'leri
└── SimplePaginatorDTO.php

DTO Adlandırma Kuralı

Admin/Checkout/StoreCheckoutDTO      → HTTP → Admin Service
Admin/Checkout/UpdateCheckoutDTO
Admin/Checkout/IndexCheckoutDTO      → Liste DTO
Repository/Checkout/CreateCheckoutDTO → Admin Service → Repository
Repository/Checkout/UpdateCheckoutDTO

PHP readonly class

Tüm DTO’lar readonly class olarak tanımlanır (PHP 8.2):

final readonly class CheckoutService {
    public function __construct(
        private CheckoutRepository $repo,
    ) {}
}

Orderable Trait

$dto->getOrderField()     // '-school_id' → 'school_id'
$dto->getOrderDirection() // '-school_id' → 'desc'

Spatie QueryBuilder sort formatını Eloquent orderBy’a çevirir.

NotProvided Type

readonly class NotProvided {}

DTO’larda “bu alan hiç gönderilmedi” ile “null gönderildi” arasındaki fark:

public ?string $name = new NotProvided()  // gönderilmedi
public ?string $name = null               // null gönderildi

HasAuthUser Trait

DTO’ya auth kullanıcısını inject etmek için.

SimplePaginatorDTO

Offset tabanlı basit pagination (deprecated):

  • pageLength + from (offset)
  • getPage() — offset/pageLength + 1

Yeni kodda LengthAwarePaginator direkt kullanılıyor.