1
0
forked from noxious/server
2024-08-22 20:00:37 +02:00

50 lines
1.6 KiB
TypeScript

import { Server } from 'socket.io'
import { TSocket } from '../../utilities/types'
import { Character } from '@prisma/client'
import CharacterRepository from '../../repositories/characterRepository'
import { ZCharacterCreate } from '../../utilities/zodTypes'
import prisma from '../../utilities/prisma'
import logger from '../../utilities/logger'
export default function (socket: TSocket, io: Server) {
socket.on('character:create', async (data: any) => {
// zod validate
try {
data = ZCharacterCreate.parse(data)
const user_id = socket.user?.id as number
// Check if character name already exists
const characterExists = await CharacterRepository.getByName(data.name)
if (characterExists) {
return socket.emit('notification', { message: 'Character name already exists' })
}
let characters: Character[] = (await CharacterRepository.getByUserId(user_id)) as Character[]
if (characters.length >= 4) {
return socket.emit('notification', { message: 'You can only have 4 characters' })
}
const character: Character = await prisma.character.create({
data: {
name: data.name,
userId: user_id
// characterTypeId: 1 // @TODO set to chosen character type
}
})
characters = [...characters, character]
socket.emit('character:create:success')
socket.emit('character:list', characters)
logger.info('character:create success')
} catch (error: any) {
logger.error('character:create error', error)
return socket.emit('notification', { message: 'Could not create character. Please try again (later).' })
}
})
}