ITADN

[feat] 管理者画面: 問題を検索・画面遷移なしでグレーディングできるように改修しましょう

#3581ClosedKATO-Hiro 创建于 2026-05-23
priority middle
K
KATO-Hirocommented
## 概要 `/vote_management` の機能は基本的にそのままに、ルート名の整理と検索・表示の改善を加えて `/tasks/grade` に移行する。 主な変更点: - 「投票統計が存在する問題のみ」から「全問題」を対象とした一覧表示に変更 - 問題名・問題ID・コンテスト名による検索バーを追加(votes ページと同じ動作) - 表示順を `compareByContestIdAndTaskId`(新しいコンテストが上)に統一 - 票数列を削除(検索で絞れるため不要) - DBグレードの編集 UI は現行のまま(常時 `<select>` 表示 + `use:enhance` で非遷移更新) - problems ページの `/tasks/[task_id]` リンクを削除 ## 設計判断 ### 既存サービス関数の再利用 `getAllTasksWithVoteInfo()`(`src/features/votes/services/vote_statistics.ts`)は: - `prisma.task.findMany()` で**全タスク**を取得済み - `estimatedGrade: TaskGrade | null`(VotedGradeStatistics 未存在なら null)を含む - `task_id`, `title`, `contest_id` を持つため `SearchableTask` 型と互換 このため**新規サービス関数は不要**。 ### ルート配置 `(admin)` はルートグループ(URL に影響しない)のため、`src/routes/(admin)/tasks/grade/` が `/tasks/grade` になる。既存の `(admin)/tasks/[task_id]`(静的 `grade` セグメントが動的ルートより優先)と競合しない。 ### 検索動作 votes ページと揃え、検索ワード入力前は結果を表示しない。管理者向けだが、全件表示するとパフォーマンスが読みにくくなるため。上限は votes と同じ 20 件。 ## 却下した代替案 | 案 | 却下理由 | | ------------------------------------------------------- | ---------------------------------------- | | `src/features/tasks_grade/` として feature スコープ新設 | 新規サービス/型が不要なため YAGNI 違反 | | `getAllTasksWithVoteInfo()` を拡張して全件対応 | すでに全件返している。修正不要 | | クリックでドロップダウン表示(popover型) | 現行の常時 select で十分。複雑化を避ける | | 検索なしで全件初期表示 | 問題数が多く、意図せず重い表示になる恐れ | ## 調査済み事項 > **注意:** `TagForm.svelte:113` にも同様のリンクがあるが、こちらはタグ管理画面のみで使用されるため今回の対象外。 ## 今回のスコープ外(将来の検討事項) - **`src/routes/(admin)/tasks/[task_id]/` の削除**: 現時点で一部利用があるため今回は対象外。リンクが完全になくなったことを確認後に削除する - **管理者グレード管理ページへのキャッシュ付与**: 全問題データをロードするため、サーバ側でのレスポンスキャッシュが望ましいが、今回は対象外 - **グレード別タブの全面的な UI 刷新**: `problems` ページのグレード別タブ全体の再設計は別タスク - **サーバ側フィルタリングへの移行**: 現状は全問ロード後にクライアント側で検索・絞り込みを行うが、コンテストやグレードでのサーバ側フィルタリングに切り替えることでパフォーマンスを改善できる可能性がある ## キャッシュ計画との関係(docs/dev-notes/2026-06-13/sveltekit-caching/plan.md) `/tasks/grade` ページは admin 限定・低頻度であるため、キャッシュ計画では明示的にスコープ外(L149)とされており、今回のスコープで取り込める項目はない。 - **CDN キャッシュ(Phase 3 型)**: admin 認証必須のため共有キャッシュ不可 - **server-side キャッシュ(Phase 4)**: `cache.ts` 新設が必要な別タスク。`getAllTasksWithVoteInfo` はターゲット候補に挙がっているが今回は対象外 ただし **votes 修正方針(A/B)の前提「vote UI 改修の完了」は今回の作業で満たされる**。本 PR マージ後に `docs/dev-notes/2026-06-13/sveltekit-caching/plan.md` の votes 修正方針 A/B の着手可否を再評価すること。
关闭于 2026-06-18 0 条评论