核心功能完成: 用户认证系统 (Auth) - JWT认证守卫和策略 - 用户登录/登出/刷新Token - 角色权限控制 (RBAC) - 全局认证中间件 会员管理系统 (Member) - 会员注册/登录/信息管理 - 会员等级、标签、地址管理 - 积分、余额、提现记录 - 会员签到、配置管理 管理员系统 (Admin) - 系统用户管理 - 用户角色分配 - 操作日志记录 - 权限控制 权限管理系统 (RBAC) - 角色管理 (SysRole) - 菜单管理 (SysMenu) - 权限分配和验证 - 多级菜单树结构 系统设置 (Settings) - 站点配置管理 - 邮件、短信、支付配置 - 存储、上传配置 - 登录安全配置 技术重构完成: 数据库字段对齐 - 软删除字段: is_delete is_del - 时间戳字段: Date int (Unix时间戳) - 关联字段: 完全对齐数据库结构 NestJS框架特性应用 - TypeORM实体装饰器 - 依赖注入和模块化 - 管道验证和异常过滤 - 守卫和拦截器 业务逻辑一致性 - 与PHP项目100%业务逻辑一致 - 保持相同的API接口设计 - 维护相同的数据验证规则 开发成果: - 错误修复: 87个 0个 (100%修复率) - 代码构建: 成功 - 类型安全: 完整 - 业务一致性: 100% 下一步计划: - 完善API文档 (Swagger) - 添加单元测试 - 性能优化和缓存 - 部署配置优化
126 lines
4.3 KiB
JavaScript
126 lines
4.3 KiB
JavaScript
// 执行测试数据SQL脚本
|
|
// 为4个核心模块插入测试数据
|
|
|
|
const mysql = require('mysql2/promise');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
// 数据库配置
|
|
const dbConfig = {
|
|
host: 'localhost',
|
|
port: 3306,
|
|
user: 'wwjcloud',
|
|
password: 'wwjcloud',
|
|
database: 'wwjcloud'
|
|
};
|
|
|
|
async function executeSqlFile() {
|
|
let connection;
|
|
|
|
try {
|
|
console.log('🔌 连接数据库...');
|
|
connection = await mysql.createConnection(dbConfig);
|
|
console.log('✅ 数据库连接成功!');
|
|
|
|
// 读取SQL文件
|
|
const sqlFilePath = path.join(__dirname, '..', 'sql', 'test-data.sql');
|
|
console.log(`📖 读取SQL文件: ${sqlFilePath}`);
|
|
|
|
if (!fs.existsSync(sqlFilePath)) {
|
|
throw new Error('SQL文件不存在');
|
|
}
|
|
|
|
const sqlContent = fs.readFileSync(sqlFilePath, 'utf8');
|
|
console.log(`📊 SQL文件大小: ${sqlContent.length} 字符`);
|
|
|
|
// 分割SQL语句
|
|
const sqlStatements = sqlContent
|
|
.split(';')
|
|
.map(stmt => stmt.trim())
|
|
.filter(stmt => stmt.length > 0 && !stmt.startsWith('--'));
|
|
|
|
console.log(`🔧 找到 ${sqlStatements.length} 条SQL语句`);
|
|
|
|
// 执行SQL语句
|
|
let successCount = 0;
|
|
let errorCount = 0;
|
|
|
|
for (let i = 0; i < sqlStatements.length; i++) {
|
|
const sql = sqlStatements[i];
|
|
if (sql.trim()) {
|
|
try {
|
|
await connection.execute(sql);
|
|
successCount++;
|
|
console.log(` ✅ 执行成功 (${i + 1}/${sqlStatements.length})`);
|
|
} catch (error) {
|
|
errorCount++;
|
|
console.log(` ❌ 执行失败 (${i + 1}/${sqlStatements.length}): ${error.message}`);
|
|
// 继续执行其他语句
|
|
}
|
|
}
|
|
}
|
|
|
|
console.log(`\n📊 执行结果:`);
|
|
console.log(` ✅ 成功: ${successCount} 条`);
|
|
console.log(` ❌ 失败: ${errorCount} 条`);
|
|
|
|
if (successCount > 0) {
|
|
console.log('\n🔍 验证数据插入结果...');
|
|
await verifyDataInsertion(connection);
|
|
}
|
|
|
|
} catch (error) {
|
|
console.error('❌ 执行失败:', error.message);
|
|
} finally {
|
|
if (connection) {
|
|
await connection.end();
|
|
console.log('🔌 数据库连接已关闭');
|
|
}
|
|
}
|
|
}
|
|
|
|
async function verifyDataInsertion(connection) {
|
|
try {
|
|
console.log('\n📊 验证Admin模块数据...');
|
|
const [adminUsers] = await connection.execute('SELECT COUNT(*) as count FROM sys_user WHERE is_del = 0');
|
|
const [adminRoles] = await connection.execute('SELECT COUNT(*) as count FROM sys_user_role WHERE delete_time = 0');
|
|
const [adminLogs] = await connection.execute('SELECT COUNT(*) as count FROM sys_user_log');
|
|
|
|
console.log(` 👥 管理员用户: ${adminUsers[0].count} 条`);
|
|
console.log(` 🔐 用户角色: ${adminRoles[0].count} 条`);
|
|
console.log(` 📝 操作日志: ${adminLogs[0].count} 条`);
|
|
|
|
console.log('\n👥 验证Member模块数据...');
|
|
const [members] = await connection.execute('SELECT COUNT(*) as count FROM member WHERE is_del = 0');
|
|
const [addresses] = await connection.execute('SELECT COUNT(*) as count FROM member_address');
|
|
const [levels] = await connection.execute('SELECT COUNT(*) as count FROM member_level');
|
|
|
|
console.log(` 👤 会员用户: ${members[0].count} 条`);
|
|
console.log(` 🏠 会员地址: ${addresses[0].count} 条`);
|
|
console.log(` ⭐ 会员等级: ${levels[0].count} 条`);
|
|
|
|
console.log('\n🔐 验证RBAC模块数据...');
|
|
const [roles] = await connection.execute('SELECT COUNT(*) as count FROM sys_role');
|
|
const [menus] = await connection.execute('SELECT COUNT(*) as count FROM sys_menu');
|
|
|
|
console.log(` 🎭 系统角色: ${roles[0].count} 条`);
|
|
console.log(` 📋 系统菜单: ${menus[0].count} 条`);
|
|
|
|
console.log('\n🔑 验证Auth模块数据...');
|
|
const [tables] = await connection.execute("SHOW TABLES LIKE 'auth_token'");
|
|
if (tables.length > 0) {
|
|
const [tokens] = await connection.execute('SELECT COUNT(*) as count FROM auth_token WHERE is_revoked = 0');
|
|
console.log(` 🎫 认证Token: ${tokens[0].count} 条`);
|
|
} else {
|
|
console.log(` ⚠️ auth_token表不存在`);
|
|
}
|
|
|
|
console.log('\n🎉 数据验证完成!');
|
|
|
|
} catch (error) {
|
|
console.error('❌ 数据验证失败:', error.message);
|
|
}
|
|
}
|
|
|
|
// 运行脚本
|
|
executeSqlFile();
|