add IDE question bank seed script (50 questions for L1 IDE协作开发)

- Copilot: 12 questions (intelligent completion, Chat modes, CLI)
- Claude Code: 12 questions (interaction methods, model selection, CLI commands)
- OpenCode: 19 questions (overview, installation, Plan/Build, commands, models)
- Debug: 7 questions (/fix, /debug, /tests, /explain commands)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Developer
2026-06-03 20:55:38 +08:00
parent 6e569ff478
commit a71bde3452
+476
View File
@@ -0,0 +1,476 @@
/**
* IDE 协作开发题库 — 种子脚本
* 运行方式:cd D:/AuraK/server && node scripts/seed-ide-questions.js
*/
const { DatabaseSync } = require('node:sqlite');
const crypto = require('crypto');
const path = require('path');
const DB_PATH = path.join(__dirname, '..', 'data', 'metadata.db');
const BANK_ID = crypto.randomUUID();
const TENANT_ID = 'a140a68e-f70a-44d3-b753-fa33d48cf234'; // 现有tenant
const ADMIN_USER_ID = '1cf8ba6d-d184-4055-ab58-99c6f38bbf93'; // admin用户
const db = new DatabaseSync(DB_PATH);
function uuid() {
return crypto.randomUUID();
}
function now() {
return new Date().toISOString().replace('T', ' ').substring(0, 22) + '000';
}
const ts = now();
// ===== 创建题库 =====
console.log('Creating IDE question bank...');
db.prepare(`
INSERT INTO question_banks (id, tenant_id, template_id, name, description, status, created_by, reviewed_by, reviewed_at, review_comment, created_at, updated_at)
VALUES (?, ?, NULL, ?, ?, 'PUBLISHED', ?, ?, ?, ?, ?, ?)
`).run(BANK_ID, TENANT_ID, 'IDE协作开发题库', 'L1课程四:IDE协作开发考核题库,包含Copilot、Claude Code、OpenCode三种工具的50道题目', ADMIN_USER_ID, ADMIN_USER_ID, ts, 'approve', ts, ts);
// ===== 生成题目 =====
const items = [];
function addItem(questionText, questionType, options, correctAnswer, keyPoints, difficulty, dimension, basis, judgment) {
items.push({
questionText,
questionType,
options: options ? JSON.stringify(options) : null,
correctAnswer,
keyPoints: JSON.stringify(keyPoints),
difficulty: difficulty || 'STANDARD',
dimension: dimension || 'IDE',
basis: basis || null,
judgment: judgment || null,
});
}
// ================================================
// 一、GitHub Copilot — 智能代码补全(4题)
// ================================================
addItem(
'以下说法是否正确?(✓ / ✗)\n\n看到 Copilot 给出的灰色补全建议后,按 Tab 键可以接受建议。',
'TRUE_FALSE', null, '✓',
['Tab键接受补全建议', 'Copilot基础操作'],
'STANDARD', 'IDE', 'GitHub Copilot 使用指南 - 第3章'
);
addItem(
'以下说法是否正确?(✓ / ✗)\n\n看到 Copilot 给出的补全建议后,按 Esc 键可以拒绝这个建议。',
'TRUE_FALSE', null, '✓',
['Esc键拒绝补全建议', 'Copilot基础操作'],
'STANDARD', 'IDE', 'GitHub Copilot 使用指南 - 第3章'
);
addItem(
'以下说法是否正确?(✓ / ✗)\n\n写函数开头后,Copilot 会自动逐行补全后续逻辑。',
'TRUE_FALSE', null, '✓',
['Copilot智能补全功能', '注释驱动代码生成'],
'STANDARD', 'IDE', 'GitHub Copilot 使用指南 - 第3章'
);
addItem(
'小张用智能补全生成了一段代码,看起来功能正常。\n\n问:在正式使用这段代码前,他应该先做什么?',
'SHORT_ANSWER', null, '审查代码逻辑,确认没有语法错误或逻辑漏洞后再使用。AI 生成的代码需要人工审核。',
['人工审核AI生成代码', '代码审查', '不直接使用AI生成的代码'],
'STANDARD', 'IDE', 'GitHub Copilot 使用指南 - 红线警告'
);
// ================================================
// 二、GitHub Copilot — Chat 三种模式(5题)
// ================================================
addItem(
'小张接手了一个老项目,打开 OrderService.java 发现有段逻辑看不太懂。他打开 Copilot Chat,想先问问这段代码是干什么的。\n\nCopilot Chat 有以下三种模式:Ask / Plan / Agent\n\n问:小张应该选择哪种模式?',
'SHORT_ANSWER', null, 'Ask(问答模式)。Ask 模式只回答问题,不修改代码。',
['Ask模式适用场景', '不修改代码的对话方式'],
'STANDARD', 'IDE', 'GitHub Copilot 使用指南 - 第3章 三种对话模式'
);
addItem(
'小李需要在三个文件中新增一个「批量删除用户」的功能,希望 AI 直接帮他完成代码修改。\n\nCopilot Chat 有以下三种模式:Ask / Plan / Agent\n\n问:小李应该选择哪种模式?',
'SHORT_ANSWER', null, 'Agent(智能代理模式)。Agent 模式可以自动跨文件修改代码。',
['Agent模式适用场景', '跨文件修改任务'],
'STANDARD', 'IDE', 'GitHub Copilot 使用指南 - 第3章 三种对话模式'
);
addItem(
'小赵想在项目中新增一个功能,但不知道涉及哪些文件、影响范围多大,想让 AI 先扫描整个项目给出方案。\n\nCopilot Chat 有以下三种模式:Ask / Plan / Agent\n\n问:小赵应该选择哪种模式?',
'SHORT_ANSWER', null, 'Plan(计划模式)。Plan 模式只出方案不动代码,适合先评估再动手。',
['Plan模式适用场景', '先规划再执行'],
'STANDARD', 'IDE', 'GitHub Copilot 使用指南 - 第3章 三种对话模式'
);
addItem(
'以下说法是否正确?(✓ / ✗)\n\nAsk 模式下,Copilot 只会回答问题,不会修改用户的代码。',
'TRUE_FALSE', null, '✓',
['Ask模式只回答不修改'],
'STANDARD', 'IDE', 'GitHub Copilot 使用指南 - 第3章'
);
addItem(
'以下说法是否正确?(✓ / ✗)\n\nAgent 模式下,Copilot 可以跨多个文件修改代码。',
'TRUE_FALSE', null, '✓',
['Agent模式跨文件修改'],
'STANDARD', 'IDE', 'GitHub Copilot 使用指南 - 第3章'
);
// ================================================
// 三、GitHub Copilot — CLI 使用(3题)
// ================================================
addItem(
'小刘想用 Copilot CLI 重构一个 Python 脚本,过程中要多次对话、逐步调优。\n\nCopilot CLI 有以下两种使用方式:交互模式(copilot)/ 非交互模式(copilot -p "指令"\n\n问:小刘应该选择哪种方式?',
'SHORT_ANSWER', null, '交互模式(copilot)。交互模式支持多轮对话,适合需要迭代的复杂任务。',
['CLI交互模式适用场景', '多轮对话重构'],
'STANDARD', 'IDE', 'GitHub Copilot 使用指南 - CLI 使用'
);
addItem(
'小钱想用 Copilot CLI 快速解释一下 git diff 的结果,不想进入交互式对话。\n\nCopilot CLI 有以下两种使用方式:交互模式(copilot)/ 非交互模式(copilot -p "指令"\n\n问:小钱应该选择哪种方式?',
'SHORT_ANSWER', null, '非交互模式(copilot -p "指令")。非交互模式适合一次性任务,快速获得结果后退出。',
['CLI非交互模式适用场景', '一次性任务'],
'STANDARD', 'IDE', 'GitHub Copilot 使用指南 - CLI使用'
);
addItem(
'小赵在 Copilot CLI 交互模式中,想清空当前对话上下文重新开始。\n\nCopilot CLI 中常用的斜杠命令有:/clear / /model / /session / /exit\n\n问:小赵应该使用哪个命令?',
'SHORT_ANSWER', null, '/clear',
['CLI斜杠命令', '/clear清空对话'],
'STANDARD', 'IDE', 'GitHub Copilot 使用指南 - CLI斜杠命令'
);
// ================================================
// 四、Claude Code — 四种交互方式(6题)
// ================================================
addItem(
'以下说法是否正确?(✓ / ✗)\n\n在 Claude Code 中输入 @src/utils.js 可以让 AI 读取该文件。',
'TRUE_FALSE', null, '✓',
['Claude Code文件引用', '@语法'],
'STANDARD', 'IDE', 'Claude Code 使用指南 - 第3章 文件引用'
);
addItem(
'以下说法是否正确?(✓ / ✗)\n\n在 Claude Code 中输入 /clear 可以清空当前对话。',
'TRUE_FALSE', null, '✓',
['Claude Code斜杠命令', '/clear清屏'],
'STANDARD', 'IDE', 'Claude Code 使用指南 - 第3章 斜杠命令'
);
addItem(
'以下说法是否正确?(✓ / ✗)\n\n在 Claude Code 中输入 !git status 可以查看 Git 状态。',
'TRUE_FALSE', null, '✓',
['Claude Code Bash模式', '!语法执行系统命令'],
'STANDARD', 'IDE', 'Claude Code 使用指南 - 第3章 Bash模式'
);
addItem(
'以下说法是否正确?(✓ / ✗)\n\n在 Claude Code 中所有操作都必须用特殊符号,自然语言输入不能完成任何功能。',
'TRUE_FALSE', null, '✗。自然语言也可以完成大部分功能,特殊符号用于特定场景。',
['自然语言可用', '特殊符号的定位'],
'STANDARD', 'IDE', 'Claude Code 使用指南 - 第3章 交互方式'
);
addItem(
'以下说法是否正确?(✓ / ✗)\n\n在 Claude Code 中输入 !npm run dev 可以启动开发服务器。',
'TRUE_FALSE', null, '✓',
['Claude Code Bash模式', '!语法启动开发服务器'],
'STANDARD', 'IDE', 'Claude Code 使用指南 - 第3章 Bash模式'
);
addItem(
'以下说法是否正确?(✓ / ✗)\n\n在 Claude Code 中输入 /help 可以查看所有可用命令。',
'TRUE_FALSE', null, '✓',
['Claude Code斜杠命令', '/help帮助'],
'STANDARD', 'IDE', 'Claude Code 使用指南 - 第3章 斜杠命令'
);
// ================================================
// 五、Claude Code — 模型选择与切换(3题)
// ================================================
addItem(
'Claude Code 的三个模型特点如下:\n- Sonnet:主力工程师,日常编码首选\n- Haiku:响应极快、成本低,适合简单任务\n- Opus:处理超级复杂的难题,智商最高\n\n小陈需要修复一个非常复杂的系统架构 Bug。\n\n问:他应该选择哪个模型?',
'SHORT_ANSWER', null, 'Opus',
['Opus模型适用场景', '复杂难题'],
'STANDARD', 'IDE', 'Claude Code 使用指南 - 第3章 模型选择'
);
addItem(
'Claude Code 的三个模型特点如下:\n- Sonnet:主力工程师,日常编码首选\n- Haiku:响应极快、成本低,适合简单任务\n- Opus:处理超级复杂的难题,智商最高\n\n小陈在做日常的 CRUD 接口开发。\n\n问:他应该选择哪个模型?',
'SHORT_ANSWER', null, 'Sonnet',
['Sonnet模型适用场景', '日常编码'],
'STANDARD', 'IDE', 'Claude Code 使用指南 - 第3章 模型选择'
);
addItem(
'Claude Code 的三个模型特点如下:\n- Sonnet:主力工程师,日常编码首选\n- Haiku:响应极快、成本低,适合简单任务\n- Opus:处理超级复杂的难题,智商最高\n\n小陈想快速查一下某个 JavaScript 数组方法的语法。\n\n问:他应该选择哪个模型?',
'SHORT_ANSWER', null, 'Haiku',
['Haiku模型适用场景', '快速简单任务'],
'STANDARD', 'IDE', 'Claude Code 使用指南 - 第3章 模型选择'
);
// ================================================
// 六、Claude Code — CLI 命令(3题)
// ================================================
addItem(
'小赵的 Claude Code 会话因为终端意外关闭了,想接着刚才的对话继续。\n\nClaude CLI 有以下命令:claude / claude --continue / claude --resume\n\n问:小赵应该用哪个命令?',
'SHORT_ANSWER', null, 'claude --continue(或 claude -c)。该命令用于恢复上次意外关闭的会话。',
['恢复会话', '--continue参数'],
'STANDARD', 'IDE', 'Claude Code 使用指南 - 第3章 CLI命令'
);
addItem(
'小钱想用 Claude Code 快速解释一下 git diff 的结果,不想进入交互式对话。\n\nClaude CLI 有以下命令:claude / claude -p "指令" / claude --resume\n\n问:小钱应该用哪个命令?',
'SHORT_ANSWER', null, 'claude -p "指令"。-p 参数用于一次性任务,适合快速执行。',
['一次性任务', '-p参数'],
'STANDARD', 'IDE', 'Claude Code 使用指南 - 第3章 CLI命令'
);
addItem(
'以下说法是否正确?(✓ / ✗)\n\nclaude --resume 可以从历史会话列表中选择恢复。',
'TRUE_FALSE', null, '✓',
['恢复历史会话', '--resume参数'],
'STANDARD', 'IDE', 'Claude Code 使用指南 - 第3章 CLI命令'
);
// ================================================
// 七、OpenCode — 整体认知(3题)
// ================================================
addItem(
'以下说法是否正确?(✓ / ✗)\n\nOpenCode 像一位身边的搭档,可以直接读取项目文件、修改代码、执行命令。',
'TRUE_FALSE', null, '✓',
['OpenCode核心定位', 'AI编码代理'],
'STANDARD', 'IDE', 'OpenCode 使用指南 - 第1章 核心定位'
);
addItem(
'以下说法是否正确?(✓ / ✗)\n\n传统 AI 像远程顾问,给你建议但需要你自己动手;OpenCode 可以直接帮你操作。',
'TRUE_FALSE', null, '✓',
['OpenCode与传统AI区别', '直接操作能力'],
'STANDARD', 'IDE', 'OpenCode 使用指南 - 第1章'
);
addItem(
'小周想用 OpenCode 读取包含客户个人信息的代码文件,让 AI 帮忙优化。\n\n问:这种做法是否合适?为什么?',
'SHORT_ANSWER', null, '不合适。客户个人信息属于敏感数据,严禁输入任何公共 AI 工具。应该先对数据进行脱敏处理,用虚构数据或占位符替代后再使用。',
['安全合规', '敏感数据保护', '数据脱敏'],
'STANDARD', 'IDE', 'OpenCode 使用指南 - 红线警告'
);
// ================================================
// 八、OpenCode — 安装与使用方式(4题)
// ================================================
addItem(
'OpenCode 有以下四种使用方式:\n- 终端版 — 轻量启动快,适合有基础的用户\n- 桌面应用 — 界面直观,适合新手\n- IDE 扩展 — 深度绑定编辑器\n- Web 版 — 浏览器访问,可远程部署\n\n小周是新手,不喜欢操作命令行,想找一个界面直观的方式。\n\n问:他应该选择哪种方式?',
'SHORT_ANSWER', null, '桌面应用',
['OpenCode使用方式选择', '桌面应用适合新手'],
'STANDARD', 'IDE', 'OpenCode 使用指南 - 第2章 使用方式'
);
addItem(
'OpenCode 有以下四种使用方式:终端版 / 桌面应用 / IDE 扩展 / Web 版\n\n小刘平时用 VS Code 写代码,希望不离开编辑器就能用 OpenCode。\n\n问:他应该选择哪种方式?',
'SHORT_ANSWER', null, 'IDE 扩展',
['OpenCode IDE扩展', '编辑器集成'],
'STANDARD', 'IDE', 'OpenCode 使用指南 - 第2章 使用方式'
);
addItem(
'OpenCode 有以下四种使用方式:终端版 / 桌面应用 / IDE 扩展 / Web 版\n\n小马需要在远程服务器上开发,只能通过命令行操作。\n\n问:他应该选择哪种方式?',
'SHORT_ANSWER', null, '终端版',
['OpenCode终端版', '远程服务器开发'],
'STANDARD', 'IDE', 'OpenCode 使用指南 - 第2章 使用方式'
);
addItem(
'以下说法是否正确?(✓ / ✗)\n\n在终端中输入 opencode 可以启动 OpenCode。',
'TRUE_FALSE', null, '✓',
['OpenCode启动命令'],
'STANDARD', 'IDE', 'OpenCode 使用指南 - 第2章 安装'
);
// ================================================
// 九、OpenCode — Plan / Build 工作模式(5题)
// ================================================
addItem(
'小周接手了一个新项目,想先让 OpenCode 分析项目结构,还不想修改任何文件。\n\nOpenCode 有以下两种工作模式:Plan / Build\n\n问:小周应该选择哪种模式?',
'SHORT_ANSWER', null, 'Plan(计划模式)。Plan 模式下 AI 只能读取文件,不会修改代码。',
['Plan模式', '只读分析'],
'STANDARD', 'IDE', 'OpenCode 使用指南 - 第3章 Plan模式'
);
addItem(
'小周已经确认了修改方案,想让 OpenCode 开始实际修改代码。\n\nOpenCode 有以下两种工作模式:Plan / Build\n\n问:小周应该选择哪种模式?',
'SHORT_ANSWER', null, 'Build(构建模式)。Build 模式下 AI 可以编辑文件和执行命令。',
['Build模式', '实际代码修改'],
'STANDARD', 'IDE', 'OpenCode 使用指南 - 第3章 Build模式'
);
addItem(
'以下说法是否正确?(✓ / ✗)\n\nPlan 模式下 AI 只能读取文件,不会修改任何代码。',
'TRUE_FALSE', null, '✓',
['Plan模式只读特性'],
'STANDARD', 'IDE', 'OpenCode 使用指南 - 第3章'
);
addItem(
'以下说法是否正确?(✓ / ✗)\n\nBuild 模式下 AI 可以编辑文件和执行命令。',
'TRUE_FALSE', null, '✓',
['Build模式可写特性'],
'STANDARD', 'IDE', 'OpenCode 使用指南 - 第3章'
);
addItem(
'小周让 OpenCode 在 Build 模式下修改了多个文件。\n\n问:修改完成后,他应该先做什么?',
'SHORT_ANSWER', null, '审查 AI 修改的代码,确认逻辑正确后再使用。AI 生成的代码不能直接部署到生产环境。',
['代码审查', 'AI生成代码需人工审核'],
'STANDARD', 'IDE', 'OpenCode 使用指南 - 安全原则'
);
// ================================================
// 十、OpenCode — 常用命令(5题)
// ================================================
addItem(
'小周用 OpenCode 修改了代码,但发现改错了,想撤销刚才的修改。\n\nOpenCode 中有以下命令:/undo / /redo / /clear / /init\n\n问:他应该使用哪个命令?',
'SHORT_ANSWER', null, '/undo',
['OpenCode撤销命令', '/undo'],
'STANDARD', 'IDE', 'OpenCode 使用指南 - 第3章 撤销更改'
);
addItem(
'小周撤销了修改后又觉得还是刚才改得好,想恢复回来。\n\nOpenCode 中有以下命令:/undo / /redo / /clear / /init\n\n问:他应该使用哪个命令?',
'SHORT_ANSWER', null, '/redo',
['OpenCode重做命令', '/redo'],
'STANDARD', 'IDE', 'OpenCode 使用指南 - 第3章'
);
addItem(
'小周想在新项目目录中创建 AGENTS.md 文件,让 OpenCode 了解项目结构。\n\nOpenCode 中有以下命令:/undo / /redo / /clear / /init\n\n问:他应该使用哪个命令?',
'SHORT_ANSWER', null, '/init',
['OpenCode初始化', '/init命令'],
'STANDARD', 'IDE', 'OpenCode 使用指南 - 第4章 项目初始化'
);
addItem(
'小周想看看 OpenCode 当前有哪些可用的斜杠命令和快捷键。\n\nOpenCode 中有以下命令:/help / /models / /connect / /exit\n\n问:他应该使用哪个命令?',
'SHORT_ANSWER', null, '/help',
['OpenCode帮助', '/help命令'],
'STANDARD', 'IDE', 'OpenCode 使用指南 - 第3章 斜杠命令'
);
addItem(
'小周想切换 OpenCode 正在使用的 AI 模型。\n\nOpenCode 中有以下命令:/help / /models / /connect / /exit\n\n问:他应该使用哪个命令?',
'SHORT_ANSWER', null, '/models',
['OpenCode模型切换', '/models命令'],
'STANDARD', 'IDE', 'OpenCode 使用指南 - 第3章 模型选择'
);
// ================================================
// 十一、OpenCode — 模型选择(2题)
// ================================================
addItem(
'以下说法是否正确?(✓ / ✗)\n\nOpenCode 内置多款免费模型,启动后可以直接选择使用,无需配置 API 密钥。',
'TRUE_FALSE', null, '✓',
['OpenCode免费模型', '无需API密钥'],
'STANDARD', 'IDE', 'OpenCode 使用指南 - 第3章 模型'
);
addItem(
'以下说法是否正确?(✓ / ✗)\n\n使用第三方 LLM 提供商(如 OpenAI、Anthropic)需要自行承担 API 费用。',
'TRUE_FALSE', null, '✓',
['第三方LLM费用', 'API成本'],
'STANDARD', 'IDE', 'OpenCode 使用指南 - 第3章 模型'
);
// ================================================
// 十二、Debug — 调试助手(7题)
// ================================================
addItem(
'小吴的代码运行时报错了,不知道问题出在哪,想让 Copilot Chat 帮他定位和解决 Bug。\n\nCopilot Chat 中有以下命令:/fix / /tests / /explain / /debug\n\n问:他应该使用哪个命令?',
'SHORT_ANSWER', null, '/debug。该命令专用于帮助定位和解决 Bug。',
['/debug命令', '定位解决Bug'],
'STANDARD', 'IDE', 'GitHub Copilot 使用指南 - 第3章 内置命令'
);
addItem(
'小吴已经知道问题在哪了,想让 Copilot 直接修复选中的代码。\n\nCopilot Chat 中有以下命令:/fix / /tests / /explain / /debug\n\n问:他应该使用哪个命令?',
'SHORT_ANSWER', null, '/fix。该命令用于自动修复代码问题。',
['/fix命令', '自动修复代码'],
'STANDARD', 'IDE', 'GitHub Copilot 使用指南 - 第3章 内置命令'
);
addItem(
'以下说法是否正确?(✓ / ✗)\n\n在 Copilot Chat 中输入 /tests 可以生成选中代码的单元测试。',
'TRUE_FALSE', null, '✓',
['/tests命令', '生成单元测试'],
'STANDARD', 'IDE', 'GitHub Copilot 使用指南 - 第3章 内置命令'
);
addItem(
'以下说法是否正确?(✓ / ✗)\n\n在 Copilot Chat 中输入 /explain 可以让 AI 解释选中代码的逻辑。',
'TRUE_FALSE', null, '✓',
['/explain命令', '解释代码逻辑'],
'STANDARD', 'IDE', 'GitHub Copilot 使用指南 - 第3章 内置命令'
);
addItem(
'以下说法是否正确?(✓ / ✗)\n\n/debug 命令可以帮助定位和解决 Bug。',
'TRUE_FALSE', null, '✓',
['/debug命令功能'],
'STANDARD', 'IDE', 'GitHub Copilot 使用指南 - 第3章 内置命令'
);
addItem(
'小吴用 /fix 命令让 Copilot 自动修复了代码。\n\n问:修复完成后,他应该先做什么?',
'SHORT_ANSWER', null, '审查修复后的代码,确认修改正确、逻辑无误后再使用。',
['代码审查', '修复后验证'],
'STANDARD', 'IDE', 'GitHub Copilot 使用指南 - 安全原则'
);
addItem(
'小吴遇到一个 Bug,想把包含数据库连接串的配置文件贴到 Copilot Chat 中用 /debug 分析。\n\n问:这种做法是否合适?为什么?',
'SHORT_ANSWER', null, '不合适。数据库连接串属于敏感信息,严禁输入公共 AI 工具。应该用脱敏数据或占位符替代后再进行分析。',
['安全合规', '敏感数据保护', '脱敏处理'],
'STANDARD', 'IDE', 'GitHub Copilot 使用指南 - 红线警告'
);
// ===== 批量插入题目 =====
console.log(`Inserting ${items.length} questions...`);
const insertItem = db.prepare(`
INSERT INTO question_bank_items (id, bank_id, question_text, questionType, options, correctAnswer, key_points, difficulty, dimension, basis, judgment, status, created_by, created_at, updated_at)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'PUBLISHED', ?, ?, ?)
`);
for (const item of items) {
insertItem.run(
uuid(),
BANK_ID,
item.questionText,
item.questionType,
item.options,
item.correctAnswer,
item.keyPoints,
item.difficulty,
item.dimension,
item.basis,
item.judgment,
ADMIN_USER_ID,
ts,
ts
);
}
console.log(`Successfully inserted ${items.length} IDE questions into bank ${BANK_ID}`);
db.close();