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_name→citycounty_name→districtneighbourhood_name→neighborhoodrequestCount,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.
Related
- leads-basvu-yonetimi — lead domain’i
- auth-akisi — giriş ve firma seçimi akışı