feat: align docs with code, finish_place, registered status, UI filters, tests, CI
Some checks failed
CI / build-and-test (pull_request) Has been cancelled

- Add PLAN.md and sync backend docs, .env.example, API doc (404 details)
- Document mock DB and PORT/API_PORT in docs/backend.md; README monorepo + frontend/.env.example
- Migration 002: finish_place column, status registered; mapper and mock DB updated
- Frontend: registered status, finishPlace, calendar year/month filters, pace sparkline
- Extract createApp for tests; supertest + tsx; GitHub Actions CI

Made-with: Cursor
This commit is contained in:
Vaka.pro
2026-04-06 22:20:31 +03:00
parent 1ffc3a65eb
commit a2dcf67396
27 changed files with 1410 additions and 286 deletions

View File

@@ -18,13 +18,17 @@ function normalizeRace(input: unknown): Race {
isString(race?.date) &&
isString(race?.title) &&
typeof race?.distanceKm === "number" &&
(race?.status === null || race?.status === "planned" || race?.status === "completed") &&
(race?.status === null ||
race?.status === "planned" ||
race?.status === "registered" ||
race?.status === "completed") &&
isNullableString(race?.officialUrl) &&
isNullableString(race?.startTime) &&
isNullableString(race?.clusterSchedule) &&
isNullableString(race?.bibPickup) &&
isNullableString(race?.bibNumber) &&
isNullableString(race?.finishTime) &&
isNullableString(race?.finishPlace) &&
isNullableString(race?.notes) &&
isString(race?.createdAt) &&
(race?.updatedAt === null || isString(race?.updatedAt));
@@ -49,6 +53,7 @@ function normalizeRace(input: unknown): Race {
bibPickup: race.bibPickup,
bibNumber: race.bibNumber,
finishTime: race.finishTime,
finishPlace: race.finishPlace,
notes: race.notes,
createdAt: race.createdAt,
updatedAt: race.updatedAt,