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 { 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

View File

@ -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

View File

@ -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)
}
}

View File

@ -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<Character | null> {
@ -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
}

View File

@ -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<boolean> {
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

View File

@ -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) {

View File

@ -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,

View File

@ -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<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) {
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)

View File

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