运行必须源码:app/(controller/model/service/middleware/lib/utils/validate/router)、config/、database/(migrations/seeders/sql)、启动脚本、app/public/templates 模板。 已忽略运行非必须:node_modules/、logs/、run/、app/public 运行时上传数据、.env*、构建/缓存产物。
41 lines
1.8 KiB
JavaScript
41 lines
1.8 KiB
JavaScript
'use strict';
|
||
|
||
/**
|
||
* 迁移 020:为 zhongzhi_submissions / gaozhi_submissions 增加 question_type 列
|
||
*
|
||
* 背景(Bug #11 / B11):选择题(choice_questions)与判断题(judge_questions)的 id
|
||
* 在不同表中数值重叠(如 choice#5 与 judge#5 均为 5),原 saveAnswers 仅按
|
||
* (aggregation_uid, question_uid) 查找并 upsert,导致同 id 的选择题与判断题被
|
||
* 折叠成一条记录,考生作答数少于抽题数、部分答案静默丢失。
|
||
*
|
||
* 修复:新增 question_type 列(choice/judge),与 question_uid 联合唯一标识一道题;
|
||
* service.saveAnswers 的查找/写入键改为 (aggregation_uid, question_uid, question_type);
|
||
* autoScore 判分不受影响(其本就按 question_type 选模型 + 用原始 id 作主键)。
|
||
*/
|
||
module.exports = {
|
||
up: async (queryInterface, Sequelize) => {
|
||
const addCol = async (table) => {
|
||
await queryInterface.addColumn(table, 'question_type', {
|
||
type: Sequelize.STRING(16),
|
||
allowNull: false,
|
||
defaultValue: '',
|
||
comment: '题型:choice/judge,与 question_uid 联合区分题目',
|
||
});
|
||
await queryInterface.addIndex(
|
||
table,
|
||
['aggregation_uid', 'question_uid', 'question_type'],
|
||
{ name: `idx_${table}_agg_qtype` }
|
||
);
|
||
};
|
||
await addCol('zhongzhi_submissions');
|
||
await addCol('gaozhi_submissions');
|
||
},
|
||
|
||
down: async (queryInterface, Sequelize) => {
|
||
await queryInterface.removeIndex('zhongzhi_submissions', 'idx_zhongzhi_submissions_agg_qtype');
|
||
await queryInterface.removeColumn('zhongzhi_submissions', 'question_type');
|
||
await queryInterface.removeIndex('gaozhi_submissions', 'idx_gaozhi_submissions_agg_qtype');
|
||
await queryInterface.removeColumn('gaozhi_submissions', 'question_type');
|
||
},
|
||
};
|