Commit Graph

19 Commits

Author SHA1 Message Date
Aleksey Razorvin 98049244ae docs: document Sprint 2 UX improvements
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 13:18:18 +05:00
Aleksey Razorvin f414f62f31 feat: replace action buttons with dropdown menu in test list
Колонка с названием теста теперь занимает всю свободную ширину.
Три действия (Открыть, Изменить, Пройти тест) убраны в выпадающее меню по кнопке «…».

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 13:16:28 +05:00
Aleksey Razorvin 4f788a9cf6 feat: split test detail into employee view and author view
- /tests/:id — employee view, answers shown without correct/incorrect markers
- /tests/:id/edit — author view, correct answers highlighted + edit button (disabled until Sprint 4)
- TestList: add 'Изменить' button linking to author view

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 13:13:00 +05:00
Aleksey Razorvin 4762f86187 docs: mark Sprint 2 complete, document migration restart bug
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 13:03:33 +05:00
Aleksey Razorvin a7937c937b feat: add 'Пройти тест' button to test list table
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 12:58:38 +05:00
Aleksey Razorvin d5f6abb5ad feat: Sprint 2 — test taking + results
Backend:
- Models: TestAttempt, AttemptAnswer (migration 002)
- POST /api/attempts: start attempt, shuffle questions/answers,
  hide is_correct, expose is_multiple for UI hints
- POST /api/attempts/{id}/submit: save answers, calculate score,
  strict matching (selected == correct), return full result
- GET /api/attempts/{id}/result: fetch saved result
- Register attempts router in main.py

Frontend:
- api/attempts.ts: types + API functions
- TestTake page: one question at a time, progress bar, timer
  with auto-submit, back navigation controlled by test setting,
  radio/checkbox based on is_multiple
- AttemptResult page: score, pass/fail, per-question breakdown
  with correct/selected/missed answer highlighting
- App.tsx: add /tests/:testId/take and /attempts/:id/result routes
- TestDetail: add "Пройти тест" button

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 12:53:11 +05:00
Aleksey Razorvin 5551202d6f docs: update sprint 1 docs after manual testing
- СПРИНТЫ.md: mark Sprint 1 as completed (), check all tasks,
  add 4 bugs found and fixed during testing
- ШАГ_006.md: add bugs table with symptoms, causes and fixes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 12:46:30 +05:00
Aleksey Razorvin 3d21110dd9 fix: serve FastAPI docs under /api prefix
Set docs_url=/api/docs, redoc_url=/api/redoc,
openapi_url=/api/openapi.json so Swagger UI is
accessible through nginx at http://localhost/api/docs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 12:44:15 +05:00
Aleksey Razorvin cc23783e2a fix: resolve container startup issues
backend/Dockerfile:
- Add ENV PYTHONPATH=/app so alembic can import app.config
- Change CMD to bash entrypoint.sh (volume mount breaks chmod +x)

nginx/nginx.conf:
- Add resolver 127.0.0.11 (Docker internal DNS)
- Use set $backend/$frontend variables so nginx resolves
  hostnames per-request instead of at startup

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 12:15:37 +05:00
Aleksey Razorvin 8b17c5d3c4 feat: Sprint 1 — infrastructure + test creation
Backend:
- FastAPI + SQLAlchemy 2.0 async + Alembic
- Models: Test, Question, Answer
- API: GET /api/tests, GET /api/tests/{id}, POST /api/tests
- Pydantic validation: min 7 questions, min 3 answers, ≥1 correct

Frontend:
- React 18 + TypeScript + Vite + Ant Design + TanStack Query
- Pages: TestList, TestCreate (nested Form.List), TestDetail

Infrastructure:
- Docker Compose: db (postgres:16), backend, frontend, nginx
- Nginx: /api/ → FastAPI, / → Vite dev server with HMR
- Alembic migration 001_init: tests, questions, answers tables
- entrypoint.sh: wait for db, migrate, start uvicorn

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 12:05:04 +05:00
Aleksey Razorvin 054376bca7 docs: rewrite README with full project overview
- Add project description, roles, test format
- Add tech stack table
- Add sprint plan summary
- Add documentation index
- Add quick start command

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 11:41:30 +05:00
Aleksey Razorvin d013a16e98 docs: add sprint plan and step 005 log
- Create DOC/СПРИНТЫ.md: 5 sprints, value-first approach
- Sprint 1: infra + test creation (no auth)
- Sprint 2: taking tests + results
- Sprint 3: results tracker
- Sprint 4: auth + roles + user management
- Sprint 5: MAX notifications
- Add DOC/ШАГИ/ШАГ_2026-03-21_005.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 11:39:43 +05:00
Aleksey Razorvin 15de1e9369 docs: add tech stack document and step 004 log
- Create DOC/СТЕК.md: FastAPI + React + PostgreSQL + Docker
- Add DOC/ШАГИ/ШАГ_2026-03-21_004.md with decisions log

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 11:31:57 +05:00
Aleksey Razorvin 52c8aff459 docs: close all open questions, update ТЗ to v1.1
- Director role = HR-manager (same permissions)
- Editing assigned test creates new version
- Question order is random per attempt
- Navigation back configurable by test author
- Notifications via MAX messenger (last sprint)
- Export out of scope
- Add step 003 log

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 11:27:26 +05:00
Aleksey Razorvin 7ff7d9b1d0 docs: add technical specification and step 002 log
- Create DOC/ТЗ.md with full system requirements
- Add DOC/ШАГИ/ШАГ_2026-03-21_002.md with step log

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 11:20:22 +05:00
Aleksey Razorvin c1406c4ed1 merge: combine remote initial commit with local history 2026-03-21 11:07:35 +05:00
Aleksey Razorvin 20cc403b85 docs: update step 001 with remote repo setup
- Add git remote add origin command
- Add git push -u origin main result
- Mark remote repo task as completed

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 11:06:04 +05:00
Aleksey Razorvin 3c97d2ba04 chore: init project structure
- Initialize git repository
- Add .gitignore (OS, editor, env, deps)
- Create DOC/ШАГИ/ directory for design documentation
- Add first step log: project kickoff and repo setup

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 10:58:14 +05:00
arazor72 c689013d20 Initial commit 2026-03-21 10:56:22 +05:00