基本功能完成,下一步开始美化UI
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import sqlite3 from 'sqlite3';
|
||||
import path from 'path';
|
||||
import fs from 'fs';
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
|
||||
const DEFAULT_DB_DIR = path.join(process.cwd(), 'data');
|
||||
const DEFAULT_DB_PATH = path.join(DEFAULT_DB_DIR, 'survey.db');
|
||||
@@ -127,6 +128,65 @@ const migrateDatabase = async () => {
|
||||
await ensureIndex(`CREATE INDEX IF NOT EXISTS idx_exam_task_users_user_id ON exam_task_users(user_id);`);
|
||||
await ensureIndex(`CREATE INDEX IF NOT EXISTS idx_quiz_records_subject_id ON quiz_records(subject_id);`);
|
||||
await ensureIndex(`CREATE INDEX IF NOT EXISTS idx_quiz_records_task_id ON quiz_records(task_id);`);
|
||||
|
||||
// 1. 创建用户组表
|
||||
await ensureTable(`
|
||||
CREATE TABLE IF NOT EXISTS user_groups (
|
||||
id TEXT PRIMARY KEY,
|
||||
name TEXT UNIQUE NOT NULL,
|
||||
description TEXT,
|
||||
is_system BOOLEAN DEFAULT 0,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
`);
|
||||
|
||||
// 2. 创建用户-用户组关联表
|
||||
await ensureTable(`
|
||||
CREATE TABLE IF NOT EXISTS user_group_members (
|
||||
group_id TEXT NOT NULL,
|
||||
user_id TEXT NOT NULL,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (group_id, user_id),
|
||||
FOREIGN KEY (group_id) REFERENCES user_groups(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||||
);
|
||||
`);
|
||||
|
||||
// 3. 为考试任务表添加选择配置字段
|
||||
await ensureColumn('exam_tasks', 'selection_config TEXT', 'selection_config');
|
||||
|
||||
// 4. 初始化"全体用户"组
|
||||
const allUsersGroup = await get(`SELECT id FROM user_groups WHERE is_system = 1`);
|
||||
let allUsersGroupId = allUsersGroup?.id;
|
||||
|
||||
if (!allUsersGroupId) {
|
||||
allUsersGroupId = uuidv4();
|
||||
await run(
|
||||
`INSERT INTO user_groups (id, name, description, is_system) VALUES (?, ?, ?, ?)`,
|
||||
[allUsersGroupId, '全体用户', '包含系统所有用户的默认组', 1]
|
||||
);
|
||||
console.log('已创建"全体用户"系统组');
|
||||
}
|
||||
|
||||
// 5. 将现有用户添加到"全体用户"组
|
||||
if (allUsersGroupId) {
|
||||
// 找出尚未在全体用户组中的用户
|
||||
const usersNotInGroup = await query(`
|
||||
SELECT id FROM users
|
||||
WHERE id NOT IN (
|
||||
SELECT user_id FROM user_group_members WHERE group_id = ?
|
||||
)
|
||||
`, [allUsersGroupId]);
|
||||
|
||||
if (usersNotInGroup.length > 0) {
|
||||
const stmt = db.prepare(`INSERT INTO user_group_members (group_id, user_id) VALUES (?, ?)`);
|
||||
usersNotInGroup.forEach(user => {
|
||||
stmt.run(allUsersGroupId, user.id);
|
||||
});
|
||||
stmt.finalize();
|
||||
console.log(`已将 ${usersNotInGroup.length} 名现有用户添加到"全体用户"组`);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 数据库初始化函数
|
||||
|
||||
Reference in New Issue
Block a user