1
0
forked from noxious/server

Added base repository, updated char. hair repo and user repo

This commit is contained in:
Dennis Postma 2024-12-25 01:15:30 +01:00
parent bc58d41c54
commit d299528c26
3 changed files with 69 additions and 48 deletions

View File

@ -0,0 +1,24 @@
import { appLogger } from '#utilities/logger'
import { Database } from '#utilities/database'
import { EntityManager, MikroORM } from '@mikro-orm/core'
export abstract class BaseRepository {
protected orm!: MikroORM
protected em!: EntityManager
constructor() {
this.initializeORM().catch((error) => {
appLogger.error(`Failed to initialize Repository: ${error instanceof Error ? error.message : String(error)}`)
})
}
private async initializeORM() {
try {
this.orm = await Database.getInstance()
this.em = this.orm.em.fork()
} catch (error: any) {
appLogger.error(`Failed to initialize ORM: ${error instanceof Error ? error.message : String(error)}`)
throw error
}
}
}

View File

@ -1,29 +1,44 @@
import prisma from '#utilities/prisma' // Import the global Prisma instance import { BaseRepository } from './baseRepository'
import { CharacterHair } from '@prisma/client' import { CharacterHair } from '#entities/characterHair'
import { appLogger } from '#utilities/logger'
class CharacterHairRepository { class CharacterHairRepository extends BaseRepository {
async getAll(): Promise<CharacterHair[]> { async getAll() {
return prisma.characterHair.findMany() try {
const repository = this.em.getRepository(CharacterHair)
return await repository.findAll()
} catch (error: any) {
appLogger.error(`Failed to get all character hair: ${error instanceof Error ? error.message : String(error)}`)
return null
} }
async getAllSelectable(): Promise<CharacterHair[]> { }
return prisma.characterHair.findMany({
where: { async getAllSelectable() {
try {
const repository = this.em.getRepository(CharacterHair)
return await repository.find({
isSelectable: true isSelectable: true
}
}) })
} catch (error: any) {
appLogger.error(`Failed to get selectable character hair: ${error instanceof Error ? error.message : String(error)}`)
return null
} }
}
async getById(id: number) { async getById(id: number) {
return prisma.characterHair.findUnique({ try {
where: { id }, const repository = this.em.getRepository(CharacterHair)
include: { return await repository.findOne(
sprite: { { id },
include: { {
spriteActions: true populate: ['sprite.spriteActions']
} }
)
} catch (error: any) {
appLogger.error(`Failed to get character hair by ID: ${error instanceof Error ? error.message : String(error)}`)
return null
} }
} }
})
}
} }
export default new CharacterHairRepository() export default new CharacterHairRepository()

View File

@ -1,19 +1,13 @@
import { appLogger } from '#utilities/logger' import { appLogger } from '#utilities/logger'
import { Database } from '#utilities/database' import { BaseRepository } from './baseRepository'
import { User } from '../entities/user' import { User } from '#entities/user'
class UserRepository { class UserRepository extends BaseRepository {
async getById(id: number) { async getById(id: number) {
try { try {
const orm = await Database.getInstance() const repository = this.em.getRepository(User)
const em = orm.em.fork() return await repository.findOne({ id })
const repository = em.getRepository(User)
return await repository.findOne({
id
})
} catch (error: any) { } catch (error: any) {
// Handle error
appLogger.error(`Failed to get user by ID: ${error instanceof Error ? error.message : String(error)}`) appLogger.error(`Failed to get user by ID: ${error instanceof Error ? error.message : String(error)}`)
return null return null
} }
@ -21,15 +15,9 @@ class UserRepository {
async getByUsername(username: string) { async getByUsername(username: string) {
try { try {
const orm = await Database.getInstance() const repository = this.em.getRepository(User)
const em = orm.em.fork() return await repository.findOne({ username })
const repository = em.getRepository(User)
return await repository.findOne({
username
})
} catch (error: any) { } catch (error: any) {
// Handle error
appLogger.error(`Failed to get user by username: ${error instanceof Error ? error.message : String(error)}`) appLogger.error(`Failed to get user by username: ${error instanceof Error ? error.message : String(error)}`)
return null return null
} }
@ -37,15 +25,9 @@ class UserRepository {
async getByEmail(email: string) { async getByEmail(email: string) {
try { try {
const orm = await Database.getInstance() const repository = this.em.getRepository(User)
const em = orm.em.fork() return await repository.findOne({ email })
const repository = em.getRepository(User)
return await repository.findOne({
email
})
} catch (error: any) { } catch (error: any) {
// Handle error
appLogger.error(`Failed to get user by email: ${error instanceof Error ? error.message : String(error)}`) appLogger.error(`Failed to get user by email: ${error instanceof Error ? error.message : String(error)}`)
return null return null
} }