4.2 KiB
4.2 KiB
Инструкция агенту: устранение рассинхронизации backend с планом/контрактом
Документ описывает, как выполнить план исправлений только через изменения кода (без правок существующей документации в docs/).
1) Ветка и границы задачи
- Создать отдельную ветку по best practice, например:
fix/backend-api-validation-and-runtime-sync. - Не менять существующие файлы документации в
docs/как способ "починить" замечания. - Исправления вносятся в runtime-код и обязательные артефакты репозитория.
2) Обязательные изменения в коде
A. Строгая валидация GET /races
Файл: backend/src/routes/races.ts
- Добавить явную проверку
year:- целое число;
- при невалидном значении вернуть
400:{"error":"validation_error","details":[...]}
- Добавить явную проверку
month:- целое число в диапазоне
1..12; - при невалидном значении вернуть
400в том же формате.
- целое число в диапазоне
- Исключить передачу
NaN/некорректных значений в SQL-параметры.
B. Разделение ошибок валидации и ошибок БД
Файл: backend/src/routes/races.ts
400использовать только для ошибок входа (query/body/params).503 {"error":"database_unavailable"}использовать только для технической недоступности БД.- Сохранить единый JSON-формат ошибок во всех CRUD-маршрутах.
C. Выравнивание конфигурации порта
Файл: backend/src/config.ts
- Поддержать оба env-подхода:
- приоритет
PORT, - затем
API_PORT, - затем fallback
3001.
- приоритет
D. Обязательный root-артефакт
Файл: README.md (в корне)
- Создать базовый
README.mdс:- кратким описанием проекта,
- минимальным quick start,
- ссылками на текущие документы backend/API.
3) Допустимая реорганизация кода
- Можно добавить небольшие локальные helper-функции в
backend/src/routes/races.ts. - При необходимости можно вынести общие mapper/validator-хелперы в
backend/src/mappers/race.ts, если это уменьшает дублирование. - Не усложнять архитектуру: только то, что нужно для контракта и устойчивого поведения API.
4) Проверка результата
Минимум выполнить:
npm run buildвbackend/(типизация/сборка).- Проверка диагностики/линтов по измененным backend-файлам.
- Smoke-сценарии API:
GET /health->200,GET /ready->200при доступной БД или503при недоступной,GET /races?year=bad->400,GET /races?month=13->400,GET /races?year=2026&month=5-> корректный200и данные/пустой массив.
5) Критерии готовности (Definition of Done)
- Контракт валидации
GET /racesсоблюден в runtime. - Валидационные ошибки не маскируются под
database_unavailable. - Конфиг порта поддерживает
PORTиAPI_PORTс правильным приоритетом. - В репозитории есть корневой
README.md. - Никакие существующие документы в
docs/не менялись для "закрытия" замечаний.