feat: list, show and confirm open answers over MCP

- classes/review.go: review queue, detail and Confirm, shared by MCP and
  the admin screen; AnswerReviewed and AttemptReviewed after commit
- /api/v1/quiz-reviews routes behind the quizzes permission
- quizzes_review_list, quizzes_review_show, quizzes_review_confirm
This commit is contained in:
Jakub Zych
2026-11-09 18:02:35 +01:00
parent e1f9807701
commit 2fa8aa4178
10 changed files with 1070 additions and 3 deletions

View File

@@ -81,6 +81,9 @@ func TestRoutesRegistered(t *testing.T) {
"PATCH /api/v1/quizzes/{slug}/questions/{id}",
"DELETE /api/v1/quizzes/{slug}/questions/{id}",
"PUT /api/v1/quizzes/{slug}/questions/order",
"GET /api/v1/quiz-reviews",
"GET /api/v1/quiz-reviews/{id}",
"POST /api/v1/quiz-reviews/{id}/confirm",
}
var got []string
for _, r := range router.Routes() {
@@ -96,7 +99,8 @@ func TestRoutesRegistered(t *testing.T) {
}
continue
}
if r.Pattern == "/api/v1/quizzes" || strings.HasPrefix(r.Pattern, "/api/v1/quizzes/") {
if r.Pattern == "/api/v1/quizzes" || strings.HasPrefix(r.Pattern, "/api/v1/quizzes/") ||
r.Pattern == "/api/v1/quiz-reviews" || strings.HasPrefix(r.Pattern, "/api/v1/quiz-reviews/") {
for _, mw := range []string{"user.api_token", "throttle:golem15.quizzes.manage", "user.permission:golem15.quizzes.access_quizzes"} {
if !slices.Contains(r.Middleware, mw) {
t.Errorf("%s %s is not behind %s: %v", r.Method, r.Pattern, mw, r.Middleware)