Процедуры контроля (Code Review)
Обработка ошибок проверяется на этапе Code Review. Ревьюер обязан убедиться в соблюдении стандартов проекта и предотвратить типичные ошибки.
Чек-лист для ревьюера
MUST
1. Корректный уровень отображения ошибок
2. Отсутствие raw backend messages
- В UI нет технических сообщений — только локализованные через i18n
- Не показываются HTTP-статусы — 400, 401, 500 и т.д.
- Stack trace скрыт — только в dev mode или логах
- Используется
normalizeError()— raw ошибки не передаются в UI
3. Retry используется безопасно
-
Retry только для retriable ошибок:
- ✅ Network/Connectivity
- ✅ 5xx (временные серверные ошибки)
- ❌ 4xx (кроме 429)
- ❌ Валидация
-
Количество попыток ограничено (об ычно 3)
-
Пользователь информируется о попытках восстановления
4. Пользовательский ввод не теряется
- Форма НЕ сбрасывается при ошибках — данные остаются
- Сброс только после успеха или явного действия пользователя
- Для длинных форм используется автосохранение (optional)
5. Типизация и инкапсуляция
- Ошибка типизирована: enum/union type или
Result<T, E> - Логика обработки инкапсулирована — UI получает готовый результат
- Используются именованные константы для HTTP статусов:
6. Логирование unexpected errors
- Используется единый модуль логирования — не прямые
console.* - Критичные ошибки логируются — для мониторинга и анализа
- Контекст сохраняется — user ID, action, timestamp
Автоматизация проверок
ESLint правила (обязательно)
// .eslintrc.js
rules: {
// Запрет console.* в обход модуля логирования
'no-console': ['error', { allow: ['warn'] }],
// Запрет throw не-Error объектов
'@typescript-eslint/only-throw-error': 'error',
// Запрет пустых catch-блоков
'no-empty': 'error',
// Запрет необработанных промисов
'@typescript-eslint/no-floating-promises': 'error',
// Запрет magic numbers для HTTP статусов
'no-magic-numbers': ['error', {
ignore: [0, 1, -1],
ignoreArrayIndexes: true,
enforceConst: true
}]
}