forked from noxious/server
Made database class to call entity manager with
This commit is contained in:
49
src/utilities/database.ts
Normal file
49
src/utilities/database.ts
Normal file
@ -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<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('MikroORM connected successfully')
|
||||
return orm
|
||||
} catch (error) {
|
||||
appLogger.error(`MikroORM connection failed: ${error}`)
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
public static async getInstance(): Promise<MikroORM> {
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user