修改文件结构,统一文档格式

This commit is contained in:
ylweng
2025-09-01 02:42:03 +08:00
parent 2bd1d8c032
commit abc1184f81
151 changed files with 870 additions and 589 deletions

112
scripts/init-db.js Normal file
View File

@@ -0,0 +1,112 @@
/**
* 数据库初始化脚本
* @file init-db.js
* @description 初始化数据库结构和基础数据
*/
const { sequelize, syncModels } = require('../models');
const { User, Role, UserRole } = require('../models');
const bcrypt = require('bcrypt');
const migrationManager = require('./migration-manager');
const seedManager = require('./seed-manager');
async function initDb() {
try {
console.log('开始初始化数据库...');
// 测试数据库连接
await sequelize.authenticate();
console.log('数据库连接成功');
// 创建迁移表
await migrationManager.createMigrationTable();
console.log('迁移表创建成功');
// 创建种子表
await seedManager.createSeedTable();
console.log('种子表创建成功');
// 运行待处理的迁移
await migrationManager.runPendingMigrations();
console.log('迁移完成');
// 运行种子数据
await seedManager.runAllSeeds();
console.log('种子数据应用完成');
// 同步模型(确保所有模型都已同步到数据库)
await syncModels({ alter: true });
console.log('模型同步完成');
// 检查是否有管理员用户
const adminUser = await User.findOne({ where: { username: 'admin' } });
// 如果有管理员用户检查密码是否为123456的哈希值
if (adminUser) {
// 检查密码是否为123456的哈希值
const isCorrectPassword = await adminUser.validPassword('123456');
// 如果密码不是123456的哈希值则更新密码
if (!isCorrectPassword) {
adminUser.password = await bcrypt.hash('123456', 10);
await adminUser.save();
console.log('管理员密码已重置为123456');
} else {
console.log('管理员密码已是123456');
}
// 确保管理员有admin角色
const adminRole = await Role.findOne({ where: { name: 'admin' } });
if (adminRole) {
const hasAdminRole = await adminUser.hasRole('admin');
if (!hasAdminRole) {
await adminUser.assignRole(adminRole.id);
console.log('已为管理员分配admin角色');
} else {
console.log('管理员已有admin角色');
}
}
} else {
// 如果没有管理员用户,则创建一个
const newAdmin = await User.create({
username: 'admin',
email: 'admin@example.com',
password: await bcrypt.hash('123456', 10)
});
console.log('管理员用户已创建,用户名: admin密码: 123456');
// 为新管理员分配admin角色
const adminRole = await Role.findOne({ where: { name: 'admin' } });
if (adminRole) {
await newAdmin.assignRole(adminRole.id);
console.log('已为新管理员分配admin角色');
}
}
console.log('数据库初始化完成');
// 关闭数据库连接
await sequelize.close();
console.log('数据库连接已关闭');
process.exit(0);
} catch (error) {
console.error('数据库初始化失败:', error);
// 尝试关闭数据库连接
try {
await sequelize.close();
console.log('数据库连接已关闭');
} catch (closeError) {
console.error('关闭数据库连接失败:', closeError);
}
process.exit(1);
}
}
// 如果直接运行此脚本,则执行初始化
if (require.main === module) {
initDb();
}
module.exports = initDb;