Proje: Okul B2B App · Hub: Okul B2B App — Domain

Firma ve Okul Hiyerarşisi

Hiyerarşi

Kullanıcı (User)
  └── Firma(lar) (Customer / Company)
       └── Okul(lar) (School)
            ├── Leadler
            ├── Galeri (fotoğraflar, logo, video)
            └── İçerikler (duyuru/etkinlik/başarı)

Anahtar Kavramlar

Firma (Customer / Company)

API’de customer olarak geçer. Bir kullanıcının birden fazla firması olabilir. Firma ID’si x-cid HTTP header’ı olarak her istekte gönderilir.

Okul (School)

Her firmanın bir veya birden fazla okulu vardır. Galeri, lead ve içerik işlemleri okul bazında yapılır. Okul ID’si endpoint parametresi olarak geçer (ör. /schools/{id}/media).

Login Sonrası Firma Seçimi

/customer/me/firms → firms[]
  ↓
  1 firma → otomatik seç, CompanyProvider isReady: true
  N firma → CompanySelectionScreen göster
  0 firma → NoCompaniesScreen göster

Seçilen firma apiClient.setCustomerId(id) ile tüm isteklere x-cid olarak eklenir.

API Endpoint Yapısı

Tüm authenticated endpointler x-cid header’ı bekler:

/customer/leads               → bu firmaya ait leadler
/customer/me/firms            → kullanıcının firmaları
/customer/{id}/schools        → firmanın okulları
/customer/school-contents     → okul içerikleri
/media/{schoolId}/...         → okul medyası

SchoolUI vs ApiSchool

SchoolContext içinde API’den gelen ApiSchool nesnesi SchoolUI formatına dönüştürülür:

  • province_namecity
  • county_namedistrict
  • neighbourhood_nameneighborhood
  • requestCount, photoCount → ayrıca yüklenir (paralel: leads + galeri sorgusu)

Çok Okul Durumu

Birden fazla okulun olduğu durumlarda SchoolContext bir selector UI sunar. Seçilen okul AsyncStorage’a kaydedilir (session’lar arası kalıcılık). Lead/galeri/içerik ekranları selectedSchool üzerinden filtreleme yapar.