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

ApiClient Header Yönetimi

utils/ApiClient.ts singleton’da default header’lar.

Header Yaşam Döngüsü

OlayMethodHeader
Login başarılıapiClient.setAuthToken(token)Authorization: Bearer {token}
Firma seçildiapiClient.setCustomerId(id)x-cid: {customerId}
LogoutapiClient.removeAuthToken()Authorization kaldır
LogoutapiClient.removeCustomerId()x-cid kaldır

Sabit Header’lar

Her istekte gönderilir:

Content-Type: application/json
Accept: application/json
Accept-Language: tr
x-consumer-key: CueoknUqTMbqtT99jNoutfs1  (production) / customer (__DEV__)
X-App-Version: {app version}

x-consumer-key

API’nin istemci tipini tanımlaması için. Production’da CueoknUqTMbqtT99jNoutfs1, development’ta customer.

401 Unauthorized Handling

private async handleUnauthorized(): Promise<void> {
  // isHandlingUnauthorized flag — cascade engellemek için
  // Token + kullanıcı verisi temizlenir
  // AuthService.onLogout event'i tetiklenir
}

Bir 401 alındığında otomatik olarak tüm auth data temizlenir ve logout event’i yayılır.

Pending Requests Deduplication

Aynı URL + header’a aynı anda iki istek giderse, ikincisi bekler ve birincinin sonucunu alır:

private pendingRequests: Map<string, Promise<any>> = new Map();