Перейти к основному содержимому

Процедуры контроля (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
}]
}