import {Meta} from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/ru/functional-basic/Classes/ApiErrorStorage - Управление ошибками'/>

# Класс ApiErrorStorage

Класс `ApiErrorStorage` является **менеджером для обработки и идентификации состояний ошибок API**. Он обеспечивает централизованное хранилище критериев ошибок API, позволяя системе идентифицировать конкретные ошибки путем сопоставления статуса ответа, кода ошибки из тела JSON, метода запроса и URL.

## Ключевые особенности

- **Централизованное хранилище** — агрегация всех известных паттернов ошибок API в одном месте для единообразной обработки.
- **Сопоставление по паттернам** — идентификация ошибок по статусу HTTP, пользовательским кодам ошибок, методам запроса или шаблонам URL (включая RegExp).
- **Структурированное преобразование** — преобразование сырых сетевых ошибок в структурированные элементы ошибок прикладного уровня.
- **Пользовательская валидация** — поддержка кастомных функций валидации для сложных сценариев идентификации ошибок.

## Методы

### Управление

- `add(item: ApiErrorStorageItem | ApiErrorStorageList): this` — Добавляет один или несколько элементов или списков ошибок во внутреннее хранилище.

### Идентификация

#### `find`

Ищет подходящий элемент ошибки в хранилище путем анализа ответа. Автоматически пытается извлечь код и сообщение об ошибке из тела ответа.

**Параметры:**
- `method: ApiMethodItem` — HTTP-метод, использованный для запроса.
- `response: Response` — Объект ответа Fetch API.

**Возвращает:** `Promise<ApiErrorStorageItem>` — Найденный элемент ошибки или сгенерированный элемент ошибки, если совпадений не найдено.

```javascript
const errorItem = await errorStorage.find(ApiMethodItem.get, response);

if (errorItem.code === 'USER_NOT_FOUND') {
  // Обработка конкретной ошибки
}
```

## Типы

### ApiErrorStorageItem

- `url: string | RegExp` — Строка URL или регулярное выражение для сопоставления с URL запроса.
- `method: ApiMethodItem` — HTTP-метод, необходимый для совпадения.
- `code?: string` — Необязательный код ошибки для сопоставления с телом JSON.
- `status?: number` — Необязательный код статуса HTTP для сопоставления.
- `validation?: (response: Response) => boolean` — Необязательная функция пользовательской валидации.
- `message?: string | ((response?: Response) => string)` — Необязательное сообщение об ошибке или фабрика сообщений.
