Классификация ошибок
Проект обязан использовать единую классификацию ошибок. Это обеспечивает одинаковое поведение UI и предсказуемость для пользователя. Все ошибки нормализуются в единый формат перед отображением в интерфейсе.
Категории ошибок
MUST
Проект обязан поддерживать следующие категории ошибок:
- Network/Connectivity — отсутствие сети, таймауты, сетевые сбои
- Auth/Access — 401 (unauthorized), 403 (forbidden), истекшая сессия, отсутствие прав доступа
- Not Found — 404 (ресурс не найден), отсутствующие данные
- Conflict — 409 (конфликт версий), повторная операция, race condition
- Other — прочие и доменно-специфичные ошибки
SHOULD
- Validation — можно выделить отдельно от Other для ошибок валидации форм
- Domain / Business Rules — ошибки, специфичные для домена приложения: нарушены бизнес-правила, ограничения или состояния данных.
- Примеры: закончилась подписка, превышен лимит запросов на тарифе, аккаунт не верифицирован, операция запрещена по бизнес-правилу, истёк пробный период.
Область применения
Классификация применяется для:
- Back-end API endpoints
- Next.js API routes
- GraphQL queries/mutations
- Внешние сервисы и интеграции
Единая модель ошибки
MUST
- Ошибка нормализуется в единый формат — перед передачей в UI компонент.
- UI работает только с нормализованной ошибкой — raw ошибки не попадают в компоненты.
- Модель содержит все необходимые данные — тип, сообщение, статус, возможность retry.
Пример модели
export enum ErrorKind {
Network = 'network',
Auth = 'auth',
NotFound = 'not_found',
Conflict = 'conflict',
Validation = 'validation',
Server = 'server',
Unknown = 'unknown',
}
export interface AppError {
kind: ErrorKind; // Категория ошибки
messageKey: string; // Ключ для i18n локализации
status?: number; // HTTP статус (если применимо)
retriable?: boolean; // Можно ли повторить операцию
context?: Record<string, unknown>; // Дополнительный контекст
}