From 060af95dc6f50a2d13342d0e8de1ea2941196e66 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Thu, 11 Jul 2024 20:16:36 +0200 Subject: [PATCH] Several fixes --- src/app/events/character/CharacterCreate.ts | 2 +- src/app/events/character/CharacterDelete.ts | 2 +- src/app/repositories/CharacterRepository.ts | 26 ++++++++++++++++----- src/app/services/UserService.ts | 12 +++------- 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/app/events/character/CharacterCreate.ts b/src/app/events/character/CharacterCreate.ts index 3ce2c54..60a0219 100644 --- a/src/app/events/character/CharacterCreate.ts +++ b/src/app/events/character/CharacterCreate.ts @@ -25,7 +25,7 @@ export default function (socket: TSocket, io: Server) { return socket.emit('notification', {message: 'You can only have 4 characters'}); } - const character: Character = await CharacterRepository.create(user_id, data.name) as Character; + const character: Character = await CharacterRepository.create(user_id, data.name, 'player') as Character; characters = [...characters, character]; socket.emit('character:create:success'); diff --git a/src/app/events/character/CharacterDelete.ts b/src/app/events/character/CharacterDelete.ts index 6b265a7..91c7566 100644 --- a/src/app/events/character/CharacterDelete.ts +++ b/src/app/events/character/CharacterDelete.ts @@ -10,7 +10,7 @@ export default function (socket: TSocket, io: Server) { try { data = ZCharacterDelete.parse(data); - await CharacterRepository.delete(data.character_id); + await CharacterRepository.deleteByUserIdAndId(socket.user?.id as number, data.id as number); const user_id = socket.user?.id as number; const characters: Character[] = await CharacterRepository.getByUserId(user_id) as Character[]; diff --git a/src/app/repositories/CharacterRepository.ts b/src/app/repositories/CharacterRepository.ts index caa96ed..2ca5e9e 100644 --- a/src/app/repositories/CharacterRepository.ts +++ b/src/app/repositories/CharacterRepository.ts @@ -43,17 +43,17 @@ class CharacterRepository { } } - async create(userId: number, name: string): Promise { + async create(userId: number, name: string, role: 'player'): Promise { try { return await prisma.character.create({ data: { userId, name, - role: 'gm', - position_x: 0, - position_y: 0, - rotation: 0, - zoneId: 1, + role, + position_x: 0, // @TODO Set default registration values in the database + position_y: 0, // @TODO Set default registration values in the database + rotation: 0, // @TODO Set default registration values in the database + zoneId: 1, // @TODO Set default registration values in the database }, }); } catch (error: any) { @@ -89,6 +89,20 @@ class CharacterRepository { } } + async deleteByUserIdAndId(userId: number, characterId: number): Promise { + try { + return await prisma.character.delete({ + where: { + userId, + id: characterId, + }, + }); + } catch (error: any) { + // Handle error + throw new Error(`Failed to delete character by user ID and character ID: ${error.message}`); + } + } + async getByName(name: string): Promise { try { return await prisma.character.findFirst({ diff --git a/src/app/services/UserService.ts b/src/app/services/UserService.ts index 465c55f..437e5f9 100644 --- a/src/app/services/UserService.ts +++ b/src/app/services/UserService.ts @@ -1,6 +1,5 @@ -import bcrypt from "bcryptjs"; -import UserRepository from "../repositories/UserRepository"; -import CharacterRepository from "../repositories/CharacterRepository"; +import bcrypt from 'bcryptjs' +import UserRepository from '../repositories/UserRepository' class UserService { @@ -25,12 +24,7 @@ class UserService } const hashedPassword = await bcrypt.hash(password, 10); - const newUser = await UserRepository.create(username, hashedPassword); - - // @TODO: Remove this logic from here and move it to the character creation part wherever that'll be - const newCharacter = await CharacterRepository.create(newUser.id, newUser.username); - - return newUser + return await UserRepository.create(username, hashedPassword) } }