init-db.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import mysql from 'mysql2/promise';
  2. import dotenv from 'dotenv';
  3. import fs from 'fs';
  4. import path from 'path';
  5. import { fileURLToPath } from 'url';
  6. dotenv.config();
  7. const __filename = fileURLToPath(import.meta.url);
  8. const __dirname = path.dirname(__filename);
  9. const initDb = async () => {
  10. // 创建不带数据库的连接
  11. const connection = await mysql.createConnection({
  12. host: process.env.DB_HOST,
  13. user: process.env.DB_USER,
  14. password: process.env.DB_PASSWORD
  15. });
  16. try {
  17. // 创建数据库
  18. await connection.query(`CREATE DATABASE IF NOT EXISTS ${process.env.DB_NAME}`);
  19. console.log(`数据库 ${process.env.DB_NAME} 创建成功或已存在`);
  20. // 使用数据库
  21. await connection.query(`USE ${process.env.DB_NAME}`);
  22. // 创建用户表
  23. await connection.query(`
  24. CREATE TABLE IF NOT EXISTS users (
  25. id INT AUTO_INCREMENT PRIMARY KEY,
  26. email VARCHAR(255) NOT NULL UNIQUE,
  27. password VARCHAR(255) NOT NULL,
  28. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  29. )
  30. `);
  31. console.log('用户表创建成功');
  32. // 创建任务表
  33. await connection.query(`
  34. CREATE TABLE IF NOT EXISTS tasks (
  35. id INT AUTO_INCREMENT PRIMARY KEY,
  36. user_id INT NOT NULL,
  37. name VARCHAR(255) NOT NULL,
  38. created_date DATE NOT NULL,
  39. expected_completion_date DATE NOT NULL,
  40. importance INT NOT NULL,
  41. notes TEXT,
  42. completed BOOLEAN DEFAULT FALSE,
  43. completion_date DATE,
  44. FOREIGN KEY (user_id) REFERENCES users(id)
  45. )
  46. `);
  47. console.log('任务表创建成功');
  48. // 创建时间表
  49. await connection.query(`
  50. CREATE TABLE IF NOT EXISTS schedules (
  51. id INT AUTO_INCREMENT PRIMARY KEY,
  52. user_id INT NOT NULL,
  53. day_of_week INT NOT NULL, /* 1-5 代表周一到周五 */
  54. time_slot VARCHAR(50) NOT NULL,
  55. activity VARCHAR(255) NOT NULL,
  56. completed BOOLEAN DEFAULT FALSE,
  57. FOREIGN KEY (user_id) REFERENCES users(id)
  58. )
  59. `);
  60. console.log('时间表创建成功');
  61. // 创建心情表
  62. await connection.query(`
  63. CREATE TABLE IF NOT EXISTS moods (
  64. id INT AUTO_INCREMENT PRIMARY KEY,
  65. user_id INT NOT NULL,
  66. date DATE NOT NULL,
  67. mood_value INT NOT NULL, /* 1-5 代表心情从差到好 */
  68. FOREIGN KEY (user_id) REFERENCES users(id),
  69. UNIQUE KEY unique_user_date (user_id, date)
  70. )
  71. `);
  72. console.log('心情表创建成功');
  73. console.log('数据库初始化完成');
  74. } catch (error) {
  75. console.error('数据库初始化失败:', error);
  76. } finally {
  77. await connection.end();
  78. }
  79. };
  80. initDb();