Files
yourpart3/backend/migrations-active/20260825000000-repair-lesson-39-situational-response.cjs

51 lines
2.1 KiB
JavaScript

'use strict';
const OLD_QUESTION = 'Erzähle einen Tagesplan mit drei Schritten und einem Wunsch.';
const REPAIRED_QUESTION = 'Schreibe vier kurze Sätze auf Bisaya. Verwende dabei alle diese Bausteine: Una, Pagkahuman, Unya und Gusto ko nga.';
const KEYWORDS = ['una', 'pagkahuman', 'unya', 'gusto ko nga'];
const MODEL_ANSWER = 'Una, moadto ko sa merkado. Pagkahuman, kuhaon nako ang bata. Unya, mouli mi sa balay. Gusto ko nga magkita ta ugma.';
module.exports = {
async up(queryInterface) {
await queryInterface.sequelize.transaction(async (transaction) => {
// This was an open-ended production prompt, but the checker required four
// hidden words. Make both the expected language and the four criteria
// explicit, while still accepting every answer that fulfils them.
await queryInterface.sequelize.query(`
UPDATE community.vocab_grammar_exercise AS exercise
SET question_data = JSONB_SET(
JSONB_SET(
JSONB_SET(exercise.question_data, '{question}', TO_JSONB(CAST(:repairedQuestion AS text))),
'{keywords}', CAST(:keywords AS jsonb)
),
'{minKeywordMatches}', '4'::jsonb
),
answer_data = JSONB_SET(
JSONB_SET(
JSONB_SET(COALESCE(exercise.answer_data, '{}'::jsonb), '{modelAnswer}', TO_JSONB(CAST(:modelAnswer AS text))),
'{keywords}', CAST(:keywords AS jsonb)
),
'{minKeywordMatches}', '4'::jsonb
)
FROM community.vocab_course_lesson AS lesson
WHERE exercise.lesson_id = lesson.id
AND (lesson.id = 39 OR (lesson.course_id = 1 AND lesson.lesson_number = 39))
AND exercise.question_data->>'type' = 'situational_response'
AND exercise.question_data->>'question' = :oldQuestion;
`, {
replacements: {
oldQuestion: OLD_QUESTION,
repairedQuestion: REPAIRED_QUESTION,
keywords: JSON.stringify(KEYWORDS),
modelAnswer: MODEL_ANSWER
},
transaction
});
});
},
async down() {
// Keep the unambiguous exercise wording once deployed.
}
};