2024-01-24 11:39:00 +07:00
|
|
|
import "dotenv/config";
|
|
|
|
|
import "reflect-metadata";
|
2024-10-03 15:57:44 +07:00
|
|
|
import { DataSource, Logger, QueryRunner } from "typeorm";
|
|
|
|
|
import { RequestWithUser } from "../middlewares/user";
|
|
|
|
|
import { addLogSequence } from "../interfaces/utils";
|
|
|
|
|
|
|
|
|
|
export class MyCustomLogger implements Logger {
|
2024-10-07 14:53:27 +07:00
|
|
|
log(level: "log" | "info" | "warn", message: any, queryRunner?: QueryRunner) {}
|
|
|
|
|
|
2024-10-03 15:57:44 +07:00
|
|
|
logQuery(query: string, parameters?: any[], queryRunner?: QueryRunner): void {
|
|
|
|
|
const req = queryRunner?.data as RequestWithUser;
|
|
|
|
|
if (req?.app?.locals.logData?.sequence) {
|
|
|
|
|
addLogSequence(req, {
|
|
|
|
|
action: "database",
|
|
|
|
|
status: "success",
|
|
|
|
|
description: "Query Data.",
|
|
|
|
|
query: [
|
|
|
|
|
"Query: " + query + (parameters ? " - Parameters:" + JSON.stringify(parameters) : ""),
|
|
|
|
|
],
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
logMigration(message: string, queryRunner?: QueryRunner) {}
|
|
|
|
|
logQueryError(
|
|
|
|
|
error: string | Error,
|
|
|
|
|
query: string,
|
|
|
|
|
parameters?: any[],
|
|
|
|
|
queryRunner?: QueryRunner,
|
|
|
|
|
) {}
|
|
|
|
|
logQuerySlow(time: number, query: string, parameters?: any[], queryRunner?: QueryRunner) {}
|
|
|
|
|
logSchemaBuild(message: string, queryRunner?: QueryRunner) {}
|
|
|
|
|
}
|
2024-01-24 11:39:00 +07:00
|
|
|
|
2024-01-25 10:52:44 +07:00
|
|
|
export const AppDataSource = new DataSource({
|
2024-01-24 11:39:00 +07:00
|
|
|
type: "mysql",
|
2025-03-11 12:15:28 +07:00
|
|
|
// extra: {
|
|
|
|
|
// timezone: "+07:00", // Bangkok timezone (UTC+7)
|
|
|
|
|
// },
|
2024-01-24 11:39:00 +07:00
|
|
|
database: process.env.DB_NAME,
|
|
|
|
|
host: process.env.DB_HOST,
|
|
|
|
|
port: +(process.env.DB_PORT || 3306),
|
|
|
|
|
username: process.env.DB_USERNAME,
|
|
|
|
|
password: process.env.DB_PASSWORD,
|
2024-02-05 16:57:04 +07:00
|
|
|
connectorPackage: "mysql2",
|
2024-01-26 16:05:18 +07:00
|
|
|
synchronize: false,
|
2024-12-04 21:18:10 +07:00
|
|
|
logging: true,
|
2025-03-10 15:50:10 +07:00
|
|
|
// timezone: "Z",
|
2024-01-26 20:25:18 +07:00
|
|
|
entities:
|
2026-01-28 16:59:09 +07:00
|
|
|
process.env.NODE_ENV !== "production"
|
|
|
|
|
? ["src/entities/**/*.ts"]
|
2026-02-27 09:30:46 +07:00
|
|
|
: ["dist/entities/**/*{.ts,.js}"],
|
2024-01-26 20:25:18 +07:00
|
|
|
migrations:
|
2025-08-06 20:51:19 +07:00
|
|
|
process.env.NODE_ENV !== "production"
|
|
|
|
|
? ["src/migration/**/*.ts"]
|
2026-02-27 09:30:46 +07:00
|
|
|
: ["dist/migration/**/*{.ts,.js}"],
|
2024-01-24 11:39:00 +07:00
|
|
|
subscribers: [],
|
2024-10-03 15:57:44 +07:00
|
|
|
logger: new MyCustomLogger(),
|
2026-01-28 16:59:09 +07:00
|
|
|
// Connection pool settings to prevent connection exhaustion
|
|
|
|
|
extra: {
|
|
|
|
|
connectionLimit: +(process.env.DB_CONNECTION_LIMIT || 50),
|
|
|
|
|
maxIdle: +(process.env.DB_MAX_IDLE || 10),
|
|
|
|
|
idleTimeout: +(process.env.DB_IDLE_TIMEOUT || 60000),
|
|
|
|
|
timezone: "+07:00", // Bangkok timezone (UTC+7)
|
|
|
|
|
},
|
|
|
|
|
// TypeORM pool settings
|
|
|
|
|
poolSize: +(process.env.DB_POOL_SIZE || 10),
|
|
|
|
|
maxQueryExecutionTime: +(process.env.DB_MAX_QUERY_TIME || 3000),
|
2024-01-24 11:39:00 +07:00
|
|
|
});
|
|
|
|
|
|
2024-01-25 10:52:44 +07:00
|
|
|
// export default database;
|