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

Error Handling Pattern

Hata Sınıfları

SınıfDosyaKullanım
ServerErrorutils/NetworkManager.tsHTTP 4xx/5xx cevaplar
NetworkErrorutils/NetworkManager.tsAğ erişim hatası
TimeoutErrorutils/NetworkManager.ts30s timeout
ConnectionErrorutils/NetworkManager.tsBağlantı kurulamadı

ServerError Kullanımı

import { ServerError } from '@/utils/NetworkManager';
 
try {
  const result = await apiClient.post('/endpoint', data);
} catch (error) {
  if (error instanceof ServerError) {
    const status = error.status;          // HTTP status kodu
    const message = error.getApiMessage(); // API'den gelen mesaj
    const fields = error.getFieldErrors(); // Validation hataları
    // { title: ["Bu alan zorunludur"], ... }
  }
}

SimpleErrorHandler

import { SimpleErrorHandler } from '@/utils/SimpleErrorHandler';
 
const message = SimpleErrorHandler.getErrorMessage(error);
// Kullanıcıya gösterilecek Türkçe hata mesajı

Toast Notification

react-native-toast-message ile kullanıcıya gösterilir. _layout.tsx’de toastConfig tanımlı:

  • success → yeşil sol border
  • error → kırmızı sol border
  • info → mavi sol border
import Toast from 'react-native-toast-message';
 
Toast.show({ type: 'error', text1: 'Hata', text2: message });
Toast.show({ type: 'success', text1: 'Başarılı', text2: 'İşlem tamamlandı' });

Service Layer Hata Pattern

Servisler throw etmek yerine boş/default değer döner:

// LeadsService pattern
try {
  const response = await apiClient.get(endpoint);
  return transformData(response.data);
} catch (error) {
  logError('Error description', error as Error);
  return getEmptyLeadsResponse(page, pageSize); // Never throws
}

Bu pattern ekranların crash’i engellemek için kullanılır.

Analytics ile Entegrasyon

Hata durumlarında trackErrorEvent çağrılır:

trackAuthEvent('login', error.status, { error_code: 'LOGIN_FAILED' });