feat(bisaya): update choice exercise question format and add question number to review

This commit is contained in:
Torsten Schulz (local)
2026-08-24 15:18:36 +02:00
parent ba12b488f9
commit 29e6f039a2
3 changed files with 52 additions and 3 deletions

View File

@@ -0,0 +1,40 @@
'use strict';
const AMBIGUOUS_QUESTION = 'Erzähle einen Tagesplan mit drei Schritten und einem Wunsch. Welche Bisaya-Formulierung passt am besten?';
const REPAIRED_QUESTION = 'Wie sagt man auf Bisaya: „Zuerst gehe ich zum Markt.“?';
module.exports = {
async up(queryInterface) {
await queryInterface.sequelize.transaction(async (transaction) => {
// The former free-production prompt has more than one defensible answer,
// while its multiple-choice data accepts only the first core pattern.
await queryInterface.sequelize.query(`
UPDATE community.vocab_grammar_exercise AS exercise
SET question_data = JSONB_SET(exercise.question_data, '{question}', TO_JSONB(CAST(:repairedQuestion AS text))),
updated_at = NOW()
FROM community.vocab_course_lesson AS lesson
WHERE exercise.lesson_id = lesson.id
AND (lesson.id = 38 OR (lesson.course_id = 1 AND lesson.lesson_number = 38))
AND exercise.question_data->>'type' = 'multiple_choice'
AND exercise.question_data->>'question' = :ambiguousQuestion;
`, {
replacements: { ambiguousQuestion: AMBIGUOUS_QUESTION, repairedQuestion: REPAIRED_QUESTION },
transaction
});
// This lesson is designed for a 78% target. With six questions, five
// correct answers (83%) must therefore pass.
await queryInterface.sequelize.query(`
UPDATE community.vocab_course_lesson
SET target_score_percent = 78,
updated_at = NOW()
WHERE id = 38
OR (course_id = 1 AND lesson_number = 38);
`, { transaction });
});
},
async down() {
// The repair is intentionally not reverted: the old data is ambiguous.
}
};