68 lines
2.4 KiB
JavaScript
68 lines
2.4 KiB
JavaScript
|
|
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;
|