Skip to content

Feature/jury panel#18

Merged
izachoc merged 58 commits into
devfrom
feature/jury-panel
May 15, 2026
Merged

Feature/jury panel#18
izachoc merged 58 commits into
devfrom
feature/jury-panel

Conversation

@Fundi1330
Copy link
Copy Markdown
Member

@Fundi1330 Fundi1330 commented May 15, 2026

Summary by CodeRabbit

  • New Features

    • Jury evaluation workflow: assignment generation, per-assignment evaluations, status flow, and leaderboards
    • Task evaluation criteria with weighted scoring and per-criterion scores
    • Jury panel UI and evaluation modal for reviewers; organizer controls to finish evaluations
  • Documentation

    • Test instructions: run backend tests skipping slow ones via pytest -m 'not slow'
  • Improvements

    • New modal/UI components, localized strings (i18n) for jury and modals
    • API request/auth helpers and normalized request paths (trailing slashes) for consistency
  • Tests

    • Added integration and unit tests covering jury flows and leaderboard calculations

Review Change Stack

Fundi1330 and others added 30 commits May 9, 2026 22:14
Fundi1330 and others added 22 commits May 15, 2026 14:21
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 15, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: ece1f373-fc44-4197-be75-27d6a35a17ca

📥 Commits

Reviewing files that changed from the base of the PR and between bcfe4d4 and b72190a.

⛔ Files ignored due to path filters (2)
  • frontend/src/pages/OrganizerPanel/components/__snapshots__/TournamentInfoModal.test.tsx.snap is excluded by !**/*.snap
  • frontend/src/pages/Profile/__snapshots__/Profile.test.tsx.snap is excluded by !**/*.snap
📒 Files selected for processing (111)
  • README.en.md
  • README.ua.md
  • backend/alembic/versions/127c3fae41db_.py
  • backend/alembic/versions/128f25c448b0_.py
  • backend/alembic/versions/3191704e4d9a_.py
  • backend/alembic/versions/395793e08475_додано_нові_таблиці.py
  • backend/alembic/versions/39b777378bc8_.py
  • backend/alembic/versions/58852077e22f_.py
  • backend/alembic/versions/6150229200ba_merge_two_base_branches.py
  • backend/alembic/versions/707211cdd0c9_fix_heads.py
  • backend/alembic/versions/cfe129b6e3a3_.py
  • backend/alembic/versions/d146519cd8df_remove_is_global_column_from_.py
  • backend/alembic/versions/d29a9dc3f541_.py
  • backend/alembic/versions/dfc9ca7d5a57_.py
  • backend/app/__init__.py
  • backend/app/admin/__init__.py
  • backend/app/config.py
  • backend/app/core/seeds/__init__.py
  • backend/app/core/seeds/task_requirement_options.py
  • backend/app/dependencies/__init__.py
  • backend/app/dependencies/current_user.py
  • backend/app/dependencies/jury.py
  • backend/app/models/__init__.py
  • backend/app/models/evaluation.py
  • backend/app/models/submission.py
  • backend/app/models/task.py
  • backend/app/models/team.py
  • backend/app/models/tournament.py
  • backend/app/models/user.py
  • backend/app/routes/jury.py
  • backend/app/routes/submissions.py
  • backend/app/routes/tasks.py
  • backend/app/routes/teams.py
  • backend/app/routes/tournaments.py
  • backend/app/schemas/__init__.py
  • backend/app/schemas/evaluation.py
  • backend/app/schemas/notification.py
  • backend/app/schemas/submission.py
  • backend/app/schemas/task.py
  • backend/app/schemas/team.py
  • backend/app/schemas/tournament.py
  • backend/app/schemas/user.py
  • backend/app/utils/__init__.py
  • backend/app/utils/assignments.py
  • backend/app/utils/criterions.py
  • backend/app/utils/routes/__init__.py
  • backend/app/utils/routes/jury.py
  • backend/app/utils/routes/leaderboard.py
  • backend/app/utils/tasks.py
  • backend/pytest.ini
  • backend/tests/factories.py
  • backend/tests/routes/test_jury.py
  • backend/tests/routes/test_leaderboard.py
  • backend/tests/routes/test_tournaments.py
  • backend/tests/test_models.py
  • frontend/src/api/requests/auth.ts
  • frontend/src/api/requests/createTask.ts
  • frontend/src/api/requests/createTournament.ts
  • frontend/src/api/requests/deleteTask.ts
  • frontend/src/api/requests/deleteTournament.ts
  • frontend/src/api/requests/finishEvaluation.ts
  • frontend/src/api/requests/getAllTournaments.ts
  • frontend/src/api/requests/getAllUsers.ts
  • frontend/src/api/requests/getJuryAssignments.ts
  • frontend/src/api/requests/getJuryTasks.ts
  • frontend/src/api/requests/getTask.ts
  • frontend/src/api/requests/getTasks.ts
  • frontend/src/api/requests/index.ts
  • frontend/src/api/requests/requests.test.ts
  • frontend/src/api/requests/saveAssignmentEvaluation.ts
  • frontend/src/api/requests/types.ts
  • frontend/src/api/requests/updateTask.ts
  • frontend/src/api/requests/updateTournament.ts
  • frontend/src/components/Header.tsx
  • frontend/src/components/Stars.tsx
  • frontend/src/components/ui/CustomSelect.tsx
  • frontend/src/components/ui/DateTimePicker.tsx
  • frontend/src/components/ui/Modal.tsx
  • frontend/src/components/ui/index.ts
  • frontend/src/i18n/config.ts
  • frontend/src/locales/en/jury.json
  • frontend/src/locales/en/modals.json
  • frontend/src/locales/uk/jury.json
  • frontend/src/locales/uk/modals.json
  • frontend/src/pages/JuryPanel/EvaluateTournamentPage.tsx
  • frontend/src/pages/JuryPanel/JuryPanel.tsx
  • frontend/src/pages/JuryPanel/components/EvaluationsModal.tsx
  • frontend/src/pages/JuryPanel/components/JuryPanelShell.tsx
  • frontend/src/pages/JuryPanel/components/SubmissionCard.tsx
  • frontend/src/pages/JuryPanel/components/TournamentCard.tsx
  • frontend/src/pages/JuryPanel/formatStatusLabel.ts
  • frontend/src/pages/JuryPanel/juryQueryKeys.ts
  • frontend/src/pages/OrganizerPanel/CreateTournamentModal.tsx
  • frontend/src/pages/OrganizerPanel/EditTournamentModal.tsx
  • frontend/src/pages/OrganizerPanel/OrganizerPanel.tsx
  • frontend/src/pages/OrganizerPanel/components/JurySelectionModal.tsx
  • frontend/src/pages/OrganizerPanel/components/TaskManagementModal.test.tsx
  • frontend/src/pages/OrganizerPanel/components/TaskManagementModal.tsx
  • frontend/src/pages/OrganizerPanel/components/TasksTab.tsx
  • frontend/src/pages/OrganizerPanel/components/TournamentInfoModal.tsx
  • frontend/src/pages/Profile/EditProfileModal.tsx
  • frontend/src/pages/Profile/Profile.tsx
  • frontend/src/pages/TournamentPage/TournamentPage.tsx
  • frontend/src/pages/TournamentPage/components/LookingForTeamModal.test.tsx
  • frontend/src/pages/TournamentPage/components/LookingForTeamModal.tsx
  • frontend/src/pages/TournamentPage/types.ts
  • frontend/src/routers/Router.tsx
  • frontend/src/setupTests.ts
  • frontend/src/utils/naiveDateTime.test.ts
  • frontend/src/utils/naiveDateTime.ts
  • shared/app_config.json

📝 Walkthrough

Walkthrough

Adds jury assignments and criterion-based evaluations end-to-end: DB migrations and model changes, new FastAPI jury routes/dependencies/utils, updated schemas/admin, frontend API clients and jury UI with i18n and shared modal components, test coverage, and pytest marker configuration.

Changes

End-to-end Jury Evaluation Feature

Layer / File(s) Summary
Database migrations
backend/alembic/...
Adds/removes/updates Alembic revisions to support submission PKs, cascade FKs, and schema adjustments for jury/evaluation models (395793e08475, 58852077e22f, removed legacy revisions).
ORM models and config
backend/app/models/*, backend/app/config.py, shared/app_config.json
Adds JuryAssignment, CriterionScore, TaskEvaluationCriterion, task/jury-related fields/relationships; converts submissions/urls to PK mixins; adds jury_assignment_statuses config and settings accessors.
Backend routes, deps, and utils
backend/app/routes/*, backend/app/dependencies/*, backend/app/utils/*
Implements jury routes (list tasks, assignments, create/patch evaluations, generate assignments, finish-evaluation, leaderboards), jury authorization/state dependencies, get_assignment/get_task helpers, finish_evaluation and leaderboard calculation utilities.
Schemas and admin
backend/app/schemas/*, backend/app/admin/__init__.py
Replaces requirement-based evaluation schemas with criterion-scoped Pydantic models, adds jury assignment/public types, updates admin model views to new evaluation models.
Submissions & tasks endpoints
backend/app/routes/submissions.py, backend/app/routes/tasks.py
Switches submission endpoints/lookup to submission-scoped IDs; adds create_submission under tasks; normalizes task times and handles criteria creation/replacement.
Dependencies, seeds, and tests (backend)
backend/app/dependencies/*, backend/app/core/seeds/*, backend/tests/*, backend/pytest.ini
Updates current_user token handling, adds jury dependency re-exports, commits seeding, expands factories and adds extensive jury/leaderboard tests; configures slow pytest marker.
Frontend API requests and types
frontend/src/api/requests/*, frontend/src/api/requests/types.ts
Adds authHeaders, jury-related request helpers (getJuryTasks/getJuryAssignments/saveAssignmentEvaluation/finishEvaluation/getTask), updates trailing-slash endpoints, expands request/response TS types.
Frontend UI, components, and i18n
frontend/src/pages/JuryPanel/*, frontend/src/components/ui/*, frontend/src/i18n/*, frontend/src/locales/*
Adds JuryPanel, EvaluateTournamentPage, SubmissionCard, TournamentCard, EvaluationsModal, JuryPanelShell, shared Modal component, Stars, naive datetime utilities; registers jury and modals i18n namespaces and translation files (EN/UK).
Frontend organizer/profile/task flows
frontend/src/pages/OrganizerPanel/*, frontend/src/pages/Profile/*, frontend/src/pages/TournamentPage/*
Adapts task create/update/delete to pass Firebase user and naive datetimes, integrates modal/ui changes, adjusts profile organizer visibility and router routes for jury panel.
Docs & small changes
README.en.md, README.ua.md
Updates test run instruction to exclude slow tests (pytest -m 'not slow').

Sequence Diagram(s)

sequenceDiagram
  participant Frontend
  participant API as backend.app.routes.jury
  participant Utils as backend.app.utils.routes.jury
  participant DB as Database
  Frontend->>API: request assignments / submit evaluation / finish-evaluation
  API->>DB: load/save JuryAssignment, SubmissionEvaluation, CriterionScore, Task
  API->>Utils: finish_evaluation(task, assignments)
  Utils->>DB: update assignment statuses, possibly update Task.status
  API->>Frontend: return updated assignments/leaderboard
Loading

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Possibly related PRs

Suggested reviewers

  • AnnPoshtak

Poem

A rabbit taps the gavel—order in the burrow tonight!
Stars twinkle over schemas; juries weigh the light.
Scores hop through routes, leaderboards bloom anew,
Frontend glows in modals, with translations true.
Submissions gain IDs—thump!—refactor done just right. 🥕✨

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

@izachoc izachoc merged commit 31a3b54 into dev May 15, 2026
1 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants