fix(aihr): make daily drill completion race-safe
This commit is contained in:
+4
-1
@@ -1926,7 +1926,7 @@ public class AihrPracticeSeedService {
|
||||
Long audioOssId = request == null ? null : request.audioOssId();
|
||||
DailyDrillScore score = scoreDailyDrill(answer, parts.referenceAnswer());
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
jdbcTemplate.update("""
|
||||
int updated = jdbcTemplate.update("""
|
||||
UPDATE aihr_practice_assignment
|
||||
SET status = '已完成',
|
||||
answer_text = ?,
|
||||
@@ -1948,6 +1948,9 @@ public class AihrPracticeSeedService {
|
||||
tenantId(),
|
||||
id
|
||||
);
|
||||
if (updated == 0) {
|
||||
return null;
|
||||
}
|
||||
return new DailyDrillAnswerResponse(id, "已完成", score.correct(), score.score(), score.feedback(), parts.referenceAnswer(), audioUrl, audioOssId);
|
||||
}
|
||||
|
||||
|
||||
+1
@@ -131,6 +131,7 @@ public class AihrPracticeSeedServiceTest {
|
||||
String statusGuard = "status = '待训练'";
|
||||
assertTrue(method.contains("AND " + statusGuard));
|
||||
assertTrue(method.indexOf("AND " + statusGuard) != method.lastIndexOf("AND " + statusGuard));
|
||||
assertTrue(method.contains("if (updated == 0)"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user