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).' }) } }) }