Спринт 5: Трекер результатов

- Миграция 005: user_id в test_attempts (дефолт 1 = Гость)
- GET /api/attempts с фильтрами по тесту, дате и пагинацией
- Страница /tracker: таблица попыток, фильтры, пагинация
- Ссылка «Трекер» в шапке приложения

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Aleksey Razorvin
2026-03-21 15:26:40 +05:00
parent 9a0b3ba92c
commit fc684e7c7d
11 changed files with 522 additions and 22 deletions
@@ -0,0 +1,31 @@
"""005_attempt_user
Revision ID: 005
Revises: 004
Create Date: 2026-03-21
"""
from typing import Sequence, Union
import sqlalchemy as sa
from alembic import op
revision: str = "005"
down_revision: Union[str, None] = "004"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
op.add_column(
"test_attempts",
sa.Column(
"user_id",
sa.Integer(),
nullable=False,
server_default="1",
),
)
def downgrade() -> None:
op.drop_column("test_attempts", "user_id")