import 'dotenv/config'; import { DataSource, DataSourceOptions } from 'typeorm'; import { User } from '../users/entities/user.entity'; import * as bcrypt from 'bcrypt'; // 数据库配置 const dbConfig: DataSourceOptions = { type: (process.env.DATABASE_TYPE as any) || 'mysql', host: process.env.DATABASE_HOST || 'localhost', port: parseInt(process.env.DATABASE_PORT || '3306'), username: process.env.DATABASE_USERNAME || 'root', password: process.env.DATABASE_PASSWORD || 'root', database: process.env.DATABASE_NAME || 'bidding', entities: [User], synchronize: false, }; // 日志工具 const logger = { log: (message: string, ...args: any[]) => { console.log(`[INFO] ${new Date().toISOString()} - ${message}`, ...args); }, error: (message: string, ...args: any[]) => { console.error(`[ERROR] ${new Date().toISOString()} - ${message}`, ...args); }, }; // 主函数 async function createUser() { let dataSource: DataSource | null = null; try { // 从命令行参数获取用户名和密码 const args = process.argv.slice(2); if (args.length < 2) { console.log('用法: npm run user:create <用户名> <密码>'); console.log('示例: npm run user:create admin password123'); process.exit(1); } const username = args[0]; const password = args[1]; if (!username || username.trim().length === 0) { logger.error('用户名不能为空'); process.exit(1); } if (!password || password.length === 0) { logger.error('密码不能为空'); process.exit(1); } logger.log('开始创建用户...'); // 创建数据库连接 dataSource = new DataSource(dbConfig); await dataSource.initialize(); logger.log('数据库连接成功'); // 检查用户名是否已存在 const userRepository = dataSource.getRepository(User); const existingUser = await userRepository.findOne({ where: { username }, }); if (existingUser) { logger.error(`用户名 ${username} 已存在`); process.exit(1); } // 加密密码 const hashedPassword = await bcrypt.hash(password, 10); // 创建用户 const user = userRepository.create({ username, password: hashedPassword, }); await userRepository.save(user); logger.log(`用户 ${username} 创建成功!`); logger.log(`用户 ID: ${user.id}`); logger.log(`创建时间: ${user.createdAt}`); await dataSource.destroy(); process.exit(0); } catch (error) { logger.error('创建用户失败:', error); if (dataSource && dataSource.isInitialized) { await dataSource.destroy(); } process.exit(1); } } // 执行创建用户 createUser();