1
0
forked from noxious/server

Authentication works again

This commit is contained in:
Dennis Postma 2024-12-25 17:53:59 +01:00
parent 1b87f1dd91
commit bf64a6df70
9 changed files with 42 additions and 51 deletions

View File

@ -1,5 +1,7 @@
import { Socket } from 'socket.io' 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 & { export type TSocket = Socket & {
userId?: number userId?: number

View File

@ -1,6 +1,7 @@
import { Character, Zone } from '@prisma/client'
import zoneEventTileRepository from '#repositories/zoneEventTileRepository' import zoneEventTileRepository from '#repositories/zoneEventTileRepository'
import ZoneCharacter from './zoneCharacter' import ZoneCharacter from './zoneCharacter'
import { Character } from '#entities/character'
import { Zone } from '#entities/zone'
class LoadedZone { class LoadedZone {
private readonly zone: Zone private readonly zone: Zone

View File

@ -1,5 +1,5 @@
import { Character } from '@prisma/client'
import { CharacterService } from '#services/characterService' import { CharacterService } from '#services/characterService'
import { Character } from '#entities/character'
class ZoneCharacter { class ZoneCharacter {
public readonly character: Character public readonly character: Character
@ -12,7 +12,7 @@ class ZoneCharacter {
public async savePosition() { public async savePosition() {
const characterService = new CharacterService() 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)
} }
} }

View File

@ -25,9 +25,8 @@ export class CharacterService {
const character = new Character() const character = new Character()
character.name = name character.name = name
character.user = user character.user = user
await Database.save(character)
return character return await character.save()
} }
async updateHair(characterId: number, characterHairId: number | null) { async updateHair(characterId: number, characterHairId: number | null) {
@ -36,15 +35,13 @@ export class CharacterService {
if (characterHairId === null) { if (characterHairId === null) {
character.characterHair = undefined character.characterHair = undefined
await Database.save(character) return await character.save()
return character
} }
const characterHair = await CharacterHairRepository.getById(characterHairId) const characterHair = await CharacterHairRepository.getById(characterHairId)
character.characterHair = characterHair ?? undefined character.characterHair = characterHair ?? undefined
await Database.save(character) return await character.save()
return character
} }
async deleteByUserIdAndId(userId: number, characterId: number): Promise<Character | null> { async deleteByUserIdAndId(userId: number, characterId: number): Promise<Character | null> {
@ -52,8 +49,7 @@ export class CharacterService {
const character = await CharacterRepository.getByUserAndId(userId, characterId) const character = await CharacterRepository.getByUserAndId(userId, characterId)
if (!character) return null if (!character) return null
await Database.delete(character) return await character.delete()
return character
} catch (error: any) { } catch (error: any) {
// Handle error // Handle error
appLogger.error(`Failed to delete character by user ID and character ID: ${error instanceof Error ? error.message : String(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.rotation = rotation
character.zone = await ZoneRepository.getById(zoneId) as Zone character.zone = await ZoneRepository.getById(zoneId) as Zone
await Database.save(character) await character.save()
return character return character
} }

View File

@ -1,19 +1,28 @@
import prisma from '#application/prisma'
import { gameLogger } from '#application/logger' import { gameLogger } from '#application/logger'
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket } from '#application/types' import { TSocket } from '#application/types'
import ChatRepository from '#repositories/chatRepository' import ChatRepository from '#repositories/chatRepository'
import { Chat } from '#entities/chat'
import ZoneRepository from '#repositories/zoneRepository'
import CharacterRepository from '#repositories/characterRepository'
class ChatService { class ChatService {
async sendZoneMessage(io: Server, socket: TSocket, message: string, characterId: number, zoneId: number): Promise<boolean> { async sendZoneMessage(io: Server, socket: TSocket, message: string, characterId: number, zoneId: number): Promise<boolean> {
try { try {
const newChat = await prisma.chat.create({
data: { const character = await CharacterRepository.getById(characterId)
characterId, if (!character) return false
zoneId,
message 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) const chat = await ChatRepository.getById(newChat.id)
if (!chat) return false if (!chat) return false

View File

@ -1,4 +1,3 @@
import prisma from '#application/prisma'
import passwordResetTokenRepository from '#repositories/passwordResetTokenRepository' import passwordResetTokenRepository from '#repositories/passwordResetTokenRepository'
import { appLogger } from '#application/logger' import { appLogger } from '#application/logger'
@ -14,11 +13,7 @@ class PasswordResetTokenService {
return false return false
} }
await prisma.passwordResetToken.delete({ await tokenData.delete()
where: {
token
}
})
return true return true
} catch (error: any) { } catch (error: any) {

View File

@ -51,7 +51,7 @@ class UserService {
newUser.username = username newUser.username = username
newUser.email = email newUser.email = email
newUser.password = hashedPassword newUser.password = hashedPassword
await Database.save(newUser) await newUser.save()
return newUser return newUser
} catch (error: any) { } catch (error: any) {
@ -76,14 +76,14 @@ class UserService {
if (!isTokenExpired) return false if (!isTokenExpired) return false
// Delete existing token using MikroORM // Delete existing token using MikroORM
await Database.delete(latestToken) await latestToken.delete()
} }
// Create new token using MikroORM // Create new token using MikroORM
const passwordResetToken = new PasswordResetToken() const passwordResetToken = new PasswordResetToken()
passwordResetToken.user = user passwordResetToken.user = user
passwordResetToken.token = token passwordResetToken.token = token
await Database.save(passwordResetToken) await passwordResetToken.save()
const transporter = NodeMailer.createTransport({ const transporter = NodeMailer.createTransport({
host: config.SMTP_HOST, host: config.SMTP_HOST,

View File

@ -1,15 +1,14 @@
import { ExtendedCharacter, TSocket } from '#application/types' import { ExtendedCharacter, TSocket } from '#application/types'
import prisma from '#application/prisma'
import { ZoneEventTileTeleport } from '@prisma/client'
import { Server } from 'socket.io' import { Server } from 'socket.io'
import ZoneManager from '#managers/zoneManager' import ZoneManager from '#managers/zoneManager'
import { gameLogger } from '#application/logger' import { gameLogger } from '#application/logger'
import { ZoneEventTileTeleport } from '#entities/zoneEventTileTeleport'
export class ZoneEventTileService { export class ZoneEventTileService {
public async handleTeleport(io: Server, socket: TSocket, character: ExtendedCharacter, teleport: ZoneEventTileTeleport): Promise<void> { public async handleTeleport(io: Server, socket: TSocket, character: ExtendedCharacter, teleport: ZoneEventTileTeleport): Promise<void> {
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) { if (!loadedZone) {
gameLogger.error('zone:character:join error', 'Loaded zone not found') gameLogger.error('zone:character:join error', 'Loaded zone not found')
return return
@ -17,27 +16,18 @@ export class ZoneEventTileService {
const zone = loadedZone.getZone() const zone = loadedZone.getZone()
const oldZoneId = character.zoneId const oldZoneId = character.zone.id
const newZoneId = teleport.toZoneId const newZoneId = teleport.toZone.id
// Update character in database
await prisma.character.update({
where: { id: character.id },
data: {
zoneId: newZoneId,
positionX: teleport.toPositionX,
positionY: teleport.toPositionY,
rotation: teleport.toRotation
}
})
// Update local character object // Update local character object
character.zoneId = newZoneId character.zone = teleport.toZone
character.rotation = teleport.toRotation character.rotation = teleport.toRotation
character.positionX = teleport.toPositionX character.positionX = teleport.toPositionX
character.positionY = teleport.toPositionY character.positionY = teleport.toPositionY
character.isMoving = false character.isMoving = false
await character.save()
// Remove and add character to new zone // Remove and add character to new zone
await loadedZone.removeCharacter(character.id) await loadedZone.removeCharacter(character.id)
loadedZone.addCharacter(character) loadedZone.addCharacter(character)

View File

@ -1,6 +1,3 @@
import prisma from '#application/prisma'
import { gameLogger } from '#application/logger'
class ZoneService {} class ZoneService {}
export default ZoneService export default ZoneService