Proje: OkulUp · Hub: OkulUp — Domain
MobileConfig ve Feature Flags
Nedir?
GET /api/mobile-config endpoint’i — authenticated kullanıcının okuluna özel config.
Her okul kendi özelliklerini açıp kapatabilir.
Yapı
MobileConfig {
school: { id, name }
features: MobileConfigFeatures
policies: MobileConfigPolicies
branding: MobileConfigBranding
support: MobileConfigSupport
permissions: PermissionMap // user'ın bu okulda gerçek backend permission'ları
}Feature Flags
MobileConfigFeatures {
messaging: boolean // mesajlaşma
broadcast_messaging: boolean // toplu mesaj
attendance_reports: boolean // yoklama
payment_summary: boolean // ödemeler
academic_reports: boolean // akademik raporlar
gallery: boolean // galeri
appointments: boolean // randevular
tracking: boolean // günlük takip
assignments: boolean // ödevler (default OFF dikkat!)
document_requests: boolean // belge talepleri
meal_menu: boolean // yemek menüsü
}Kritik: assignments default false (opt-in). Diğerleri default true (opt-out).
Policies
MobileConfigPolicies {
message_reply_default: 'everyone' | 'teacher_only' | 'no_replies'
allow_parent_direct_message: boolean
show_teacher_read_receipts_to_parent: boolean
allow_teacher_payment_visibility: boolean
support_contact_source: 'school' | 'platform'
}Branding
Okul adı, primary/secondary renk, logo URL — ileride okul bazlı tema değişikliği için hazır.
Cache
useMobileConfig() hook’unda:
staleTime: 30 dakika— sık refetch yokenabled: isAuthenticated— sadece login’den sonra- Fetch başarılıysa
useAuthStore.getState().setPermissions(config.permissions)çağrılıyor (auth store’daki permissions güncelleniyor)
Kullanım
Hem canAccess() hem navigation kontrolünde kullanılıyor:
const { data: mobileConfig } = useMobileConfig();
// TabBar ve Drawer: getTabItems({..., mobileConfig})
// canAccess: context.mobileConfig?.features.*Related
- permission-system — feature flag’ların permission entegrasyonu
- user-roles — okul bazlı erişim