mailbox/backend/utils/dbInit.js

68 lines
2.4 KiB
JavaScript
Raw Normal View History

2025-12-16 08:18:15 +09:00
const sequelize = require("../config/database");
const Inbox = require("../models/Inbox");
const Sent = require("../models/Sent");
const Trash = require("../models/Trash");
const Spam = require("../models/Spam");
const Draft = require("../models/Draft");
const Important = require("../models/Important");
const User = require("../models/User");
const SystemConfig = require("../models/SystemConfig");
const SmtpLog = require("../models/SmtpLog");
const SentLog = require("../models/SentLog");
const GeminiModel = require("../models/GeminiModel");
const EmailTranslation = require("../models/EmailTranslation");
const mysql = require("mysql2/promise");
async function initializeDatabase() {
// 1. DB가 없으면 생성 (raw connection 사용)
try {
const connection = await mysql.createConnection({
host: process.env.DB_HOST || "mariadb",
user: process.env.DB_USER || "root",
password: process.env.DB_PASSWORD || "password",
});
const dbName = process.env.DB_NAME || "mail";
await connection.query(`CREATE DATABASE IF NOT EXISTS \`${dbName}\`;`);
await connection.end();
console.log(`${dbName} 데이터베이스 확인/생성됨.`);
} catch (error) {
console.error("데이터베이스 생성 오류:", error);
// 에러를 던지지 않고 sequelize 연결 시도 (DB 생성 권한 없을 경우 대비)
}
// 2. 모델 동기화
try {
await sequelize.authenticate();
console.log("데이터베이스 연결 성공.");
// 테이블이 없을 때만 생성 (기존 테이블은 변경하지 않음)
// alter: true는 인덱스 중복 생성 문제를 일으킬 수 있으므로 사용하지 않음
await sequelize.sync({ force: false });
// 관리자 계정 시드
const adminExists = await User.findOne({ where: { isAdmin: true } });
if (!adminExists) {
const bcrypt = require("bcryptjs");
const hashedPrice = await bcrypt.hash("admin123", 10);
await User.create({
email: "admin@caadiq.co.kr",
password: hashedPrice,
name: "Administrator",
isAdmin: true,
});
console.log("관리자 계정 생성됨: admin@caadiq.co.kr / admin123");
}
// Gemini 모델 시드
await GeminiModel.seedDefaultModels();
console.log("데이터베이스 동기화 완료.");
} catch (error) {
console.error("데이터베이스 연결 실패:", error);
process.exit(1);
}
}
module.exports = initializeDatabase;