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önderildiHasAuthUser 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.
Related
- api-code-conventions — final readonly service
- api-controller-service-pattern — DTO kullanım katmanları
- api-repository-pattern — Repo DTO’ları