Renamed folder utilities > application, added baseEntity class, updated baseRepo class, removed prisma helper
This commit is contained in:
parent
f5a7a348e0
commit
f4746722af
@ -3,7 +3,7 @@ ENV=development
|
|||||||
HOST="0.0.0.0"
|
HOST="0.0.0.0"
|
||||||
PORT=4000
|
PORT=4000
|
||||||
JWT_SECRET="secret"
|
JWT_SECRET="secret"
|
||||||
CLIENT_URL="http://192.168.3.4:5173"
|
CLIENT_URL="http://192.168.2.34:5173"
|
||||||
|
|
||||||
# Database configuration
|
# Database configuration
|
||||||
REDIS_URL="redis://@127.0.0.1:6379/4"
|
REDIS_URL="redis://@127.0.0.1:6379/4"
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
import { defineConfig, MySqlDriver } from '@mikro-orm/mysql'
|
import { defineConfig, MySqlDriver } from '@mikro-orm/mysql'
|
||||||
import { Migrator } from '@mikro-orm/migrations'
|
import { Migrator } from '@mikro-orm/migrations'
|
||||||
import { TsMorphMetadataProvider } from '@mikro-orm/reflection'
|
import { TsMorphMetadataProvider } from '@mikro-orm/reflection'
|
||||||
import serverConfig from './src/utilities/config'
|
import serverConfig from './src/application/config'
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
extensions: [Migrator],
|
extensions: [Migrator],
|
||||||
|
67
src/application/bases/baseEntity.ts
Normal file
67
src/application/bases/baseEntity.ts
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
import { Database } from '#application/database'
|
||||||
|
import { appLogger } from '#application/logger'
|
||||||
|
|
||||||
|
export abstract class BaseEntity {
|
||||||
|
async save(): Promise<this> {
|
||||||
|
try {
|
||||||
|
const orm = await Database.getInstance()
|
||||||
|
const em = orm.em.fork()
|
||||||
|
|
||||||
|
await em.begin()
|
||||||
|
try {
|
||||||
|
em.persist(this)
|
||||||
|
await em.flush()
|
||||||
|
await em.commit()
|
||||||
|
return this
|
||||||
|
} catch (error) {
|
||||||
|
await em.rollback()
|
||||||
|
throw error
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
appLogger.error(`Failed to save entity: ${error instanceof Error ? error.message : String(error)}`)
|
||||||
|
throw error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async update(): Promise<this> {
|
||||||
|
try {
|
||||||
|
const orm = await Database.getInstance()
|
||||||
|
const em = orm.em.fork()
|
||||||
|
|
||||||
|
await em.begin()
|
||||||
|
try {
|
||||||
|
em.merge(this)
|
||||||
|
await em.flush()
|
||||||
|
await em.commit()
|
||||||
|
return this
|
||||||
|
} catch (error) {
|
||||||
|
await em.rollback()
|
||||||
|
throw error
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
appLogger.error(`Failed to update entity: ${error instanceof Error ? error.message : String(error)}`)
|
||||||
|
throw error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async delete(): Promise<this> {
|
||||||
|
try {
|
||||||
|
const orm = await Database.getInstance()
|
||||||
|
const em = orm.em.fork()
|
||||||
|
|
||||||
|
await em.begin()
|
||||||
|
try {
|
||||||
|
em.remove(this)
|
||||||
|
await em.flush()
|
||||||
|
await em.commit()
|
||||||
|
return this
|
||||||
|
} catch (error) {
|
||||||
|
await em.rollback()
|
||||||
|
throw error
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
appLogger.error(`Failed to remove entity: ${error instanceof Error ? error.message : String(error)}`)
|
||||||
|
throw error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
import { appLogger } from '#utilities/logger'
|
import { appLogger } from '../logger'
|
||||||
import { Database } from '#utilities/database'
|
import { Database } from '../database'
|
||||||
import { EntityManager, MikroORM } from '@mikro-orm/core'
|
import { EntityManager, MikroORM } from '@mikro-orm/core'
|
||||||
|
|
||||||
export abstract class BaseRepository {
|
export abstract class BaseRepository {
|
27
src/application/database.ts
Normal file
27
src/application/database.ts
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import config from '../../mikro-orm.config'
|
||||||
|
// import { MikroORM } from '@mikro-orm/mariadb'
|
||||||
|
import { MikroORM } from '@mikro-orm/mysql'
|
||||||
|
import { appLogger } from './logger'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Singleton class for initializing and managing the database connection
|
||||||
|
*/
|
||||||
|
export class Database {
|
||||||
|
private static instance: MikroORM | undefined
|
||||||
|
|
||||||
|
private static async init(): Promise<MikroORM> {
|
||||||
|
try {
|
||||||
|
return await MikroORM.init(config)
|
||||||
|
} catch (error) {
|
||||||
|
appLogger.error(`MikroORM connection failed: ${error}`)
|
||||||
|
throw error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async getInstance(): Promise<MikroORM> {
|
||||||
|
if (!Database.instance) {
|
||||||
|
Database.instance = await Database.init()
|
||||||
|
}
|
||||||
|
return Database.instance
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import prisma from '#utilities/prisma'
|
import prisma from '#application/prisma'
|
||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
import { getPublicPath, getRootPath } from '#utilities/storage'
|
import { getPublicPath, getRootPath } from '#application/storage'
|
||||||
import sharp from 'sharp'
|
import sharp from 'sharp'
|
||||||
import { CharacterEquipmentSlotType, CharacterGender, CharacterRace } from '@prisma/client'
|
import { CharacterEquipmentSlotType, CharacterGender, CharacterRace } from '@prisma/client'
|
||||||
import bcrypt from 'bcryptjs'
|
import bcrypt from 'bcryptjs'
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
import sharp from 'sharp'
|
import sharp from 'sharp'
|
||||||
import { commandLogger } from '#utilities/logger'
|
import { commandLogger } from '#application/logger'
|
||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { getPublicPath } from '#utilities/storage'
|
import { getPublicPath } from '#application/storage'
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
|
|
||||||
export default class TilesCommand {
|
export default class TilesCommand {
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
|
import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
|
||||||
|
import { BaseEntity } from '#application/bases/baseEntity'
|
||||||
import { User } from './user'
|
import { User } from './user'
|
||||||
import { Zone } from './zone'
|
import { Zone } from './zone'
|
||||||
import { CharacterType } from './characterType'
|
import { CharacterType } from './characterType'
|
||||||
@ -8,7 +9,7 @@ import { CharacterEquipment } from './characterEquipment'
|
|||||||
import { Chat } from './chat'
|
import { Chat } from './chat'
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class Character {
|
export class Character extends BaseEntity {
|
||||||
@PrimaryKey()
|
@PrimaryKey()
|
||||||
id!: number
|
id!: number
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import { Entity, Enum, ManyToOne, PrimaryKey } from '@mikro-orm/core'
|
import { Entity, Enum, ManyToOne, PrimaryKey } from '@mikro-orm/core'
|
||||||
|
import { BaseEntity } from '#application/bases/baseEntity'
|
||||||
import { Character } from './character'
|
import { Character } from './character'
|
||||||
import { CharacterItem } from './characterItem'
|
import { CharacterItem } from './characterItem'
|
||||||
import { CharacterEquipmentSlotType } from '#utilities/enums'
|
import { CharacterEquipmentSlotType } from '#application/enums'
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class CharacterEquipment {
|
export class CharacterEquipment extends BaseEntity {
|
||||||
@PrimaryKey()
|
@PrimaryKey()
|
||||||
id!: number
|
id!: number
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
|
import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
|
||||||
|
import { BaseEntity } from '#application/bases/baseEntity'
|
||||||
import { Character } from './character'
|
import { Character } from './character'
|
||||||
import { Sprite } from './sprite'
|
import { Sprite } from './sprite'
|
||||||
import { CharacterGender } from '#utilities/enums'
|
import { CharacterGender } from '#application/enums'
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class CharacterHair {
|
export class CharacterHair extends BaseEntity {
|
||||||
@PrimaryKey()
|
@PrimaryKey()
|
||||||
id!: number
|
id!: number
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
|
import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
|
||||||
|
import { BaseEntity } from '#application/bases/baseEntity'
|
||||||
import { Character } from './character'
|
import { Character } from './character'
|
||||||
import { Item } from './item'
|
import { Item } from './item'
|
||||||
import { CharacterEquipment } from './characterEquipment'
|
import { CharacterEquipment } from './characterEquipment'
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class CharacterItem {
|
export class CharacterItem extends BaseEntity {
|
||||||
@PrimaryKey()
|
@PrimaryKey()
|
||||||
id!: number
|
id!: number
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import { Collection, Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
|
import { Collection, Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
|
||||||
|
import { BaseEntity } from '#application/bases/baseEntity'
|
||||||
import { Character } from './character'
|
import { Character } from './character'
|
||||||
import { Sprite } from './sprite'
|
import { Sprite } from './sprite'
|
||||||
import { CharacterGender, CharacterRace } from '#utilities/enums'
|
import { CharacterGender, CharacterRace } from '#application/enums'
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class CharacterType {
|
export class CharacterType extends BaseEntity {
|
||||||
@PrimaryKey()
|
@PrimaryKey()
|
||||||
id!: number
|
id!: number
|
||||||
|
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
|
import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
|
||||||
|
import { BaseEntity } from '#application/bases/baseEntity'
|
||||||
import { Character } from './character'
|
import { Character } from './character'
|
||||||
import { Zone } from './zone'
|
import { Zone } from './zone'
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class Chat {
|
export class Chat extends BaseEntity {
|
||||||
@PrimaryKey()
|
@PrimaryKey()
|
||||||
id!: number
|
id!: number
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import { Collection, Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
|
import { Collection, Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
|
||||||
|
import { BaseEntity } from '#application/bases/baseEntity'
|
||||||
import { Sprite } from './sprite'
|
import { Sprite } from './sprite'
|
||||||
import { CharacterItem } from './characterItem'
|
import { CharacterItem } from './characterItem'
|
||||||
import { ItemType, ItemRarity } from '#utilities/enums'
|
import { ItemType, ItemRarity } from '#application/enums'
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class Item {
|
export class Item extends BaseEntity {
|
||||||
@PrimaryKey()
|
@PrimaryKey()
|
||||||
id!: string
|
id!: string
|
||||||
|
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
import { randomUUID } from 'node:crypto'
|
import { randomUUID } from 'node:crypto'
|
||||||
import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
|
import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
|
||||||
|
import { BaseEntity } from '#application/bases/baseEntity'
|
||||||
import { ZoneObject } from './zoneObject'
|
import { ZoneObject } from './zoneObject'
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class MapObject {
|
export class MapObject extends BaseEntity {
|
||||||
@PrimaryKey()
|
@PrimaryKey()
|
||||||
id = randomUUID()
|
id = randomUUID()
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
|
import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
|
||||||
|
import { BaseEntity } from '#application/bases/baseEntity'
|
||||||
import { User } from './user'
|
import { User } from './user'
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class PasswordResetToken {
|
export class PasswordResetToken extends BaseEntity {
|
||||||
@PrimaryKey()
|
@PrimaryKey()
|
||||||
id!: number
|
id!: number
|
||||||
|
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
import { randomUUID } from 'node:crypto'
|
import { randomUUID } from 'node:crypto'
|
||||||
import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
|
import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
|
||||||
|
import { BaseEntity } from '#application/bases/baseEntity'
|
||||||
import { SpriteAction } from './spriteAction'
|
import { SpriteAction } from './spriteAction'
|
||||||
import { CharacterType } from './characterType'
|
import { CharacterType } from './characterType'
|
||||||
import { CharacterHair } from './characterHair'
|
import { CharacterHair } from './characterHair'
|
||||||
import { Item } from './item'
|
import { Item } from './item'
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class Sprite {
|
export class Sprite extends BaseEntity {
|
||||||
@PrimaryKey()
|
@PrimaryKey()
|
||||||
id = randomUUID()
|
id = randomUUID()
|
||||||
|
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
import { randomUUID } from 'node:crypto'
|
import { randomUUID } from 'node:crypto'
|
||||||
import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
|
import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
|
||||||
|
import { BaseEntity } from '#application/bases/baseEntity'
|
||||||
import { Sprite } from './sprite'
|
import { Sprite } from './sprite'
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class SpriteAction {
|
export class SpriteAction extends BaseEntity {
|
||||||
@PrimaryKey()
|
@PrimaryKey()
|
||||||
id = randomUUID()
|
id = randomUUID()
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
import { randomUUID } from 'node:crypto'
|
import { randomUUID } from 'node:crypto'
|
||||||
import { Entity, PrimaryKey, Property } from '@mikro-orm/core'
|
import { Entity, PrimaryKey, Property } from '@mikro-orm/core'
|
||||||
|
import { BaseEntity } from '#application/bases/baseEntity'
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class Tile {
|
export class Tile extends BaseEntity {
|
||||||
@PrimaryKey()
|
@PrimaryKey()
|
||||||
id = randomUUID()
|
id = randomUUID()
|
||||||
|
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
|
import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
|
||||||
|
import { BaseEntity } from '#application/bases/baseEntity'
|
||||||
import { Character } from './character'
|
import { Character } from './character'
|
||||||
import { PasswordResetToken } from './passwordResetToken'
|
import { PasswordResetToken } from './passwordResetToken'
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class User {
|
export class User extends BaseEntity {
|
||||||
@PrimaryKey()
|
@PrimaryKey()
|
||||||
id!: number
|
id!: number
|
||||||
|
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
import { Entity, PrimaryKey, Property } from '@mikro-orm/core'
|
import { Entity, PrimaryKey, Property } from '@mikro-orm/core'
|
||||||
|
import { BaseEntity } from '#application/bases/baseEntity'
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class World {
|
export class World extends BaseEntity {
|
||||||
@PrimaryKey()
|
@PrimaryKey()
|
||||||
date = new Date()
|
date = new Date()
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
|
import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
|
||||||
|
import { BaseEntity } from '#application/bases/baseEntity'
|
||||||
import { ZoneEffect } from './zoneEffect'
|
import { ZoneEffect } from './zoneEffect'
|
||||||
import { ZoneEventTile } from './zoneEventTile'
|
import { ZoneEventTile } from './zoneEventTile'
|
||||||
import { ZoneEventTileTeleport } from './zoneEventTileTeleport'
|
import { ZoneEventTileTeleport } from './zoneEventTileTeleport'
|
||||||
@ -7,7 +8,7 @@ import { Character } from './character'
|
|||||||
import { Chat } from './chat'
|
import { Chat } from './chat'
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class Zone {
|
export class Zone extends BaseEntity {
|
||||||
@PrimaryKey()
|
@PrimaryKey()
|
||||||
id!: number
|
id!: number
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
|
import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
|
||||||
|
import { BaseEntity } from '#application/bases/baseEntity'
|
||||||
import { Zone } from './zone'
|
import { Zone } from './zone'
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class ZoneEffect {
|
export class ZoneEffect extends BaseEntity {
|
||||||
@PrimaryKey()
|
@PrimaryKey()
|
||||||
id!: string
|
id!: string
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import { Entity, Enum, ManyToOne, OneToOne, PrimaryKey, Property } from '@mikro-orm/core'
|
import { Entity, Enum, ManyToOne, OneToOne, PrimaryKey, Property } from '@mikro-orm/core'
|
||||||
|
import { BaseEntity } from '#application/bases/baseEntity'
|
||||||
import { Zone } from './zone'
|
import { Zone } from './zone'
|
||||||
import { ZoneEventTileType } from '#utilities/enums'
|
import { ZoneEventTileType } from '#application/enums'
|
||||||
import { ZoneEventTileTeleport } from './zoneEventTileTeleport'
|
import { ZoneEventTileTeleport } from './zoneEventTileTeleport'
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class ZoneEventTile {
|
export class ZoneEventTile extends BaseEntity {
|
||||||
@PrimaryKey()
|
@PrimaryKey()
|
||||||
id!: string
|
id!: string
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import { randomUUID } from 'node:crypto'
|
import { randomUUID } from 'node:crypto'
|
||||||
import { Entity, ManyToOne, OneToOne, PrimaryKey, Property } from '@mikro-orm/core'
|
import { Entity, ManyToOne, OneToOne, PrimaryKey, Property } from '@mikro-orm/core'
|
||||||
|
import { BaseEntity } from '#application/bases/baseEntity'
|
||||||
import { Zone } from './zone'
|
import { Zone } from './zone'
|
||||||
import { ZoneEventTile } from './ZoneEventTile'
|
import { ZoneEventTile } from './zoneEventTile'
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class ZoneEventTileTeleport {
|
export class ZoneEventTileTeleport extends BaseEntity {
|
||||||
@PrimaryKey()
|
@PrimaryKey()
|
||||||
id = randomUUID()
|
id = randomUUID()
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
|
import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
|
||||||
|
import { BaseEntity } from '#application/bases/baseEntity'
|
||||||
import { Zone } from './zone'
|
import { Zone } from './zone'
|
||||||
import { MapObject } from '#entities/mapObject'
|
import { MapObject } from '#entities/mapObject'
|
||||||
|
|
||||||
//@TODO : Rename mapObject
|
//@TODO : Rename mapObject
|
||||||
@Entity()
|
@Entity()
|
||||||
export class ZoneObject {
|
export class ZoneObject extends BaseEntity {
|
||||||
@PrimaryKey()
|
@PrimaryKey()
|
||||||
id!: string
|
id!: string
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import { Router, Request, Response } from 'express'
|
import { Router, Request, Response } from 'express'
|
||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
import { httpLogger } from '#utilities/logger'
|
import { httpLogger } from '#application/logger'
|
||||||
import { getPublicPath } from '#utilities/storage'
|
import { getPublicPath } from '#application/storage'
|
||||||
import TileRepository from '#repositories/tileRepository'
|
import TileRepository from '#repositories/tileRepository'
|
||||||
import ZoneRepository from '#repositories/zoneRepository'
|
import ZoneRepository from '#repositories/zoneRepository'
|
||||||
import SpriteRepository from '#repositories/spriteRepository'
|
import SpriteRepository from '#repositories/spriteRepository'
|
||||||
import { AssetData } from '#utilities/types'
|
import { AssetData } from '#application/types'
|
||||||
import { FilterValue } from '@mikro-orm/core'
|
import { FilterValue } from '@mikro-orm/core'
|
||||||
|
|
||||||
const router = Router()
|
const router = Router()
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Router, Request, Response } from 'express'
|
import { Router, Request, Response } from 'express'
|
||||||
import UserService from '#services/userService'
|
import UserService from '#services/userService'
|
||||||
import jwt from 'jsonwebtoken'
|
import jwt from 'jsonwebtoken'
|
||||||
import config from '#utilities/config'
|
import config from '#application/config'
|
||||||
import { loginAccountSchema, registerAccountSchema, resetPasswordSchema, newPasswordSchema } from '#utilities/zodTypes'
|
import { loginAccountSchema, registerAccountSchema, resetPasswordSchema, newPasswordSchema } from '#application/zodTypes'
|
||||||
|
|
||||||
const router = Router()
|
const router = Router()
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ import fs from 'fs'
|
|||||||
import CharacterRepository from '#repositories/characterRepository'
|
import CharacterRepository from '#repositories/characterRepository'
|
||||||
import CharacterHairRepository from '#repositories/characterHairRepository'
|
import CharacterHairRepository from '#repositories/characterHairRepository'
|
||||||
import CharacterTypeRepository from '#repositories/characterTypeRepository'
|
import CharacterTypeRepository from '#repositories/characterTypeRepository'
|
||||||
import { getPublicPath } from '#utilities/storage'
|
import { getPublicPath } from '#application/storage'
|
||||||
|
|
||||||
const router = Router()
|
const router = Router()
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Application } from 'express'
|
import { Application } from 'express'
|
||||||
import { httpLogger } from '#utilities/logger'
|
import { httpLogger } from '#application/logger'
|
||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
import { getAppPath } from '#utilities/storage'
|
import { getAppPath } from '#application/storage'
|
||||||
|
|
||||||
async function addHttpRoutes(app: Application) {
|
async function addHttpRoutes(app: Application) {
|
||||||
const routeFiles = fs.readdirSync(__dirname).filter((file) => {
|
const routeFiles = fs.readdirSync(__dirname).filter((file) => {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import { Server as SocketServer } from 'socket.io'
|
import { Server as SocketServer } from 'socket.io'
|
||||||
|
|
||||||
export default class SomeJob {
|
export default class SomeJob {
|
||||||
|
@ -2,8 +2,8 @@ import * as readline from 'readline'
|
|||||||
import * as fs from 'fs'
|
import * as fs from 'fs'
|
||||||
import * as path from 'path'
|
import * as path from 'path'
|
||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { commandLogger } from '#utilities/logger'
|
import { commandLogger } from '#application/logger'
|
||||||
import { getAppPath } from '#utilities/storage'
|
import { getAppPath } from '#application/storage'
|
||||||
|
|
||||||
class CommandManager {
|
class CommandManager {
|
||||||
private commands: Map<string, any> = new Map()
|
private commands: Map<string, any> = new Map()
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { appLogger } from '#utilities/logger'
|
import { appLogger } from '#application/logger'
|
||||||
import worldService from '#services/worldService'
|
import worldService from '#services/worldService'
|
||||||
import worldRepository from '#repositories/worldRepository'
|
import worldRepository from '#repositories/worldRepository'
|
||||||
|
|
||||||
@ -64,6 +64,9 @@ class DateManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private advanceGameTime(): void {
|
private advanceGameTime(): void {
|
||||||
|
if (!this.currentDate) {
|
||||||
|
this.currentDate = new Date()
|
||||||
|
}
|
||||||
const advanceMilliseconds = DateManager.GAME_SPEED * DateManager.UPDATE_INTERVAL
|
const advanceMilliseconds = DateManager.GAME_SPEED * DateManager.UPDATE_INTERVAL
|
||||||
this.currentDate = new Date(this.currentDate.getTime() + advanceMilliseconds)
|
this.currentDate = new Date(this.currentDate.getTime() + advanceMilliseconds)
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import IORedis from 'ioredis'
|
import IORedis from 'ioredis'
|
||||||
import { Job, Queue, Worker } from 'bullmq'
|
import { Job, Queue, Worker } from 'bullmq'
|
||||||
import config from '#utilities/config'
|
import config from '#application/config'
|
||||||
import { Server as SocketServer } from 'socket.io'
|
import { Server as SocketServer } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import { queueLogger } from '#utilities/logger'
|
import { queueLogger } from '#application/logger'
|
||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
import { getAppPath } from '#utilities/storage'
|
import { getAppPath } from '#application/storage'
|
||||||
|
|
||||||
class QueueManager {
|
class QueueManager {
|
||||||
private connection!: IORedis
|
private connection!: IORedis
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { User } from '@prisma/client'
|
import { User } from '@prisma/client'
|
||||||
import { appLogger } from '#utilities/logger'
|
import { appLogger } from '#application/logger'
|
||||||
|
|
||||||
type TLoggedInUsers = {
|
type TLoggedInUsers = {
|
||||||
users: User[]
|
users: User[]
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { appLogger } from '#utilities/logger'
|
import { appLogger } from '#application/logger'
|
||||||
import worldService from '#services/worldService'
|
import worldService from '#services/worldService'
|
||||||
import worldRepository from '#repositories/worldRepository'
|
import worldRepository from '#repositories/worldRepository'
|
||||||
|
|
||||||
@ -25,9 +25,9 @@ class WeatherManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async boot(io: Server): Promise<void> {
|
public async boot(io: Server): Promise<void> {
|
||||||
this.io = io
|
// this.io = io
|
||||||
await this.loadWeather()
|
// await this.loadWeather()
|
||||||
this.startWeatherLoop()
|
// this.startWeatherLoop()
|
||||||
appLogger.info('Weather manager loaded')
|
appLogger.info('Weather manager loaded')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ import { Zone } from '@prisma/client'
|
|||||||
import ZoneRepository from '#repositories/zoneRepository'
|
import ZoneRepository from '#repositories/zoneRepository'
|
||||||
import ZoneService from '#services/zoneService'
|
import ZoneService from '#services/zoneService'
|
||||||
import LoadedZone from '#models/loadedZone'
|
import LoadedZone from '#models/loadedZone'
|
||||||
import { gameLogger } from '#utilities/logger'
|
import { gameLogger } from '#application/logger'
|
||||||
import ZoneCharacter from '#models/zoneCharacter'
|
import ZoneCharacter from '#models/zoneCharacter'
|
||||||
|
|
||||||
class ZoneManager {
|
class ZoneManager {
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { verify } from 'jsonwebtoken'
|
import { verify } from 'jsonwebtoken'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import config from '#utilities/config'
|
import config from '#application/config'
|
||||||
import UserRepository from '#repositories/userRepository'
|
import UserRepository from '#repositories/userRepository'
|
||||||
import { User } from '@prisma/client'
|
import { User } from '@prisma/client'
|
||||||
import { gameLogger } from '#utilities/logger'
|
import { gameLogger } from '#application/logger'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Socket io jwt auth middleware
|
* Socket io jwt auth middleware
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { appLogger } from '#utilities/logger'
|
import { appLogger } from '#application/logger'
|
||||||
import { BaseRepository } from './baseRepository'
|
import { BaseRepository } from '#application/bases/baseRepository'
|
||||||
import { CharacterHair } from '#entities/characterHair'
|
import { CharacterHair } from '#entities/characterHair'
|
||||||
|
|
||||||
class CharacterHairRepository extends BaseRepository {
|
class CharacterHairRepository extends BaseRepository {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { appLogger } from '#utilities/logger'
|
import { appLogger } from '#application/logger'
|
||||||
import { BaseRepository } from '#repositories/baseRepository'
|
import { BaseRepository } from '#application/bases/baseRepository'
|
||||||
import { Character } from '#entities/character'
|
import { Character } from '#entities/character'
|
||||||
|
|
||||||
class CharacterRepository extends BaseRepository {
|
class CharacterRepository extends BaseRepository {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { appLogger } from '#utilities/logger'
|
import { appLogger } from '#application/logger'
|
||||||
import { BaseRepository } from '#repositories/baseRepository'
|
import { BaseRepository } from '#application/bases/baseRepository'
|
||||||
import { CharacterType } from '#entities/characterType'
|
import { CharacterType } from '#entities/characterType'
|
||||||
|
|
||||||
class CharacterTypeRepository extends BaseRepository {
|
class CharacterTypeRepository extends BaseRepository {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { appLogger } from '#utilities/logger'
|
import { appLogger } from '#application/logger'
|
||||||
import { BaseRepository } from '#repositories/baseRepository'
|
import { BaseRepository } from '#application/bases/baseRepository'
|
||||||
import { Chat } from '#entities/chat'
|
import { Chat } from '#entities/chat'
|
||||||
|
|
||||||
class ChatRepository extends BaseRepository {
|
class ChatRepository extends BaseRepository {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { appLogger } from '#utilities/logger'
|
import { appLogger } from '#application/logger'
|
||||||
import { BaseRepository } from '#repositories/baseRepository'
|
import { BaseRepository } from '#application/bases/baseRepository'
|
||||||
import { Item } from '#entities/item'
|
import { Item } from '#entities/item'
|
||||||
|
|
||||||
class ItemRepository extends BaseRepository {
|
class ItemRepository extends BaseRepository {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { BaseRepository } from '#repositories/baseRepository'
|
import { BaseRepository } from '#application/bases/baseRepository'
|
||||||
|
|
||||||
class ObjectRepository extends BaseRepository {
|
class ObjectRepository extends BaseRepository {
|
||||||
async getById(id: string): Promise<any> {
|
async getById(id: string): Promise<any> {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { appLogger } from '#utilities/logger'
|
import { appLogger } from '#application/logger'
|
||||||
import { BaseRepository } from '#repositories/baseRepository' // Import the global Prisma instance
|
import { BaseRepository } from '#application/bases/baseRepository' // Import the global Prisma instance
|
||||||
import { PasswordResetToken } from '#entities/passwordResetToken'
|
import { PasswordResetToken } from '#entities/passwordResetToken'
|
||||||
|
|
||||||
class PasswordResetTokenRepository extends BaseRepository {
|
class PasswordResetTokenRepository extends BaseRepository {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { FilterValue } from '@mikro-orm/core'
|
import { FilterValue } from '@mikro-orm/core'
|
||||||
import { BaseRepository } from '#repositories/baseRepository'
|
import { BaseRepository } from '#application/bases/baseRepository'
|
||||||
import { Sprite } from '#entities/sprite'
|
import { Sprite } from '#entities/sprite'
|
||||||
|
|
||||||
class SpriteRepository extends BaseRepository {
|
class SpriteRepository extends BaseRepository {
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { FilterValue } from '@mikro-orm/core'
|
import { FilterValue } from '@mikro-orm/core'
|
||||||
import { BaseRepository } from '#repositories/baseRepository'
|
import { BaseRepository } from '#application/bases/baseRepository'
|
||||||
import { Tile } from '#entities/tile'
|
import { Tile } from '#entities/tile'
|
||||||
import { Zone } from '#entities/zone'
|
import { Zone } from '#entities/zone'
|
||||||
import { unduplicateArray } from '#utilities/utilities'
|
import { unduplicateArray } from '#application/utilities'
|
||||||
import { FlattenZoneArray } from '#utilities/zone'
|
import { FlattenZoneArray } from '#application/zone'
|
||||||
|
|
||||||
class TileRepository extends BaseRepository {
|
class TileRepository extends BaseRepository {
|
||||||
async getById(id: FilterValue<`${string}-${string}-${string}-${string}-${string}`>): Promise<any> {
|
async getById(id: FilterValue<`${string}-${string}-${string}-${string}-${string}`>): Promise<any> {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { appLogger } from '#utilities/logger'
|
import { appLogger } from '#application/logger'
|
||||||
import { BaseRepository } from './baseRepository'
|
import { BaseRepository } from '#application/bases/baseRepository'
|
||||||
import { User } from '#entities/user'
|
import { User } from '#entities/user'
|
||||||
|
|
||||||
class UserRepository extends BaseRepository {
|
class UserRepository extends BaseRepository {
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { gameLogger } from '#utilities/logger'
|
import { gameLogger } from '#application/logger'
|
||||||
import { BaseRepository } from '#repositories/baseRepository'
|
import { BaseRepository } from '#application/bases/baseRepository'
|
||||||
import { World } from '#entities/world'
|
import { World } from '#entities/world'
|
||||||
|
|
||||||
class WorldRepository extends BaseRepository {
|
class WorldRepository extends BaseRepository {
|
||||||
async getFirst(): Promise<any> {
|
async getFirst() {
|
||||||
try {
|
try {
|
||||||
const repository = this.em.getRepository(World)
|
const repository = this.em.getRepository(World)
|
||||||
return await repository.findOne({})
|
return await repository.findOne({ date: { $exists: true }})
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
gameLogger.error(`Failed to get first world: ${error instanceof Error ? error.message : String(error)}`)
|
gameLogger.error(`Failed to get first world: ${error instanceof Error ? error.message : String(error)}`)
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { appLogger } from '#utilities/logger'
|
import { appLogger } from '#application/logger'
|
||||||
import { BaseRepository } from '#repositories/baseRepository'
|
import { BaseRepository } from '#application/bases/baseRepository'
|
||||||
import { ZoneEventTile } from '#entities/zoneEventTile'
|
import { ZoneEventTile } from '#entities/zoneEventTile'
|
||||||
|
|
||||||
class ZoneEventTileRepository extends BaseRepository {
|
class ZoneEventTileRepository extends BaseRepository {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { appLogger } from '#utilities/logger'
|
import { appLogger } from '#application/logger'
|
||||||
import { BaseRepository } from '#repositories/baseRepository'
|
import { BaseRepository } from '#application/bases/baseRepository'
|
||||||
import { ZoneEventTile } from '#entities/zoneEventTile'
|
import { ZoneEventTile } from '#entities/zoneEventTile'
|
||||||
import { ZoneObject } from '#entities/zoneObject'
|
import { ZoneObject } from '#entities/zoneObject'
|
||||||
import { Zone } from '#entities/zone'
|
import { Zone } from '#entities/zone'
|
||||||
|
@ -1,16 +1,15 @@
|
|||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
import express, { Application } from 'express'
|
import express, { Application } from 'express'
|
||||||
import config from '#utilities/config'
|
import config from '#application/config'
|
||||||
import { getAppPath } from '#utilities/storage'
|
import { getAppPath } from '#application/storage'
|
||||||
import { createServer as httpServer, Server as HTTPServer } from 'http'
|
import { createServer as httpServer, Server as HTTPServer } from 'http'
|
||||||
import { addHttpRoutes } from './http'
|
import { addHttpRoutes } from './http'
|
||||||
import cors from 'cors'
|
import cors from 'cors'
|
||||||
import { Server as SocketServer } from 'socket.io'
|
import { Server as SocketServer } from 'socket.io'
|
||||||
import { Authentication } from '#middleware/authentication'
|
import { Authentication } from '#middleware/authentication'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import { Database } from '#utilities/database'
|
import { Database } from '#application/database'
|
||||||
import prisma from '#utilities/prisma' // @TODO: Remove this
|
import { appLogger, watchLogs } from '#application/logger'
|
||||||
import { appLogger, watchLogs } from '#utilities/logger'
|
|
||||||
import ZoneManager from '#managers/zoneManager'
|
import ZoneManager from '#managers/zoneManager'
|
||||||
import UserManager from '#managers/userManager'
|
import UserManager from '#managers/userManager'
|
||||||
import CommandManager from '#managers/commandManager'
|
import CommandManager from '#managers/commandManager'
|
||||||
@ -50,19 +49,11 @@ export class Server {
|
|||||||
// Read log file and print to console for debugging
|
// Read log file and print to console for debugging
|
||||||
watchLogs()
|
watchLogs()
|
||||||
|
|
||||||
// Check prisma connection
|
// Connect to database
|
||||||
try {
|
|
||||||
await prisma.$connect()
|
|
||||||
appLogger.info('Database connected')
|
|
||||||
} catch (error: any) {
|
|
||||||
appLogger.error(`Database connection failed: ${error.message}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MikroORM
|
|
||||||
try {
|
try {
|
||||||
await Database.getInstance()
|
await Database.getInstance()
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
appLogger.error(`Database 2 connection failed: ${error.message}`)
|
appLogger.error(`Database connection failed: ${error.message}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start the server
|
// Start the server
|
||||||
|
@ -1,9 +1,14 @@
|
|||||||
import { AStar } from '#utilities/character/aStar'
|
import { AStar } from '#application/character/aStar'
|
||||||
import ZoneManager from '#managers/zoneManager'
|
import ZoneManager from '#managers/zoneManager'
|
||||||
import prisma from '#utilities/prisma'
|
import Rotation from '#application/character/rotation'
|
||||||
import Rotation from '#utilities/character/rotation'
|
import { appLogger, gameLogger } from '#application/logger'
|
||||||
import { appLogger, gameLogger } from '#utilities/logger'
|
import { Database } from '#application/database'
|
||||||
import { Character } from '@prisma/client'
|
import { Character } from '#entities/character'
|
||||||
|
import UserRepository from '#repositories/userRepository'
|
||||||
|
import CharacterRepository from '#repositories/characterRepository'
|
||||||
|
import CharacterHairRepository from '#repositories/characterHairRepository'
|
||||||
|
import ZoneRepository from '#repositories/zoneRepository'
|
||||||
|
import { Zone } from '#entities/zone'
|
||||||
|
|
||||||
interface Position {
|
interface Position {
|
||||||
x: number
|
x: number
|
||||||
@ -14,32 +19,41 @@ export class CharacterService {
|
|||||||
private readonly MOVEMENT_DELAY_MS = 250
|
private readonly MOVEMENT_DELAY_MS = 250
|
||||||
|
|
||||||
async create(name: string, userId: number) {
|
async create(name: string, userId: number) {
|
||||||
return prisma.character.create({
|
const user = await UserRepository.getById(userId)
|
||||||
data: {
|
if (!user) return null
|
||||||
name,
|
|
||||||
userId
|
const character = new Character()
|
||||||
// characterTypeId: 1 // @TODO set to chosen character type
|
character.name = name
|
||||||
}
|
character.user = user
|
||||||
})
|
await Database.save(character)
|
||||||
|
|
||||||
|
return character
|
||||||
}
|
}
|
||||||
|
|
||||||
async updateHair(characterId: number, characterHairId: number | null) {
|
async updateHair(characterId: number, characterHairId: number | null) {
|
||||||
await prisma.character.update({
|
const character = await CharacterRepository.getById(characterId)
|
||||||
where: { id: characterId },
|
if (!character) return null
|
||||||
data: {
|
|
||||||
characterHairId
|
if (characterHairId === null) {
|
||||||
}
|
character.characterHair = undefined
|
||||||
})
|
await Database.save(character)
|
||||||
|
return character
|
||||||
|
}
|
||||||
|
|
||||||
|
const characterHair = await CharacterHairRepository.getById(characterHairId)
|
||||||
|
character.characterHair = characterHair ?? undefined
|
||||||
|
|
||||||
|
await Database.save(character)
|
||||||
|
return character
|
||||||
}
|
}
|
||||||
|
|
||||||
async deleteByUserIdAndId(userId: number, characterId: number): Promise<Character | null> {
|
async deleteByUserIdAndId(userId: number, characterId: number): Promise<Character | null> {
|
||||||
try {
|
try {
|
||||||
return await prisma.character.delete({
|
const character = await CharacterRepository.getByUserAndId(userId, characterId)
|
||||||
where: {
|
if (!character) return null
|
||||||
userId,
|
|
||||||
id: characterId
|
await Database.delete(character)
|
||||||
}
|
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)}`)
|
||||||
@ -48,15 +62,16 @@ export class CharacterService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async updateCharacterPosition(id: number, positionX: number, positionY: number, rotation: number, zoneId: number) {
|
async updateCharacterPosition(id: number, positionX: number, positionY: number, rotation: number, zoneId: number) {
|
||||||
await prisma.character.update({
|
const character = await CharacterRepository.getById(id)
|
||||||
where: { id },
|
if (!character) return null
|
||||||
data: {
|
|
||||||
positionX,
|
character.positionX = positionX
|
||||||
positionY,
|
character.positionY = positionY
|
||||||
rotation,
|
character.rotation = rotation
|
||||||
zoneId
|
character.zone = await ZoneRepository.getById(zoneId) as Zone
|
||||||
}
|
|
||||||
})
|
await Database.save(character)
|
||||||
|
return character
|
||||||
}
|
}
|
||||||
|
|
||||||
public updatePosition(character: Character, position: Position, newZoneId?: number): void {
|
public updatePosition(character: Character, position: Position, newZoneId?: number): void {
|
||||||
@ -68,12 +83,12 @@ export class CharacterService {
|
|||||||
positionX: position.x,
|
positionX: position.x,
|
||||||
positionY: position.y,
|
positionY: position.y,
|
||||||
rotation: Rotation.calculate(character.positionX, character.positionY, position.x, position.y),
|
rotation: Rotation.calculate(character.positionX, character.positionY, position.x, position.y),
|
||||||
zoneId: newZoneId ?? character.zoneId
|
zoneId: newZoneId ?? character.zone.id
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public async calculatePath(character: Character, targetX: number, targetY: number): Promise<Position[] | null> {
|
public async calculatePath(character: Character, targetX: number, targetY: number): Promise<Position[] | null> {
|
||||||
const zone = ZoneManager.getZoneById(character.zoneId)
|
const zone = ZoneManager.getZoneById(character.zone.id)
|
||||||
const grid = await zone?.getGrid()
|
const grid = await zone?.getGrid()
|
||||||
|
|
||||||
if (!grid?.length) {
|
if (!grid?.length) {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import prisma from '#utilities/prisma'
|
import prisma from '#application/prisma'
|
||||||
import { gameLogger } from '#utilities/logger'
|
import { gameLogger } from '#application/logger'
|
||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import ChatRepository from '#repositories/chatRepository'
|
import ChatRepository from '#repositories/chatRepository'
|
||||||
|
|
||||||
class ChatService {
|
class ChatService {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import prisma from '#utilities/prisma'
|
import prisma from '#application/prisma'
|
||||||
import passwordResetTokenRepository from '#repositories/passwordResetTokenRepository'
|
import passwordResetTokenRepository from '#repositories/passwordResetTokenRepository'
|
||||||
import { appLogger } from '#utilities/logger'
|
import { appLogger } from '#application/logger'
|
||||||
|
|
||||||
class PasswordResetTokenService {
|
class PasswordResetTokenService {
|
||||||
/**
|
/**
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import bcrypt from 'bcryptjs'
|
import bcrypt from 'bcryptjs'
|
||||||
import UserRepository from '#repositories/userRepository'
|
import UserRepository from '#repositories/userRepository'
|
||||||
import PasswordResetTokenRepository from '#repositories/passwordResetTokenRepository'
|
import PasswordResetTokenRepository from '#repositories/passwordResetTokenRepository'
|
||||||
import config from '#utilities/config'
|
import config from '#application/config'
|
||||||
import NodeMailer from 'nodemailer'
|
import NodeMailer from 'nodemailer'
|
||||||
import { httpLogger } from '#utilities/logger'
|
import { httpLogger } from '#application/logger'
|
||||||
import PasswordResetTokenService from './passwordResetTokenService' // @TODO: Correctly implement this
|
import PasswordResetTokenService from './passwordResetTokenService' // @TODO: Correctly implement this
|
||||||
import { User } from '#entities/user'
|
import { User } from '#entities/user'
|
||||||
import { Database } from '#utilities/database'
|
import { Database } from '#application/database'
|
||||||
import { PasswordResetToken } from '#entities/passwordResetToken'
|
import { PasswordResetToken } from '#entities/passwordResetToken'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,30 +1,35 @@
|
|||||||
import prisma from '#utilities/prisma'
|
import { gameLogger } from '#application/logger'
|
||||||
import { gameLogger } from '#utilities/logger'
|
|
||||||
import { World } from '@prisma/client'
|
|
||||||
import WorldRepository from '#repositories/worldRepository'
|
import WorldRepository from '#repositories/worldRepository'
|
||||||
|
import { World } from '#entities/world'
|
||||||
|
|
||||||
class WorldService {
|
class WorldService {
|
||||||
async update(worldData: Partial<World>): Promise<boolean> {
|
async update(worldData: Partial<World>): Promise<boolean> {
|
||||||
try {
|
try {
|
||||||
const currentWorld = await WorldRepository.getFirst()
|
let world = await WorldRepository.getFirst()
|
||||||
if (!currentWorld) {
|
if (!world) {
|
||||||
// If no world exists, create first record
|
world = new World()
|
||||||
await prisma.world.create({
|
|
||||||
data: {
|
await world.save()
|
||||||
...worldData,
|
|
||||||
date: worldData.date || new Date()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update existing world using its date as unique identifier
|
world.date = worldData.date || new Date()
|
||||||
await prisma.world.update({
|
|
||||||
where: {
|
if (worldData.isRainEnabled) {
|
||||||
date: currentWorld.date
|
world.isRainEnabled = worldData.isRainEnabled
|
||||||
},
|
}
|
||||||
data: worldData
|
if (worldData.rainPercentage) {
|
||||||
})
|
world.rainPercentage = worldData.rainPercentage
|
||||||
|
}
|
||||||
|
if (worldData.isFogEnabled) {
|
||||||
|
world.isFogEnabled = worldData.isFogEnabled
|
||||||
|
}
|
||||||
|
if (worldData.fogDensity) {
|
||||||
|
world.fogDensity = worldData.fogDensity
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(world.date)
|
||||||
|
|
||||||
|
await world.update()
|
||||||
|
|
||||||
return true
|
return true
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { ExtendedCharacter, TSocket } from '#utilities/types'
|
import { ExtendedCharacter, TSocket } from '#application/types'
|
||||||
import prisma from '#utilities/prisma'
|
import prisma from '#application/prisma'
|
||||||
import { ZoneEventTileTeleport } from '@prisma/client'
|
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 '#utilities/logger'
|
import { gameLogger } from '#application/logger'
|
||||||
|
|
||||||
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> {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import prisma from '#utilities/prisma'
|
import prisma from '#application/prisma'
|
||||||
import { gameLogger } from '#utilities/logger'
|
import { gameLogger } from '#application/logger'
|
||||||
|
|
||||||
class ZoneService {}
|
class ZoneService {}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { CharacterHair } from '@prisma/client'
|
import { TSocket } from '#application/types'
|
||||||
import { TSocket } from '#utilities/types'
|
|
||||||
import characterHairRepository from '#repositories/characterHairRepository'
|
import characterHairRepository from '#repositories/characterHairRepository'
|
||||||
|
import { CharacterHair } from '#entities/characterHair'
|
||||||
|
|
||||||
interface IPayload {}
|
interface IPayload {}
|
||||||
|
|
||||||
@ -15,7 +15,7 @@ export default class characterHairListEvent {
|
|||||||
this.socket.on('character:hair:list', this.handleEvent.bind(this))
|
this.socket.on('character:hair:list', this.handleEvent.bind(this))
|
||||||
}
|
}
|
||||||
|
|
||||||
private async handleEvent(data: IPayload, callback: (response: CharacterHair[]) => void): Promise<void> {
|
private async handleEvent(data: IPayload, callback: (response: CharacterHair[] | null) => void): Promise<void> {
|
||||||
const items = await characterHairRepository.getAllSelectable()
|
const items = await characterHairRepository.getAllSelectable()
|
||||||
callback(items)
|
callback(items)
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import CharacterRepository from '#repositories/characterRepository'
|
import CharacterRepository from '#repositories/characterRepository'
|
||||||
import { gameLogger } from '#utilities/logger'
|
import { gameLogger } from '#application/logger'
|
||||||
import ZoneManager from '#managers/zoneManager'
|
import ZoneManager from '#managers/zoneManager'
|
||||||
import { CharacterService } from '#services/characterService'
|
import { CharacterService } from '#services/characterService'
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import { Character } from '@prisma/client'
|
import { Character } from '#entities/character'
|
||||||
import CharacterRepository from '#repositories/characterRepository'
|
import CharacterRepository from '#repositories/characterRepository'
|
||||||
import { CharacterService } from '#services/characterService'
|
import { CharacterService } from '#services/characterService'
|
||||||
import { ZCharacterCreate } from '#utilities/zodTypes'
|
import { ZCharacterCreate } from '#application/zodTypes'
|
||||||
import { gameLogger } from '#utilities/logger'
|
import { gameLogger } from '#application/logger'
|
||||||
import { ZodError } from 'zod'
|
import { ZodError } from 'zod'
|
||||||
|
|
||||||
export default class CharacterCreateEvent {
|
export default class CharacterCreateEvent {
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import { Character, Zone } from '@prisma/client'
|
|
||||||
import CharacterRepository from '#repositories/characterRepository'
|
import CharacterRepository from '#repositories/characterRepository'
|
||||||
import { CharacterService } from '#services/characterService'
|
import { CharacterService } from '#services/characterService'
|
||||||
|
import { Character } from '#entities/character'
|
||||||
|
import { Zone } from '#entities/zone'
|
||||||
|
|
||||||
type TypePayload = {
|
type TypePayload = {
|
||||||
characterId: number
|
characterId: number
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Socket, Server } from 'socket.io'
|
import { Socket, Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import { Character } from '@prisma/client'
|
|
||||||
import CharacterRepository from '#repositories/characterRepository'
|
import CharacterRepository from '#repositories/characterRepository'
|
||||||
import { gameLogger } from '#utilities/logger'
|
import { gameLogger } from '#application/logger'
|
||||||
|
import { Character } from '#entities/character'
|
||||||
|
|
||||||
export default class CharacterListEvent {
|
export default class CharacterListEvent {
|
||||||
constructor(
|
constructor(
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import { getArgs, isCommand } from '#utilities/chat'
|
import { getArgs, isCommand } from '#application/chat'
|
||||||
import CharacterRepository from '#repositories/characterRepository'
|
import CharacterRepository from '#repositories/characterRepository'
|
||||||
import { gameLogger } from '#utilities/logger'
|
import { gameLogger } from '#application/logger'
|
||||||
|
|
||||||
type TypePayload = {
|
type TypePayload = {
|
||||||
message: string
|
message: string
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import { getArgs, isCommand } from '#utilities/chat'
|
import { getArgs, isCommand } from '#application/chat'
|
||||||
import CharacterRepository from '#repositories/characterRepository'
|
import CharacterRepository from '#repositories/characterRepository'
|
||||||
import { gameLogger } from '#utilities/logger'
|
import { gameLogger } from '#application/logger'
|
||||||
import DateManager from '#managers/dateManager'
|
import DateManager from '#managers/dateManager'
|
||||||
|
|
||||||
type TypePayload = {
|
type TypePayload = {
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import { getArgs, isCommand } from '#utilities/chat'
|
import { getArgs, isCommand } from '#application/chat'
|
||||||
import ZoneRepository from '#repositories/zoneRepository'
|
import ZoneRepository from '#repositories/zoneRepository'
|
||||||
import { gameLogger, gameMasterLogger } from '#utilities/logger'
|
import { gameLogger, gameMasterLogger } from '#application/logger'
|
||||||
import ZoneManager from '#managers/zoneManager'
|
import ZoneManager from '#managers/zoneManager'
|
||||||
import ZoneCharacter from '#models/zoneCharacter'
|
import ZoneCharacter from '#models/zoneCharacter'
|
||||||
import zoneManager from '#managers/zoneManager'
|
import zoneManager from '#managers/zoneManager'
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import { isCommand } from '#utilities/chat'
|
import { isCommand } from '#application/chat'
|
||||||
import CharacterRepository from '#repositories/characterRepository'
|
import CharacterRepository from '#repositories/characterRepository'
|
||||||
import { gameLogger } from '#utilities/logger'
|
import { gameLogger } from '#application/logger'
|
||||||
import WeatherManager from '#managers/weatherManager'
|
import WeatherManager from '#managers/weatherManager'
|
||||||
|
|
||||||
type TypePayload = {
|
type TypePayload = {
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import { isCommand } from '#utilities/chat'
|
import { isCommand } from '#application/chat'
|
||||||
import CharacterRepository from '#repositories/characterRepository'
|
import CharacterRepository from '#repositories/characterRepository'
|
||||||
import { gameLogger } from '#utilities/logger'
|
import { gameLogger } from '#application/logger'
|
||||||
import WeatherManager from '#managers/weatherManager'
|
import WeatherManager from '#managers/weatherManager'
|
||||||
|
|
||||||
type TypePayload = {
|
type TypePayload = {
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import ZoneRepository from '#repositories/zoneRepository'
|
import ZoneRepository from '#repositories/zoneRepository'
|
||||||
import { isCommand } from '#utilities/chat'
|
import { isCommand } from '#application/chat'
|
||||||
import { gameLogger } from '#utilities/logger'
|
import { gameLogger } from '#application/logger'
|
||||||
import ZoneManager from '#managers/zoneManager'
|
import ZoneManager from '#managers/zoneManager'
|
||||||
import ChatService from '#services/chatService'
|
import ChatService from '#services/chatService'
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import { gameLogger } from '#utilities/logger'
|
import { gameLogger } from '#application/logger'
|
||||||
import ZoneManager from '#managers/zoneManager'
|
import ZoneManager from '#managers/zoneManager'
|
||||||
|
|
||||||
export default class DisconnectEvent {
|
export default class DisconnectEvent {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import prisma from '#utilities/prisma'
|
import prisma from '#application/prisma'
|
||||||
import characterRepository from '#repositories/characterRepository'
|
import characterRepository from '#repositories/characterRepository'
|
||||||
|
|
||||||
export default class CharacterHairCreateEvent {
|
export default class CharacterHairCreateEvent {
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import prisma from '#utilities/prisma'
|
import prisma from '#application/prisma'
|
||||||
import characterRepository from '#repositories/characterRepository'
|
import characterRepository from '#repositories/characterRepository'
|
||||||
import { gameMasterLogger } from '#utilities/logger'
|
import { gameMasterLogger } from '#application/logger'
|
||||||
|
|
||||||
interface IPayload {
|
interface IPayload {
|
||||||
id: number
|
id: number
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import { CharacterHair } from '@prisma/client'
|
import { CharacterHair } from '@prisma/client'
|
||||||
import { gameMasterLogger } from '#utilities/logger'
|
import { gameMasterLogger } from '#application/logger'
|
||||||
import characterRepository from '#repositories/characterRepository'
|
import characterRepository from '#repositories/characterRepository'
|
||||||
import characterHairRepository from '#repositories/characterHairRepository'
|
import characterHairRepository from '#repositories/characterHairRepository'
|
||||||
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import prisma from '#utilities/prisma'
|
import prisma from '#application/prisma'
|
||||||
import characterRepository from '#repositories/characterRepository'
|
import characterRepository from '#repositories/characterRepository'
|
||||||
import { CharacterGender, CharacterRace } from '@prisma/client'
|
import { CharacterGender, CharacterRace } from '@prisma/client'
|
||||||
import { gameMasterLogger } from '#utilities/logger'
|
import { gameMasterLogger } from '#application/logger'
|
||||||
|
|
||||||
type Payload = {
|
type Payload = {
|
||||||
id: number
|
id: number
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import prisma from '#utilities/prisma'
|
import prisma from '#application/prisma'
|
||||||
import characterRepository from '#repositories/characterRepository'
|
import characterRepository from '#repositories/characterRepository'
|
||||||
import { CharacterGender, CharacterRace } from '@prisma/client'
|
import { CharacterGender, CharacterRace } from '@prisma/client'
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import prisma from '#utilities/prisma'
|
import prisma from '#application/prisma'
|
||||||
import characterRepository from '#repositories/characterRepository'
|
import characterRepository from '#repositories/characterRepository'
|
||||||
import { gameMasterLogger } from '#utilities/logger'
|
import { gameMasterLogger } from '#application/logger'
|
||||||
|
|
||||||
interface IPayload {
|
interface IPayload {
|
||||||
id: number
|
id: number
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import { CharacterType } from '@prisma/client'
|
import { CharacterType } from '@prisma/client'
|
||||||
import characterRepository from '#repositories/characterRepository'
|
import characterRepository from '#repositories/characterRepository'
|
||||||
import { gameMasterLogger } from '#utilities/logger'
|
import { gameMasterLogger } from '#application/logger'
|
||||||
import CharacterTypeRepository from '#repositories/characterTypeRepository'
|
import CharacterTypeRepository from '#repositories/characterTypeRepository'
|
||||||
|
|
||||||
interface IPayload {}
|
interface IPayload {}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import prisma from '#utilities/prisma'
|
import prisma from '#application/prisma'
|
||||||
import characterRepository from '#repositories/characterRepository'
|
import characterRepository from '#repositories/characterRepository'
|
||||||
import { CharacterGender, CharacterRace } from '@prisma/client'
|
import { CharacterGender, CharacterRace } from '@prisma/client'
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import prisma from '#utilities/prisma'
|
import prisma from '#application/prisma'
|
||||||
import characterRepository from '#repositories/characterRepository'
|
import characterRepository from '#repositories/characterRepository'
|
||||||
|
|
||||||
export default class ItemCreateEvent {
|
export default class ItemCreateEvent {
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import prisma from '#utilities/prisma'
|
import prisma from '#application/prisma'
|
||||||
import characterRepository from '#repositories/characterRepository'
|
import characterRepository from '#repositories/characterRepository'
|
||||||
import { gameMasterLogger } from '#utilities/logger'
|
import { gameMasterLogger } from '#application/logger'
|
||||||
|
|
||||||
interface IPayload {
|
interface IPayload {
|
||||||
id: string
|
id: string
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import { Item } from '@prisma/client'
|
import { Item } from '@prisma/client'
|
||||||
import characterRepository from '#repositories/characterRepository'
|
import characterRepository from '#repositories/characterRepository'
|
||||||
import { gameMasterLogger } from '#utilities/logger'
|
import { gameMasterLogger } from '#application/logger'
|
||||||
import itemRepository from '#repositories/itemRepository'
|
import itemRepository from '#repositories/itemRepository'
|
||||||
|
|
||||||
interface IPayload {}
|
interface IPayload {}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import prisma from '#utilities/prisma'
|
import prisma from '#application/prisma'
|
||||||
import characterRepository from '#repositories/characterRepository'
|
import characterRepository from '#repositories/characterRepository'
|
||||||
import { ItemType, ItemRarity } from '@prisma/client'
|
import { ItemType, ItemRarity } from '@prisma/client'
|
||||||
import { gameMasterLogger } from '#utilities/logger'
|
import { gameMasterLogger } from '#application/logger'
|
||||||
|
|
||||||
type Payload = {
|
type Payload = {
|
||||||
id: string
|
id: string
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import { Object } from '@prisma/client'
|
import { Object } from '@prisma/client'
|
||||||
import ObjectRepository from '#repositories/objectRepository'
|
import ObjectRepository from '#repositories/objectRepository'
|
||||||
import characterRepository from '#repositories/characterRepository'
|
import characterRepository from '#repositories/characterRepository'
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import prisma from '#utilities/prisma'
|
import prisma from '#application/prisma'
|
||||||
import characterRepository from '#repositories/characterRepository'
|
import characterRepository from '#repositories/characterRepository'
|
||||||
import { getPublicPath } from '#utilities/storage'
|
import { getPublicPath } from '#application/storage'
|
||||||
import { gameLogger, gameMasterLogger } from '#utilities/logger'
|
import { gameLogger, gameMasterLogger } from '#application/logger'
|
||||||
|
|
||||||
interface IPayload {
|
interface IPayload {
|
||||||
object: string
|
object: string
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import prisma from '#utilities/prisma'
|
import prisma from '#application/prisma'
|
||||||
import characterRepository from '#repositories/characterRepository'
|
import characterRepository from '#repositories/characterRepository'
|
||||||
|
|
||||||
type Payload = {
|
type Payload = {
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import { writeFile } from 'node:fs/promises'
|
import { writeFile } from 'node:fs/promises'
|
||||||
import fs from 'fs/promises'
|
import fs from 'fs/promises'
|
||||||
import prisma from '#utilities/prisma'
|
import prisma from '#application/prisma'
|
||||||
import sharp from 'sharp'
|
import sharp from 'sharp'
|
||||||
import characterRepository from '#repositories/characterRepository'
|
import characterRepository from '#repositories/characterRepository'
|
||||||
import { gameMasterLogger } from '#utilities/logger'
|
import { gameMasterLogger } from '#application/logger'
|
||||||
import { getPublicPath } from '#utilities/storage'
|
import { getPublicPath } from '#application/storage'
|
||||||
|
|
||||||
interface IObjectData {
|
interface IObjectData {
|
||||||
[key: string]: Buffer
|
[key: string]: Buffer
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import prisma from '#utilities/prisma'
|
import prisma from '#application/prisma'
|
||||||
import CharacterRepository from '#repositories/characterRepository'
|
import CharacterRepository from '#repositories/characterRepository'
|
||||||
import { gameMasterLogger } from '#utilities/logger'
|
import { gameMasterLogger } from '#application/logger'
|
||||||
import type { Prisma } from '@prisma/client'
|
import type { Prisma } from '@prisma/client'
|
||||||
|
|
||||||
interface CopyPayload {
|
interface CopyPayload {
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { Server } from 'socket.io'
|
import { Server } from 'socket.io'
|
||||||
import { TSocket } from '#utilities/types'
|
import { TSocket } from '#application/types'
|
||||||
import fs from 'fs/promises'
|
import fs from 'fs/promises'
|
||||||
import prisma from '#utilities/prisma'
|
import prisma from '#application/prisma'
|
||||||
import characterRepository from '#repositories/characterRepository'
|
import characterRepository from '#repositories/characterRepository'
|
||||||
import { getPublicPath } from '#utilities/storage'
|
import { getPublicPath } from '#application/storage'
|
||||||
|
|
||||||
export default class SpriteCreateEvent {
|
export default class SpriteCreateEvent {
|
||||||
constructor(
|
constructor(
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user