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 yok
  • enabled: 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.*