init-database.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /**
  2. * 数据库初始化脚本
  3. */
  4. const database = require('../database/database');
  5. const userServiceDB = require('../services/userServiceDB');
  6. const configServiceDB = require('../services/configServiceDB');
  7. const logger = require('../logger');
  8. async function initializeDatabase() {
  9. try {
  10. logger.info('开始初始化数据库...');
  11. // 连接数据库
  12. await database.connect();
  13. // 检查数据库是否已经初始化
  14. const isInitialized = await database.isInitialized();
  15. if (isInitialized) {
  16. logger.info('数据库已经初始化,跳过重复初始化');
  17. return;
  18. }
  19. // 创建数据表
  20. await database.createTables();
  21. // 创建默认管理员用户(如果不存在)
  22. await database.createDefaultAdmin();
  23. // 创建默认文档
  24. await database.createDefaultDocuments();
  25. // 初始化默认配置
  26. await configServiceDB.initializeDefaultConfig();
  27. // 标记数据库已初始化
  28. await database.markAsInitialized();
  29. logger.info('数据库初始化完成!');
  30. // 显示数据库信息
  31. const userCount = await database.get('SELECT COUNT(*) as count FROM users');
  32. const configCount = await database.get('SELECT COUNT(*) as count FROM configs');
  33. const docCount = await database.get('SELECT COUNT(*) as count FROM documents');
  34. logger.info(`数据库统计:`);
  35. logger.info(` 用户数量: ${userCount.count}`);
  36. logger.info(` 配置项数量: ${configCount.count}`);
  37. logger.info(` 文档数量: ${docCount.count}`);
  38. } catch (error) {
  39. logger.error('数据库初始化失败:', error);
  40. process.exit(1);
  41. }
  42. }
  43. /**
  44. * 检查数据库是否已经初始化
  45. */
  46. async function checkDatabaseInitialized() {
  47. try {
  48. // 检查用户表是否有数据
  49. const userCount = await database.get('SELECT COUNT(*) as count FROM users');
  50. if (userCount && userCount.count > 0) {
  51. return true;
  52. }
  53. // 检查配置表是否有数据
  54. const configCount = await database.get('SELECT COUNT(*) as count FROM configs');
  55. if (configCount && configCount.count > 0) {
  56. return true;
  57. }
  58. return false;
  59. } catch (error) {
  60. // 如果查询失败,认为数据库未初始化
  61. return false;
  62. }
  63. }
  64. // 如果直接运行此脚本,则执行初始化
  65. if (require.main === module) {
  66. initializeDatabase().then(() => {
  67. process.exit(0);
  68. }).catch((error) => {
  69. logger.error('初始化过程出错:', error);
  70. process.exit(1);
  71. });
  72. }
  73. module.exports = {
  74. initializeDatabase
  75. };