feat(learning): make practice scoring authoritative

This commit is contained in:
2026-08-03 09:44:57 +08:00
parent a9a8f0ab9f
commit 6bdfee6807
19 changed files with 22684 additions and 168 deletions

View File

@@ -4,6 +4,7 @@ using System.Text.Json;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Tiku.Application.Assets;
using Tiku.Application.Learning;
using Tiku.Application.PlatformAdmin;
using Tiku.Application.Security;
using Tiku.Domain.Common;
@@ -620,6 +621,15 @@ internal sealed class PlatformQuestionBankService(
var type = string.IsNullOrWhiteSpace(command.Type) ? "choice" : command.Type.Trim();
if (!SupportedQuestionTypes.Contains(type)) throw Error("题型不受支持。", "question_type_invalid");
if (command.Difficulty is < 1 or > 5) throw Error("难度必须在 1 到 5 之间。", "question_difficulty_invalid");
if (ParseQuestionStatus(command.Status) == QuestionStatus.Published &&
!QuestionGrader.HasValidAuthoritativeAnswer(
type,
command.CorrectOptionIndex,
command.CorrectOptionIndices,
command.AnswerText))
{
throw Error("发布题目必须提供有效的标准答案。", "question_grading_rule_invalid");
}
}
private static void ApplyQuestion(Question question, UpsertPlatformQuestionCommand command, Guid entryId, Guid nodeId)