Proje: Okul Platform · Hub: Okul Platform — Conventions

BaseRepository

App\Repositories\Repos\BaseRepository — Tüm repository’lerin base class’ı.

applyConditions()

QueryCondition[] listesi ile filtre uygula:

$this->applyConditions($query, [
    QueryCondition::equal('school_id', $dto->schoolId),
    QueryCondition::greaterThan('created_at', $dto->createdAtAfter),
    QueryCondition::in('status', $dto->statuses),
]);

null dönen condition’lar otomatik skip edilir (opsiyonel filtreler için).

applyIncludes()

$this->applyIncludes($query, $dto->includes);  // includes=['school', 'user']

QueryCondition Helper

App\Repositories\Repos\Helpers\QueryCondition

Desteklenen operatörler:

=, !=, >, <, >=, <=
like, in, notin
withtrashed, onlytrashed
isnull, isnotnull
textmultisearch, arrayisnull, arrayisnotnull
between, fulltextsearch

Factory metodlar:

QueryCondition::equal($column, $value)    // null ise null döner
QueryCondition::notEqual($column, $value)
QueryCondition::greaterThan($column, $value)
QueryCondition::likeWithSpaces($column, $value)
QueryCondition::in($column, $values)
// ... diğerleri

BackedEnum desteği: Otomatik ->value dönüşümü yapar. Null safety: $value === null ise null döner, applyConditions bunu skip eder.

Repository DTO

Her repository metodu için FilterXDTO veya IndexXDTO kullanılır. DTO’larda pageLength, page, orderField, orderDirection, includes standart alanlar.

SimplePaginatorDTO

Basit pagination için. pageLength + from (offset) kullanır. @deprecated — Yeni kodda LengthAwarePaginator tercih edilmeli.

Repository Naming

  • listForAdmin(dto) — Admin filtrelemeli liste
  • listForCustomer(dto) — Customer filtrelemeli liste
  • find(id) — Tekil kayıt
  • create(dto) — Oluştur
  • update(model, dto) — Güncelle
  • delete(model) — Sil