64 lines
1.9 KiB
JavaScript
64 lines
1.9 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* Older generated SRS data contained the number word "Baynte" as the
|
|
* currency phrase "20 Peso". Baynte itself means twenty, so the expected
|
|
* answer must be the number without a currency unit.
|
|
*/
|
|
module.exports = {
|
|
async up(queryInterface) {
|
|
await queryInterface.sequelize.query(`
|
|
WITH affected AS (
|
|
SELECT
|
|
id,
|
|
user_id,
|
|
course_id,
|
|
lesson_id,
|
|
direction,
|
|
CASE
|
|
WHEN LOWER(TRIM(learning)) = 'baynte' THEN 'baynte'
|
|
ELSE '20'
|
|
END AS corrected_learning,
|
|
CASE
|
|
WHEN LOWER(TRIM(reference)) = 'baynte' THEN 'baynte'
|
|
ELSE '20'
|
|
END AS corrected_reference
|
|
FROM community.vocab_srs_item
|
|
WHERE (LOWER(TRIM(learning)) = 'baynte' AND LOWER(TRIM(reference)) IN ('20 peso', '20 pesos'))
|
|
OR (LOWER(TRIM(reference)) = 'baynte' AND LOWER(TRIM(learning)) IN ('20 peso', '20 pesos'))
|
|
),
|
|
keyed AS (
|
|
SELECT
|
|
affected.*,
|
|
ENCODE(DIGEST(CONCAT_WS(
|
|
'|',
|
|
course_id::text,
|
|
COALESCE(lesson_id::text, 'course'),
|
|
UPPER(direction),
|
|
corrected_learning,
|
|
corrected_reference
|
|
), 'sha1'), 'hex') AS corrected_item_key
|
|
FROM affected
|
|
)
|
|
UPDATE community.vocab_srs_item item
|
|
SET learning = keyed.corrected_learning,
|
|
reference = keyed.corrected_reference,
|
|
item_key = keyed.corrected_item_key,
|
|
updated_at = NOW()
|
|
FROM keyed
|
|
WHERE item.id = keyed.id
|
|
AND NOT EXISTS (
|
|
SELECT 1
|
|
FROM community.vocab_srs_item duplicate
|
|
WHERE duplicate.user_id = keyed.user_id
|
|
AND duplicate.item_key = keyed.corrected_item_key
|
|
AND duplicate.id <> keyed.id
|
|
);
|
|
`);
|
|
},
|
|
|
|
async down() {
|
|
// The old answer was semantically incorrect and must not be restored.
|
|
},
|
|
};
|