Authentication works again
This commit is contained in:
parent
1b87f1dd91
commit
bf64a6df70
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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) {
|
||||||
|
@ -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,
|
||||||
|
@ -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)
|
||||||
|
@ -1,6 +1,3 @@
|
|||||||
import prisma from '#application/prisma'
|
|
||||||
import { gameLogger } from '#application/logger'
|
|
||||||
|
|
||||||
class ZoneService {}
|
class ZoneService {}
|
||||||
|
|
||||||
export default ZoneService
|
export default ZoneService
|
||||||
|
Loading…
x
Reference in New Issue
Block a user