# سیستم مدیریت خطا

## ساختار خطاها

خطاهای API در این پروژه دارای ساختار زیر هستند:

```typescript
{
  "status": 400,
  "success": false,
  "error": {
    "message": "Bad request",
    "details": ["فرمت موبایل اشتباه است"]
  }
}
```

## Type های تعریف شده

### IGeneralError
Type اصلی برای خطاهای API:
```typescript
interface IGeneralError {
  status: number;
  success: boolean;
  error: {
    message: string;
    details: string[];
  };
}
```

### IQueryError
Type برای خطاهای React Query:
```typescript
interface IQueryError {
  response?: {
    data: IGeneralError;
  };
}
```

## نحوه استفاده

### 1. استفاده مستقیم در onError
```typescript
onError: (error: Error) => {
  const axiosError = error as { response?: { data: IGeneralError } };
  const errorMessage = axiosError?.response?.data?.error?.details?.[0] || 'خطایی رخ داده است';
  toast(errorMessage, 'error');
}
```

### 2. استفاده از utility function
```typescript
import { extractErrorMessage } from '@/helpers/errorUtils';

onError: (error: Error) => {
  const errorMessage = extractErrorMessage(error);
  toast(errorMessage, 'error');
}
```

### 3. استفاده با fallback message
```typescript
const errorMessage = extractErrorMessage(error, 'خطای پیش‌فرض');
```

## Utility Functions

### extractErrorMessage
این تابع پیام خطا را از error object استخراج می‌کند:
```typescript
export const extractErrorMessage = (
  error: Error | unknown,
  fallbackMessage: string = 'خطایی رخ داده است'
): string
```

### isValidError
این تابع بررسی می‌کند که آیا error object معتبر است یا نه:
```typescript
export const isValidError = (error: unknown): error is { response?: { data: IGeneralError } }
```

## نکات مهم

1. همیشه از `error?.response?.data?.error?.details?.[0]` برای دسترسی به پیام خطا استفاده کنید
2. از `fallback message` برای نمایش پیام پیش‌فرض در صورت عدم وجود خطا استفاده کنید
3. از utility functions برای مدیریت بهتر خطاها استفاده کنید
4. Type safety را با استفاده از type assertion حفظ کنید
