Uecko_ERP/apps/server/src/config/database.ts

82 lines
1.9 KiB
TypeScript
Raw Normal View History

2025-05-20 10:08:24 +00:00
import { logger } from "@/lib/logger";
2025-01-29 16:01:17 +00:00
import dotenv from "dotenv";
2025-02-01 21:48:13 +00:00
import { Sequelize } from "sequelize";
2025-01-29 16:01:17 +00:00
dotenv.config();
2025-05-02 21:43:51 +00:00
let sequelizeInstance: Sequelize | null = null;
export function getDatabase(): Sequelize {
if (sequelizeInstance) {
return sequelizeInstance;
}
sequelizeInstance = new Sequelize(
process.env.DB_NAME as string,
process.env.DB_USER as string,
process.env.DB_PASSWORD as string,
{
host: process.env.DB_HOST as string,
dialect: "mysql",
2025-05-04 20:06:57 +00:00
port: Number.parseInt(process.env.DB_PORT || "3306", 10),
2025-05-02 21:43:51 +00:00
dialectOptions: {
multipleStatements: true,
dateStrings: true,
typeCast: true,
},
pool: {
max: 10,
min: 0,
acquire: 30000,
idle: 10000,
},
logQueryParameters: true,
logging: process.env.DB_LOGGING === "true" ? logger.debug : false,
define: {
charset: "utf8mb4",
collate: "utf8mb4_unicode_ci",
underscored: true,
timestamps: true,
},
}
);
return sequelizeInstance;
}
export async function tryConnectToDatabase() {
const database = getDatabase();
if (!database) {
const error = new Error("❌ Database not found.");
2025-05-20 10:08:24 +00:00
logger.error(error.message, {
2025-05-02 21:43:51 +00:00
label: "tryConnectToDatabase",
});
throw error;
2025-02-01 21:48:13 +00:00
}
2025-05-20 10:08:24 +00:00
logger.info("🔸 Connecting to database...", {
label: "tryConnectToDatabase",
});
2025-01-29 16:01:17 +00:00
try {
2025-05-02 21:43:51 +00:00
await database.authenticate();
2025-05-20 10:08:24 +00:00
logger.info(`✔️${" "}Database connection established successfully.`, {
2025-05-02 21:43:51 +00:00
label: "tryConnectToDatabase",
meta: {
host: process.env.DB_HOST,
port: process.env.DB_PORT,
database: process.env.DB_NAME,
user: process.env.DB_USER,
},
});
return database;
2025-01-29 16:01:17 +00:00
} catch (error) {
2025-05-20 10:08:24 +00:00
logger.error(`❌ Unable to connect to the database: ${(error as Error).message}`, {
2025-05-02 21:43:51 +00:00
error,
label: "tryConnectToDatabase",
});
throw error;
2025-01-29 16:01:17 +00:00
}
}