File size: 2,355 Bytes
4c025e9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
006ee19
 
 
 
 
 
 
4c025e9
 
 
006ee19
 
 
4c025e9
006ee19
4c025e9
 
 
006ee19
 
 
4c025e9
 
006ee19
4c025e9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
const mongoose = require('mongoose');
const logger = require('../utils/logger');

const connectDB = async () => {
  try {
    const conn = await mongoose.connect(process.env.MONGODB_URI, {
      useNewUrlParser: true,
      useUnifiedTopology: true,
    });

    logger.info(`MongoDB Connected: ${conn.connection.host}`);
    
    // 创建默认管理员用户和默认分类
    await createDefaultAdmin();
    await createDefaultCategories();
  } catch (error) {
    logger.error(`Error connecting to MongoDB: ${error.message}`);
    process.exit(1);
  }
};

const createDefaultAdmin = async () => {
  try {
    const User = require('../models/User');
    
    // 先检查环境变量
    if (!process.env.ADMIN_USERNAME || !process.env.ADMIN_PASSWORD) {
      logger.warn('管理员账户环境变量未设置,跳过默认管理员创建');
      return;
    }
    
    // 检查是否已存在管理员用户
    const adminExists = await User.findOne({ username: process.env.ADMIN_USERNAME });
    
    if (!adminExists) {
      // 不手动哈希密码,让模型的中间件处理加密
      const admin = await User.create({
        username: process.env.ADMIN_USERNAME,
        password: process.env.ADMIN_PASSWORD, // 直接使用原始密码
        isAdmin: true
      });
      
      logger.info(`默认管理员创建成功: ${admin._id}`);
    } else {
      logger.info('管理员账户已存在,无需创建');
    }
  } catch (error) {
    logger.error(`创建默认管理员出错: ${error.message}`);
  }
};

const createDefaultCategories = async () => {
  try {
    const Category = require('../models/Category');
    
    // 检查是否已有分类
    const categoriesCount = await Category.countDocuments();
    
    if (categoriesCount === 0) {
      // 创建默认分类
      const defaultCategories = [
        { name: '通用', color: '#007AFF' },
        { name: '工作', color: '#FF9500' },
        { name: '学习', color: '#4CD964' },
        { name: '创意', color: '#FF2D55' }
      ];
      
      await Category.insertMany(defaultCategories);
      logger.info('Default categories created');
    }
  } catch (error) {
    logger.error(`Error creating default categories: ${error.message}`);
  }
};

module.exports = { connectDB };