Proje: Okul B2B App · Hub: Okul B2B App — Conventions
Error Handling Pattern
Hata Sınıfları
| Sınıf | Dosya | Kullanım |
|---|---|---|
ServerError | utils/NetworkManager.ts | HTTP 4xx/5xx cevaplar |
NetworkError | utils/NetworkManager.ts | Ağ erişim hatası |
TimeoutError | utils/NetworkManager.ts | 30s timeout |
ConnectionError | utils/NetworkManager.ts | Bağ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 bordererror→ kırmızı sol borderinfo→ 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' });Related
- api-client-pattern — HTTP istemci
- analytics-event-sistemi — hata tracking