Files
runners-calendar/PLAN.md
Anton f74ce6ed88
Some checks failed
CI / build-and-test (pull_request) Has been cancelled
docs: fix README dev/production commands, update FRONTEND_PLAN status, remove broken links
- README: separate dev (npm run dev) and production (npm run build && npm start) steps

- FRONTEND_PLAN: mark backend-dependency-task as completed (finishPlace already in API)

- Remove dead references to missing agent-frontend-ui-instructions.md from PLAN.md and FRONTEND_PLAN.md

Made-with: Cursor
2026-04-07 17:51:02 +03:00

5.2 KiB
Raw Blame History

Calendar Run — план продукта

Монорепозиторий: backend (Express + PostgreSQL) и frontend (React + Vite). Цель — календарь стартов с метриками бегуна: планирование, результаты, PR и сравнение.

Вне объёма (намеренно)

  • Авторизация, мультипользовательность, личные кабинеты.
  • Парсинг сайтов организаторов и автозагрузка результатов.
  • Отдача статики SPA с того же процесса, что и API (фронт — отдельный Vite/build).

Модель данных Race (API — camelCase)

Поле Тип Описание
id string Стабильный ключ, например {YYYY-MM-DD}-{slug}
date string YYYY-MM-DD
title string Название
distanceKm number Дистанция, км
status planned registered
officialUrl string null
startTime string null
clusterSchedule string null
bibPickup string null
bibNumber string null
finishTime string null
finishPlace string null
notes string null
createdAt string ISO, read-only
updatedAt string null

PostgreSQL: snake_case столбцы, маппинг в [backend/src/mappers/race.ts](backend/src/mappers/race.ts).

HTTP API (минимум)

  • GET /health — liveness без БД.
  • GET /ready — readiness (подключение к БД; в режиме mock считается доступной — только для dev/CI).
  • GET /races — список; query: year, month (целые; month 112).
  • GET /races/:id, POST /races, PATCH /races/:id, DELETE /races/:id.

Ошибки: JSON, единый стиль (validation_error, not_found, conflict, database_unavailable). Подробности — [docs/backend-api-for-frontend.md](docs/backend-api-for-frontend.md).

Seed

  • Файл [import/races_2026_calendar.csv](import/races_2026_calendar.csv).
  • Стабильный id, upsert по id. Повторный запуск безопасен.

Режим без PostgreSQL (dev/CI)

Переменная CALENDAR_RUN_MOCK_DB=1 (или true): HTTP-обработчики используют заглушку пула без реальной БД. Не использовать для npm run db:migrate и npm run seed — нужен настоящий Postgres и DB_*.

Frontend (SPA)

  • Маршруты: дашборд (/), список стартов (/races), карточка (/races/:id).
  • Дашборд: ближайший старт, последний результат, PR, сезон, PR по ключевым дистанциям, сравнение завершённых стартов, при необходимости — лёгкая визуализация прогресса.
  • Список: будущие / прошедшие; фильтрация по году и месяцу через API.
  • Стили: BEM и дизайн-токены (см. frontend/src/styles/tokens.css).

Критерии готовности текущей итерации

  • Документация согласована с кодом: [README.md](README.md), [docs/backend.md](docs/backend.md), [docs/backend-api-for-frontend.md](docs/backend-api-for-frontend.md).
  • Миграции и seed воспроизводимы; контракт API покрыт smoke-тестами в CI при необходимости с mock-БД.