diff --git a/docs/dev-notes/2026-04-15/relative_evalution_voting/plan.md b/docs/dev-notes/2026-04-15/relative_evalution_voting/plan.md new file mode 100644 index 000000000..40eda90b0 --- /dev/null +++ b/docs/dev-notes/2026-04-15/relative_evalution_voting/plan.md @@ -0,0 +1,34 @@ +# 概要 + +このタスクでは、投票(相対評価)の実装を行う。 +相対評価とは、既にグレードが確定している問題に対してもユーザーの投票が反映される仕組みである。 + +# 仕組み + +まず、ユーザーが投票したグレードから中央値を取得する。この処理はすでに実装済みである。 + +そして、中央値グレードと確定しているグレードの差を求める。 +差は `gradeOrder(中央値) − gradeOrder(確定グレード)` で計算する(Q11=1, ..., D6=17)。 +正値はユーザーが確定グレードより難しいと感じていることを意味し、負値は簡単と感じていることを意味する。 + +投票数が最小閾値(`MIN_VOTES_FOR_STATISTICS`)未満の場合は中央値が算出されないため、バッジは表示しない。 + +差に応じて、以下のように5段階評価を行う。 + +- 差が-2以下: -- +- 差が-1: - +- 差が0: 何もなし(バッジ非表示) +- 差が1: + +- 差が2以上: ++ + +グレードが未定のものに対しては、これまでと同様絶対評価を行う。 + +# UI + +グレードが確定している問題のグレードアイコンの右上に「++」、「+」、「何もなし」、「-」、「--」の5段階評価を表示することで、確定したグレードからの体感難易度の乖離を表す。 + +投票の際のUIは既存のものから変更しない。 + +# 作業ブランチ + +`feature/relative_evaluation_voting` diff --git a/src/features/votes/components/RelativeEvaluationBadge.svelte b/src/features/votes/components/RelativeEvaluationBadge.svelte new file mode 100644 index 000000000..cefff7294 --- /dev/null +++ b/src/features/votes/components/RelativeEvaluationBadge.svelte @@ -0,0 +1,57 @@ + + +{#if label} + + {#if label === '--'} + - - + {:else if label === '++'} + + + + {:else} + {label} + {/if} + + {#if showTooltip && tooltipText} + + {tooltipText} + + {/if} +{/if} diff --git a/src/features/votes/components/VotableGrade.svelte b/src/features/votes/components/VotableGrade.svelte index 623692cd9..95fdf0eb2 100644 --- a/src/features/votes/components/VotableGrade.svelte +++ b/src/features/votes/components/VotableGrade.svelte @@ -1,5 +1,5 @@