forked from noxious/server
152 lines
3.4 KiB
TypeScript
152 lines
3.4 KiB
TypeScript
import prisma from '../utilities/prisma' // Import the global Prisma instance
|
|
import { appLogger } from '../utilities/logger'
|
|
|
|
class CharacterRepository {
|
|
async getByUserId(userId: number) {
|
|
try {
|
|
return await prisma.character.findMany({
|
|
where: {
|
|
userId
|
|
},
|
|
include: {
|
|
zone: true,
|
|
characterType: {
|
|
include: {
|
|
sprite: true
|
|
}
|
|
},
|
|
characterHair: {
|
|
include: {
|
|
sprite: {
|
|
include: {
|
|
spriteActions: true
|
|
}
|
|
}
|
|
}
|
|
},
|
|
equipment: {
|
|
include: {
|
|
item: true
|
|
}
|
|
}
|
|
}
|
|
})
|
|
} catch (error: any) {
|
|
// Handle error
|
|
appLogger.error(`Failed to get character by user ID: ${error instanceof Error ? error.message : String(error)}`)
|
|
return null
|
|
}
|
|
}
|
|
|
|
async getByUserAndId(userId: number, characterId: number) {
|
|
try {
|
|
return await prisma.character.findFirst({
|
|
where: {
|
|
userId,
|
|
id: characterId
|
|
},
|
|
include: {
|
|
zone: true,
|
|
characterType: {
|
|
include: {
|
|
sprite: true
|
|
}
|
|
},
|
|
characterHair: {
|
|
include: {
|
|
sprite: {
|
|
include: {
|
|
spriteActions: true
|
|
}
|
|
}
|
|
}
|
|
},
|
|
equipment: {
|
|
include: {
|
|
item: true
|
|
}
|
|
}
|
|
}
|
|
})
|
|
} catch (error: any) {
|
|
// Handle error
|
|
appLogger.error(`Failed to get character by user ID and character ID: ${error instanceof Error ? error.message : String(error)}`)
|
|
return null
|
|
}
|
|
}
|
|
|
|
async getById(id: number) {
|
|
try {
|
|
return await prisma.character.findUnique({
|
|
where: {
|
|
id
|
|
},
|
|
include: {
|
|
zone: true,
|
|
characterType: {
|
|
include: {
|
|
sprite: true
|
|
}
|
|
},
|
|
characterHair: {
|
|
include: {
|
|
sprite: {
|
|
include: {
|
|
spriteActions: true
|
|
}
|
|
}
|
|
}
|
|
},
|
|
equipment: {
|
|
include: {
|
|
item: true
|
|
}
|
|
}
|
|
}
|
|
})
|
|
} catch (error: any) {
|
|
// Handle error
|
|
appLogger.error(`Failed to get character by ID: ${error instanceof Error ? error.message : String(error)}`)
|
|
return null
|
|
}
|
|
}
|
|
|
|
async getByName(name: string) {
|
|
try {
|
|
return await prisma.character.findFirst({
|
|
where: {
|
|
name
|
|
},
|
|
include: {
|
|
zone: true,
|
|
characterType: {
|
|
include: {
|
|
sprite: true
|
|
}
|
|
},
|
|
characterHair: {
|
|
include: {
|
|
sprite: {
|
|
include: {
|
|
spriteActions: true
|
|
}
|
|
}
|
|
}
|
|
},
|
|
equipment: {
|
|
include: {
|
|
item: true
|
|
}
|
|
}
|
|
}
|
|
})
|
|
} catch (error: any) {
|
|
// Handle error
|
|
appLogger.error(`Failed to get character by name: ${error instanceof Error ? error.message : String(error)}`)
|
|
return null
|
|
}
|
|
}
|
|
}
|
|
|
|
export default new CharacterRepository()
|