From bf64a6df70f692ded314e1575342c551a7c3dbde Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Wed, 25 Dec 2024 17:53:59 +0100 Subject: [PATCH] Authentication works again --- src/application/types.ts | 4 +++- src/models/loadedZone.ts | 3 ++- src/models/zoneCharacter.ts | 4 ++-- src/services/characterService.ts | 15 ++++++------- src/services/chatService.ts | 25 +++++++++++++++------- src/services/passwordResetTokenService.ts | 7 +----- src/services/userService.ts | 6 +++--- src/services/zoneEventTileService.ts | 26 +++++++---------------- src/services/zoneService.ts | 3 --- 9 files changed, 42 insertions(+), 51 deletions(-) diff --git a/src/application/types.ts b/src/application/types.ts index 1a8b914..0df12d9 100644 --- a/src/application/types.ts +++ b/src/application/types.ts @@ -1,5 +1,7 @@ import { Socket } from 'socket.io' -import { Character, User, ZoneEventTile, ZoneEventTileTeleport } from '@prisma/client' +import { Character } from '#entities/character' +import { ZoneEventTile } from '#entities/zoneEventTile' +import { ZoneEventTileTeleport } from '#entities/zoneEventTileTeleport' export type TSocket = Socket & { userId?: number diff --git a/src/models/loadedZone.ts b/src/models/loadedZone.ts index c358f01..3913c86 100644 --- a/src/models/loadedZone.ts +++ b/src/models/loadedZone.ts @@ -1,6 +1,7 @@ -import { Character, Zone } from '@prisma/client' import zoneEventTileRepository from '#repositories/zoneEventTileRepository' import ZoneCharacter from './zoneCharacter' +import { Character } from '#entities/character' +import { Zone } from '#entities/zone' class LoadedZone { private readonly zone: Zone diff --git a/src/models/zoneCharacter.ts b/src/models/zoneCharacter.ts index 710ad6c..3ca0e6f 100644 --- a/src/models/zoneCharacter.ts +++ b/src/models/zoneCharacter.ts @@ -1,5 +1,5 @@ -import { Character } from '@prisma/client' import { CharacterService } from '#services/characterService' +import { Character } from '#entities/character' class ZoneCharacter { public readonly character: Character @@ -12,7 +12,7 @@ class ZoneCharacter { public async savePosition() { const characterService = new CharacterService() - await characterService.updateCharacterPosition(this.character.id, this.character.positionX, this.character.positionY, this.character.rotation, this.character.zoneId) + await characterService.updateCharacterPosition(this.character.id, this.character.positionX, this.character.positionY, this.character.rotation, this.character.zone.id) } } diff --git a/src/services/characterService.ts b/src/services/characterService.ts index 4e5083e..234341c 100644 --- a/src/services/characterService.ts +++ b/src/services/characterService.ts @@ -25,9 +25,8 @@ export class CharacterService { const character = new Character() character.name = name character.user = user - await Database.save(character) - return character + return await character.save() } async updateHair(characterId: number, characterHairId: number | null) { @@ -36,15 +35,13 @@ export class CharacterService { if (characterHairId === null) { character.characterHair = undefined - await Database.save(character) - return character + return await character.save() } const characterHair = await CharacterHairRepository.getById(characterHairId) character.characterHair = characterHair ?? undefined - await Database.save(character) - return character + return await character.save() } async deleteByUserIdAndId(userId: number, characterId: number): Promise { @@ -52,8 +49,7 @@ export class CharacterService { const character = await CharacterRepository.getByUserAndId(userId, characterId) if (!character) return null - await Database.delete(character) - return character + return await character.delete() } catch (error: any) { // Handle error appLogger.error(`Failed to delete character by user ID and character ID: ${error instanceof Error ? error.message : String(error)}`) @@ -70,7 +66,8 @@ export class CharacterService { character.rotation = rotation character.zone = await ZoneRepository.getById(zoneId) as Zone - await Database.save(character) + await character.save() + return character } diff --git a/src/services/chatService.ts b/src/services/chatService.ts index 4da47c8..39dd4bf 100644 --- a/src/services/chatService.ts +++ b/src/services/chatService.ts @@ -1,19 +1,28 @@ -import prisma from '#application/prisma' import { gameLogger } from '#application/logger' import { Server } from 'socket.io' import { TSocket } from '#application/types' import ChatRepository from '#repositories/chatRepository' +import { Chat } from '#entities/chat' +import ZoneRepository from '#repositories/zoneRepository' +import CharacterRepository from '#repositories/characterRepository' class ChatService { async sendZoneMessage(io: Server, socket: TSocket, message: string, characterId: number, zoneId: number): Promise { try { - const newChat = await prisma.chat.create({ - data: { - characterId, - zoneId, - message - } - }) + + const character = await CharacterRepository.getById(characterId) + if (!character) return false + + const zone = await ZoneRepository.getById(zoneId) + if (!zone) return false + + const newChat = new Chat() + + newChat.character = character + newChat.zone = zone + newChat.message = message + + await newChat.save() const chat = await ChatRepository.getById(newChat.id) if (!chat) return false diff --git a/src/services/passwordResetTokenService.ts b/src/services/passwordResetTokenService.ts index a0c4dca..f6af85b 100644 --- a/src/services/passwordResetTokenService.ts +++ b/src/services/passwordResetTokenService.ts @@ -1,4 +1,3 @@ -import prisma from '#application/prisma' import passwordResetTokenRepository from '#repositories/passwordResetTokenRepository' import { appLogger } from '#application/logger' @@ -14,11 +13,7 @@ class PasswordResetTokenService { return false } - await prisma.passwordResetToken.delete({ - where: { - token - } - }) + await tokenData.delete() return true } catch (error: any) { diff --git a/src/services/userService.ts b/src/services/userService.ts index 545cbaf..756bddf 100644 --- a/src/services/userService.ts +++ b/src/services/userService.ts @@ -51,7 +51,7 @@ class UserService { newUser.username = username newUser.email = email newUser.password = hashedPassword - await Database.save(newUser) + await newUser.save() return newUser } catch (error: any) { @@ -76,14 +76,14 @@ class UserService { if (!isTokenExpired) return false // Delete existing token using MikroORM - await Database.delete(latestToken) + await latestToken.delete() } // Create new token using MikroORM const passwordResetToken = new PasswordResetToken() passwordResetToken.user = user passwordResetToken.token = token - await Database.save(passwordResetToken) + await passwordResetToken.save() const transporter = NodeMailer.createTransport({ host: config.SMTP_HOST, diff --git a/src/services/zoneEventTileService.ts b/src/services/zoneEventTileService.ts index 6f418fc..7573d9c 100644 --- a/src/services/zoneEventTileService.ts +++ b/src/services/zoneEventTileService.ts @@ -1,15 +1,14 @@ import { ExtendedCharacter, TSocket } from '#application/types' -import prisma from '#application/prisma' -import { ZoneEventTileTeleport } from '@prisma/client' import { Server } from 'socket.io' import ZoneManager from '#managers/zoneManager' import { gameLogger } from '#application/logger' +import { ZoneEventTileTeleport } from '#entities/zoneEventTileTeleport' export class ZoneEventTileService { public async handleTeleport(io: Server, socket: TSocket, character: ExtendedCharacter, teleport: ZoneEventTileTeleport): Promise { - if (teleport.toZoneId === character.zoneId) return + if (teleport.toZone.id === character.zone.id) return - const loadedZone = ZoneManager.getZoneById(teleport.toZoneId) + const loadedZone = ZoneManager.getZoneById(teleport.toZone.id) if (!loadedZone) { gameLogger.error('zone:character:join error', 'Loaded zone not found') return @@ -17,27 +16,18 @@ export class ZoneEventTileService { const zone = loadedZone.getZone() - const oldZoneId = character.zoneId - const newZoneId = teleport.toZoneId - - // Update character in database - await prisma.character.update({ - where: { id: character.id }, - data: { - zoneId: newZoneId, - positionX: teleport.toPositionX, - positionY: teleport.toPositionY, - rotation: teleport.toRotation - } - }) + const oldZoneId = character.zone.id + const newZoneId = teleport.toZone.id // Update local character object - character.zoneId = newZoneId + character.zone = teleport.toZone character.rotation = teleport.toRotation character.positionX = teleport.toPositionX character.positionY = teleport.toPositionY character.isMoving = false + await character.save() + // Remove and add character to new zone await loadedZone.removeCharacter(character.id) loadedZone.addCharacter(character) diff --git a/src/services/zoneService.ts b/src/services/zoneService.ts index 17a4eeb..e7fb729 100644 --- a/src/services/zoneService.ts +++ b/src/services/zoneService.ts @@ -1,6 +1,3 @@ -import prisma from '#application/prisma' -import { gameLogger } from '#application/logger' - class ZoneService {} export default ZoneService