diff --git a/src/repositories/userRepository.ts b/src/repositories/userRepository.ts index a11986c..2132775 100644 --- a/src/repositories/userRepository.ts +++ b/src/repositories/userRepository.ts @@ -1,6 +1,6 @@ import prisma from '../utilities/prisma' // Import the global Prisma instance import { User } from '@prisma/client' -import { appLogger } from '../utilities/logger' +import { appLogger } from '#utilities/logger' class UserRepository { async getById(id: number): Promise { diff --git a/src/server.ts b/src/server.ts index 17ea7e9..3d84bc7 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,24 +1,22 @@ import fs from 'fs' import express, { Application } from 'express' -import config from './utilities/config' -import { getAppPath } from './utilities/storage' +import config from '#utilities/config' +import { getAppPath } from '#utilities/storage' import { createServer as httpServer, Server as HTTPServer } from 'http' import { addHttpRoutes } from './http' import cors from 'cors' import { Server as SocketServer } from 'socket.io' import { Authentication } from './middleware/authentication' -import { TSocket } from './utilities/types' -import { MariaDbDriver, MikroORM } from '@mikro-orm/mariadb' -import prisma from './utilities/prisma' -import { appLogger, watchLogs } from './utilities/logger' +import { TSocket } from '#utilities/types' +import prisma from '#utilities/prisma' +import { appLogger, watchLogs } from '#utilities/logger' import ZoneManager from './managers/zoneManager' import UserManager from './managers/userManager' import CommandManager from './managers/commandManager' import QueueManager from './managers/queueManager' import DateManager from './managers/dateManager' import WeatherManager from './managers/weatherManager' -import { Migrator } from '@mikro-orm/migrations' -import { TsMorphMetadataProvider } from '@mikro-orm/reflection'; +import { Database } from '#utilities/database' export class Server { private readonly app: Application @@ -62,23 +60,7 @@ export class Server { // MikroORM try { - const orm = await MikroORM.init({ - extensions: [Migrator], - metadataProvider: TsMorphMetadataProvider, - entities: ['./src/entities/**/*.js'], - entitiesTs: ['./src/entities/**/*.ts'], - driver: MariaDbDriver, - dbName: config.DB_NAME, - host: config.DB_HOST, - port: config.DB_PORT, - user: config.DB_USER, - password: config.DB_PASS, - debug: config.ENV !== 'production', - driverOptions: { - allowPublicKeyRetrieval: true - } - }); - appLogger.info('Database 2 connected') + await Database.getInstance() } catch (error: any) { appLogger.error(`Database 2 connection failed: ${error.message}`) } diff --git a/src/utilities/database.ts b/src/utilities/database.ts new file mode 100644 index 0000000..0d45f6e --- /dev/null +++ b/src/utilities/database.ts @@ -0,0 +1,49 @@ +import { MariaDbDriver, MikroORM } from '@mikro-orm/mariadb' +import { Migrator } from '@mikro-orm/migrations' +import { TsMorphMetadataProvider } from '@mikro-orm/reflection' +import config from '#utilities/config' +import { appLogger } from '#utilities/logger' + +export class Database { + private static instance: MikroORM | undefined + + private static async init(): Promise { + try { + const orm = await MikroORM.init({ + extensions: [Migrator], + metadataProvider: TsMorphMetadataProvider, + entities: ['./src/entities/**/*.js'], + entitiesTs: ['./src/entities/**/*.ts'], + driver: MariaDbDriver, + dbName: config.DB_NAME, + host: config.DB_HOST, + port: config.DB_PORT, + user: config.DB_USER, + password: config.DB_PASS, + debug: config.ENV !== 'production', + driverOptions: { + allowPublicKeyRetrieval: true + } + }) + appLogger.info('MikroORM connected successfully') + return orm + } catch (error) { + appLogger.error(`MikroORM connection failed: ${error}`) + throw error + } + } + + public static async getInstance(): Promise { + if (!Database.instance) { + Database.instance = await Database.init() + } + return Database.instance + } + + public static async close() { + if (Database.instance) { + await Database.instance.close() + Database.instance = undefined + } + } +} \ No newline at end of file