1
0
forked from noxious/server

Made database class to call entity manager with

This commit is contained in:
Dennis Postma 2024-12-24 23:14:08 +01:00
parent cfae96bde8
commit 413a5cbcf5
3 changed files with 57 additions and 26 deletions

View File

@ -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<User | null> {

View File

@ -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}`)
}

49
src/utilities/database.ts Normal file
View 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
}
}
}