This commit is contained in:
Dennis Postma 2025-02-12 00:50:51 +01:00
parent c47339dfcd
commit e40a56825a
121 changed files with 468 additions and 3305 deletions

View File

@ -3,6 +3,9 @@
"semi": false, "semi": false,
"tabWidth": 2, "tabWidth": 2,
"singleQuote": true, "singleQuote": true,
"printWidth": 200, "printWidth": 300,
"trailingComma": "none" "trailingComma": "none",
"plugins": ["@ianvs/prettier-plugin-sort-imports"],
"importOrderParserPlugins": ["typescript", "jsx", "decorators-legacy", "classProperties"],
"importOrderCaseSensitive": false
} }

View File

@ -1,42 +0,0 @@
import eslint from '@eslint/js';
import tseslint from '@typescript-eslint/eslint-plugin';
import tsparser from '@typescript-eslint/parser';
import importPlugin from 'eslint-plugin-import';
export default [
eslint.configs.recommended,
{
files: ['**/*.ts'],
languageOptions: {
parser: tsparser,
parserOptions: {
project: './tsconfig.json',
ecmaVersion: 2023,
},
},
plugins: {
'@typescript-eslint': tseslint,
'import': importPlugin,
},
rules: {
...tseslint.configs['recommended'].rules,
...tseslint.configs['recommended-requiring-type-checking'].rules,
'import/order': ['error', {
'groups': [
'builtin',
'external',
'internal',
['parent', 'sibling'],
'index',
'object',
'type'
],
'newlines-between': 'always',
'alphabetize': {
'order': 'asc',
'caseInsensitive': true
}
}]
}
}
];

3102
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -4,23 +4,7 @@
"scripts": { "scripts": {
"start": "tsx src/server.ts", "start": "tsx src/server.ts",
"dev": "nodemon --exec tsx src/server.ts", "dev": "nodemon --exec tsx src/server.ts",
"format": "prettier --write src/", "format": "prettier --write src/"
"lint": "eslint .",
"lint:fix": "eslint . --fix"
},
"imports": {
"#root/*": "./src/*.js",
"@/application/*": "./src/application/*.js",
"@/commands/*": "./src/commands/*.js",
"@/entities/*": "./src/entities/*.js",
"@/controllers/*": "./src/controllers/*.js",
"@/jobs/*": "./src/jobs/*.js",
"@/managers/*": "./src/managers/*.js",
"@/middleware/*": "./src/middleware/*.js",
"@/models/*": "./src/models/*.js",
"@/repositories/*": "./src/repositories/*.js",
"@/services/*": "./src/services/*.js",
"@/events/*": "./src/events/*.js"
}, },
"dependencies": { "dependencies": {
"@mikro-orm/cli": "^6.4.2", "@mikro-orm/cli": "^6.4.2",
@ -55,13 +39,9 @@
"@types/jsonwebtoken": "^9.0.6", "@types/jsonwebtoken": "^9.0.6",
"@types/node": "^20.14.11", "@types/node": "^20.14.11",
"@types/nodemailer": "^6.4.16", "@types/nodemailer": "^6.4.16",
"@typescript-eslint/eslint-plugin": "^8.18.2",
"@typescript-eslint/parser": "^8.18.2",
"eslint": "^9.17.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-import": "^2.31.0",
"nodemon": "^3.1.4", "nodemon": "^3.1.4",
"prettier": "^3.3.3", "prettier": "^3.3.3",
"@ianvs/prettier-plugin-sort-imports": "^4.4.0",
"tsx": "^4.19.2" "tsx": "^4.19.2"
} }
} }

View File

@ -1,6 +1,5 @@
import { Server } from 'socket.io'
import Logger, { LoggerType } from '@/application/logger' import Logger, { LoggerType } from '@/application/logger'
import { Server } from 'socket.io'
export abstract class BaseCommand { export abstract class BaseCommand {
protected readonly logger = Logger.type(LoggerType.COMMAND) protected readonly logger = Logger.type(LoggerType.COMMAND)

View File

@ -1,8 +1,6 @@
import fs from 'fs' import fs from 'fs'
import type { Response } from 'express'
import Logger, { LoggerType } from '@/application/logger' import Logger, { LoggerType } from '@/application/logger'
import type { Response } from 'express'
export abstract class BaseController { export abstract class BaseController {
protected readonly logger = Logger.type(LoggerType.HTTP) protected readonly logger = Logger.type(LoggerType.HTTP)

View File

@ -1,7 +1,6 @@
import { EntityManager } from '@mikro-orm/core'
import Database from '@/application/database' import Database from '@/application/database'
import Logger, { LoggerType } from '@/application/logger' import Logger, { LoggerType } from '@/application/logger'
import { EntityManager } from '@mikro-orm/core'
export abstract class BaseEntity { export abstract class BaseEntity {
protected readonly logger = Logger.type(LoggerType.ENTITY) protected readonly logger = Logger.type(LoggerType.ENTITY)

View File

@ -1,11 +1,9 @@
import { Server } from 'socket.io'
import type { TSocket } from '@/application/types'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import Logger, { LoggerType } from '@/application/logger' import Logger, { LoggerType } from '@/application/logger'
import type { TSocket } from '@/application/types'
import { Character } from '@/entities/character' import { Character } from '@/entities/character'
import CharacterRepository from '@/repositories/characterRepository' import CharacterRepository from '@/repositories/characterRepository'
import { Server } from 'socket.io'
export abstract class BaseEvent { export abstract class BaseEvent {
protected readonly logger = Logger.type(LoggerType.GAME) protected readonly logger = Logger.type(LoggerType.GAME)
@ -31,7 +29,7 @@ export abstract class BaseEvent {
protected async getCharacter(): Promise<Character | null> { protected async getCharacter(): Promise<Character | null> {
const characterRepository = new CharacterRepository() const characterRepository = new CharacterRepository()
return characterRepository.getById(this.socket.characterId!) return characterRepository.getById(this.socket.characterId)
} }
protected async isCharacterGM(): Promise<boolean> { protected async isCharacterGM(): Promise<boolean> {

View File

@ -1,7 +1,6 @@
import { EntityManager } from '@mikro-orm/core'
import Database from '@/application/database' import Database from '@/application/database'
import Logger, { LoggerType } from '@/application/logger' import Logger, { LoggerType } from '@/application/logger'
import { EntityManager } from '@mikro-orm/core'
export abstract class BaseRepository { export abstract class BaseRepository {
protected readonly logger = Logger.type(LoggerType.REPOSITORY) protected readonly logger = Logger.type(LoggerType.REPOSITORY)

View File

@ -1,11 +1,9 @@
import * as fs from 'fs' import * as fs from 'fs'
import * as path from 'path' import * as path from 'path'
import { pathToFileURL } from 'url' import { pathToFileURL } from 'url'
import type { Command } from '@/application/types'
import Logger, { LoggerType } from '@/application/logger' import Logger, { LoggerType } from '@/application/logger'
import Storage from '@/application/storage' import Storage from '@/application/storage'
import type { Command } from '@/application/types'
export class CommandRegistry { export class CommandRegistry {
private readonly commands: Map<string, Command> = new Map() private readonly commands: Map<string, Command> = new Map()

View File

@ -1,6 +1,5 @@
import * as fs from 'fs' import * as fs from 'fs'
import * as path from 'path' import * as path from 'path'
import Logger, { LoggerType } from '@/application/logger' import Logger, { LoggerType } from '@/application/logger'
export class LogReader { export class LogReader {

View File

@ -1,8 +1,8 @@
import { MikroORM } from '@mikro-orm/mariadb'
// import { MikroORM } from '@mikro-orm/mysql' // import { MikroORM } from '@mikro-orm/mysql'
import Logger, { LoggerType } from '@/application/logger' import Logger, { LoggerType } from '@/application/logger'
import config from '@/root/mikro-orm.config' import config from '@/root/mikro-orm.config'
import { MikroORM } from '@mikro-orm/mariadb'
class Database { class Database {
private static orm: MikroORM private static orm: MikroORM

View File

@ -1,4 +1,5 @@
import pino from 'pino' import pino from 'pino'
const logger = pino.pino const logger = pino.pino
export enum LoggerType { export enum LoggerType {

View File

@ -1,6 +1,5 @@
import fs from 'fs' import fs from 'fs'
import path from 'path' import path from 'path'
import config from '@/application/config' import config from '@/application/config'
class Storage { class Storage {

View File

@ -1,8 +1,7 @@
import { Server, Socket } from 'socket.io'
import { Character } from '@/entities/character' import { Character } from '@/entities/character'
import { MapEventTile } from '@/entities/mapEventTile' import { MapEventTile } from '@/entities/mapEventTile'
import { MapEventTileTeleport } from '@/entities/mapEventTileTeleport' import { MapEventTileTeleport } from '@/entities/mapEventTileTeleport'
import { Server, Socket } from 'socket.io'
export type UUID = `${string}-${string}-${string}-${string}-${string}` export type UUID = `${string}-${string}-${string}-${string}-${string}`

View File

@ -1,7 +1,6 @@
import { Server } from 'socket.io'
import { BaseCommand } from '@/application/base/baseCommand' import { BaseCommand } from '@/application/base/baseCommand'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import { Server } from 'socket.io'
type CommandInput = string[] type CommandInput = string[]

View File

@ -1,12 +1,8 @@
import fs from 'fs' import fs from 'fs'
import sharp from 'sharp'
import type { UUID } from '@/application/types'
import { BaseCommand } from '@/application/base/baseCommand' import { BaseCommand } from '@/application/base/baseCommand'
import { CharacterGender, CharacterRace } from '@/application/enums' import { CharacterGender, CharacterRace } from '@/application/enums'
import Storage from '@/application/storage' import Storage from '@/application/storage'
import type { UUID } from '@/application/types'
import { Character } from '@/entities/character' import { Character } from '@/entities/character'
import { CharacterHair } from '@/entities/characterHair' import { CharacterHair } from '@/entities/characterHair'
import { CharacterType } from '@/entities/characterType' import { CharacterType } from '@/entities/characterType'
@ -20,6 +16,7 @@ import { User } from '@/entities/user'
import CharacterHairRepository from '@/repositories/characterHairRepository' import CharacterHairRepository from '@/repositories/characterHairRepository'
import CharacterTypeRepository from '@/repositories/characterTypeRepository' import CharacterTypeRepository from '@/repositories/characterTypeRepository'
import MapRepository from '@/repositories/mapRepository' import MapRepository from '@/repositories/mapRepository'
import sharp from 'sharp'
// @TODO : Replace this with seeding // @TODO : Replace this with seeding
// https://mikro-orm.io/docs/seeding // https://mikro-orm.io/docs/seeding
@ -273,14 +270,7 @@ export default class InitCommand extends BaseCommand {
.save() .save()
const characterType = new CharacterType() const characterType = new CharacterType()
await characterType await characterType.setId('75b70c78-17f0-44c0-a4fa-15043cb95be0').setName('New character type').setGender(CharacterGender.MALE).setRace(CharacterRace.HUMAN).setIsSelectable(true).setSprite(characterSprite).save()
.setId('75b70c78-17f0-44c0-a4fa-15043cb95be0')
.setName('New character type')
.setGender(CharacterGender.MALE)
.setRace(CharacterRace.HUMAN)
.setIsSelectable(true)
.setSprite(characterSprite)
.save()
} }
private async createCharacterHair(): Promise<void> { private async createCharacterHair(): Promise<void> {
@ -355,7 +345,7 @@ export default class InitCommand extends BaseCommand {
.setUser(user) .setUser(user)
.setName('root') .setName('root')
.setRole('gm') .setRole('gm')
.setMap((await this.mapRepository.getFirst())!) .setMap(await this.mapRepository.getFirst())
.setCharacterType(await this.characterTypeRepository.getFirst()) .setCharacterType(await this.characterTypeRepository.getFirst())
.setCharacterHair(await this.characterHairRepository.getFirst()) .setCharacterHair(await this.characterHairRepository.getFirst())
.save() .save()

View File

@ -1,9 +1,7 @@
import fs from 'fs' import fs from 'fs'
import sharp from 'sharp'
import { BaseCommand } from '@/application/base/baseCommand' import { BaseCommand } from '@/application/base/baseCommand'
import Storage from '@/application/storage' import Storage from '@/application/storage'
import sharp from 'sharp'
export default class TilesCommand extends BaseCommand { export default class TilesCommand extends BaseCommand {
public async execute(): Promise<void> { public async execute(): Promise<void> {

View File

@ -1,11 +1,9 @@
import jwt from 'jsonwebtoken'
import type { Request, Response } from 'express'
import { BaseController } from '@/application/base/baseController' import { BaseController } from '@/application/base/baseController'
import config from '@/application/config' import config from '@/application/config'
import { loginAccountSchema, registerAccountSchema, resetPasswordSchema, newPasswordSchema } from '@/application/zodTypes' import { loginAccountSchema, newPasswordSchema, registerAccountSchema, resetPasswordSchema } from '@/application/zodTypes'
import UserService from '@/services/userService' import UserService from '@/services/userService'
import type { Request, Response } from 'express'
import jwt from 'jsonwebtoken'
export class AuthController extends BaseController { export class AuthController extends BaseController {
/** /**

View File

@ -1,15 +1,12 @@
import fs from 'fs' import fs from 'fs'
import sharp from 'sharp'
import type { UUID } from '@/application/types'
import type { Request, Response } from 'express'
import { BaseController } from '@/application/base/baseController' import { BaseController } from '@/application/base/baseController'
import Storage from '@/application/storage' import Storage from '@/application/storage'
import type { UUID } from '@/application/types'
import CharacterHairRepository from '@/repositories/characterHairRepository' import CharacterHairRepository from '@/repositories/characterHairRepository'
import CharacterRepository from '@/repositories/characterRepository' import CharacterRepository from '@/repositories/characterRepository'
import CharacterTypeRepository from '@/repositories/characterTypeRepository' import CharacterTypeRepository from '@/repositories/characterTypeRepository'
import type { Request, Response } from 'express'
import sharp from 'sharp'
interface AvatarOptions { interface AvatarOptions {
characterTypeId: UUID characterTypeId: UUID

View File

@ -1,5 +1,3 @@
import type { Request, Response } from 'express'
import { BaseController } from '@/application/base/baseController' import { BaseController } from '@/application/base/baseController'
import CharacterHairRepository from '@/repositories/characterHairRepository' import CharacterHairRepository from '@/repositories/characterHairRepository'
import CharacterTypeRepository from '@/repositories/characterTypeRepository' import CharacterTypeRepository from '@/repositories/characterTypeRepository'
@ -7,6 +5,7 @@ import MapObjectRepository from '@/repositories/mapObjectRepository'
import MapRepository from '@/repositories/mapRepository' import MapRepository from '@/repositories/mapRepository'
import SpriteRepository from '@/repositories/spriteRepository' import SpriteRepository from '@/repositories/spriteRepository'
import TileRepository from '@/repositories/tileRepository' import TileRepository from '@/repositories/tileRepository'
import type { Request, Response } from 'express'
export class CacheController extends BaseController { export class CacheController extends BaseController {
/** /**

View File

@ -1,7 +1,6 @@
import type { Request, Response } from 'express'
import { BaseController } from '@/application/base/baseController' import { BaseController } from '@/application/base/baseController'
import Storage from '@/application/storage' import Storage from '@/application/storage'
import type { Request, Response } from 'express'
export class TexturesController extends BaseController { export class TexturesController extends BaseController {
/** /**

View File

@ -1,7 +1,5 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { BaseEntity } from '@/application/base/baseEntity'
import { Collection, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import type { UUID } from '@/application/types' import type { UUID } from '@/application/types'
import type { CharacterEquipment } from '@/entities/characterEquipment' import type { CharacterEquipment } from '@/entities/characterEquipment'
import type { CharacterHair } from '@/entities/characterHair' import type { CharacterHair } from '@/entities/characterHair'
@ -10,8 +8,7 @@ import type { CharacterType } from '@/entities/characterType'
import type { Chat } from '@/entities/chat' import type { Chat } from '@/entities/chat'
import type { Map } from '@/entities/map' import type { Map } from '@/entities/map'
import type { User } from '@/entities/user' import type { User } from '@/entities/user'
import { Collection, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '@/application/base/baseEntity'
export class BaseCharacter extends BaseEntity { export class BaseCharacter extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,13 +1,10 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { BaseEntity } from '@/application/base/baseEntity'
import { Enum, ManyToOne, PrimaryKey } from '@mikro-orm/core' import { CharacterEquipmentSlotType } from '@/application/enums'
import type { UUID } from '@/application/types' import type { UUID } from '@/application/types'
import type { Character } from '@/entities/character' import type { Character } from '@/entities/character'
import type { CharacterItem } from '@/entities/characterItem' import type { CharacterItem } from '@/entities/characterItem'
import { Enum, ManyToOne, PrimaryKey } from '@mikro-orm/core'
import { BaseEntity } from '@/application/base/baseEntity'
import { CharacterEquipmentSlotType } from '@/application/enums'
export class BaseCharacterEquipment extends BaseEntity { export class BaseCharacterEquipment extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,13 +1,10 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import type { UUID } from '@/application/types'
import { BaseEntity } from '@/application/base/baseEntity' import { BaseEntity } from '@/application/base/baseEntity'
import { CharacterGender } from '@/application/enums' import { CharacterGender } from '@/application/enums'
import type { UUID } from '@/application/types'
import { Character } from '@/entities/character' import { Character } from '@/entities/character'
import { Sprite } from '@/entities/sprite' import { Sprite } from '@/entities/sprite'
import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
export class BaseCharacterHair extends BaseEntity { export class BaseCharacterHair extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,12 +1,9 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { BaseEntity } from '@/application/base/baseEntity'
import { ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
import type { UUID } from '@/application/types' import type { UUID } from '@/application/types'
import type { Character } from '@/entities/character' import type { Character } from '@/entities/character'
import type { Item } from '@/entities/item' import type { Item } from '@/entities/item'
import { ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '@/application/base/baseEntity'
export class BaseCharacterItem extends BaseEntity { export class BaseCharacterItem extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,13 +1,10 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { Collection, Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import type { UUID } from '@/application/types'
import { BaseEntity } from '@/application/base/baseEntity' import { BaseEntity } from '@/application/base/baseEntity'
import { CharacterGender, CharacterRace } from '@/application/enums' import { CharacterGender, CharacterRace } from '@/application/enums'
import type { UUID } from '@/application/types'
import { Character } from '@/entities/character' import { Character } from '@/entities/character'
import { Sprite } from '@/entities/sprite' import { Sprite } from '@/entities/sprite'
import { Collection, Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
export class BaseCharacterType extends BaseEntity { export class BaseCharacterType extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,12 +1,9 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { BaseEntity } from '@/application/base/baseEntity'
import { ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
import type { UUID } from '@/application/types' import type { UUID } from '@/application/types'
import type { Character } from '@/entities/character' import type { Character } from '@/entities/character'
import type { Map } from '@/entities/map' import type { Map } from '@/entities/map'
import { ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '@/application/base/baseEntity'
export class BaseChat extends BaseEntity { export class BaseChat extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,13 +1,10 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { Collection, Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import type { UUID } from '@/application/types'
import { BaseEntity } from '@/application/base/baseEntity' import { BaseEntity } from '@/application/base/baseEntity'
import { ItemType, ItemRarity } from '@/application/enums' import { ItemRarity, ItemType } from '@/application/enums'
import type { UUID } from '@/application/types'
import { CharacterItem } from '@/entities/characterItem' import { CharacterItem } from '@/entities/characterItem'
import { Sprite } from '@/entities/sprite' import { Sprite } from '@/entities/sprite'
import { Collection, Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
export class BaseItem extends BaseEntity { export class BaseItem extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,13 +1,10 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { BaseEntity } from '@/application/base/baseEntity'
import { Collection, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import type { UUID } from '@/application/types' import type { UUID } from '@/application/types'
import type { MapEffect } from '@/entities/mapEffect' import type { MapEffect } from '@/entities/mapEffect'
import type { MapEventTile } from '@/entities/mapEventTile' import type { MapEventTile } from '@/entities/mapEventTile'
import type { PlacedMapObject } from '@/entities/placedMapObject' import type { PlacedMapObject } from '@/entities/placedMapObject'
import { Collection, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '@/application/base/baseEntity'
export class BaseMap extends BaseEntity { export class BaseMap extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,11 +1,8 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { BaseEntity } from '@/application/base/baseEntity'
import { ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
import type { UUID } from '@/application/types' import type { UUID } from '@/application/types'
import type { Map } from '@/entities/map' import type { Map } from '@/entities/map'
import { ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '@/application/base/baseEntity'
export class BaseMapEffect extends BaseEntity { export class BaseMapEffect extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,13 +1,10 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { BaseEntity } from '@/application/base/baseEntity'
import { Enum, ManyToOne, OneToOne, PrimaryKey, Property } from '@mikro-orm/core' import { MapEventTileType } from '@/application/enums'
import type { UUID } from '@/application/types' import type { UUID } from '@/application/types'
import type { Map } from '@/entities/map' import type { Map } from '@/entities/map'
import type { MapEventTileTeleport } from '@/entities/mapEventTileTeleport' import type { MapEventTileTeleport } from '@/entities/mapEventTileTeleport'
import { Enum, ManyToOne, OneToOne, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '@/application/base/baseEntity'
import { MapEventTileType } from '@/application/enums'
export class BaseMapEventTile extends BaseEntity { export class BaseMapEventTile extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,12 +1,9 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { BaseEntity } from '@/application/base/baseEntity'
import { ManyToOne, OneToOne, PrimaryKey, Property } from '@mikro-orm/core'
import type { UUID } from '@/application/types' import type { UUID } from '@/application/types'
import type { Map } from '@/entities/map' import type { Map } from '@/entities/map'
import type { MapEventTile } from '@/entities/mapEventTile' import type { MapEventTile } from '@/entities/mapEventTile'
import { ManyToOne, OneToOne, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '@/application/base/baseEntity'
export class BaseMapEventTileTeleport extends BaseEntity { export class BaseMapEventTileTeleport extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,10 +1,7 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { Entity, PrimaryKey, Property } from '@mikro-orm/core'
import type { UUID } from '@/application/types'
import { BaseEntity } from '@/application/base/baseEntity' import { BaseEntity } from '@/application/base/baseEntity'
import type { UUID } from '@/application/types'
import { Entity, PrimaryKey, Property } from '@mikro-orm/core'
export class BaseMapObject extends BaseEntity { export class BaseMapObject extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,11 +1,8 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { BaseEntity } from '@/application/base/baseEntity'
import { ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
import type { UUID } from '@/application/types' import type { UUID } from '@/application/types'
import type { User } from '@/entities/user' import type { User } from '@/entities/user'
import { ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '@/application/base/baseEntity'
export class BasePasswordResetToken extends BaseEntity { export class BasePasswordResetToken extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,12 +1,9 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { BaseEntity } from '@/application/base/baseEntity'
import { ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
import type { UUID } from '@/application/types' import type { UUID } from '@/application/types'
import type { Map } from '@/entities/map' import type { Map } from '@/entities/map'
import type { MapObject } from '@/entities/mapObject' import type { MapObject } from '@/entities/mapObject'
import { ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '@/application/base/baseEntity'
export class BasePlacedMapObject extends BaseEntity { export class BasePlacedMapObject extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,11 +1,8 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import type { UUID } from '@/application/types'
import { BaseEntity } from '@/application/base/baseEntity' import { BaseEntity } from '@/application/base/baseEntity'
import type { UUID } from '@/application/types'
import { SpriteAction } from '@/entities/spriteAction' import { SpriteAction } from '@/entities/spriteAction'
import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
export class BaseSprite extends BaseEntity { export class BaseSprite extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,11 +1,8 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { BaseEntity } from '@/application/base/baseEntity'
import { ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
import type { UUID } from '@/application/types' import type { UUID } from '@/application/types'
import type { Sprite } from '@/entities/sprite' import type { Sprite } from '@/entities/sprite'
import { ManyToOne, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '@/application/base/baseEntity'
export interface SpriteImage { export interface SpriteImage {
url: string url: string

View File

@ -1,10 +1,7 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { Entity, PrimaryKey, Property } from '@mikro-orm/core'
import type { UUID } from '@/application/types'
import { BaseEntity } from '@/application/base/baseEntity' import { BaseEntity } from '@/application/base/baseEntity'
import type { UUID } from '@/application/types'
import { Entity, PrimaryKey, Property } from '@mikro-orm/core'
export class BaseTile extends BaseEntity { export class BaseTile extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,13 +1,10 @@
import { randomUUID } from 'node:crypto' import { randomUUID } from 'node:crypto'
import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import bcrypt from 'bcryptjs'
import type { UUID } from '@/application/types'
import { BaseEntity } from '@/application/base/baseEntity' import { BaseEntity } from '@/application/base/baseEntity'
import type { UUID } from '@/application/types'
import { Character } from '@/entities/character' import { Character } from '@/entities/character'
import { PasswordResetToken } from '@/entities/passwordResetToken' import { PasswordResetToken } from '@/entities/passwordResetToken'
import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'
import bcrypt from 'bcryptjs'
export class BaseUser extends BaseEntity { export class BaseUser extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,6 +1,5 @@
import { Entity, PrimaryKey, Property } from '@mikro-orm/core'
import { BaseEntity } from '@/application/base/baseEntity' import { BaseEntity } from '@/application/base/baseEntity'
import { Entity, PrimaryKey, Property } from '@mikro-orm/core'
export class BaseWorld extends BaseEntity { export class BaseWorld extends BaseEntity {
@PrimaryKey() @PrimaryKey()

View File

@ -1,6 +1,5 @@
import { Entity } from '@mikro-orm/core'
import { BaseCharacter } from '@/entities/base/character' import { BaseCharacter } from '@/entities/base/character'
import { Entity } from '@mikro-orm/core'
@Entity() @Entity()
export class Character extends BaseCharacter {} export class Character extends BaseCharacter {}

View File

@ -1,6 +1,5 @@
import { Entity } from '@mikro-orm/core'
import { BaseCharacterEquipment } from '@/entities/base/characterEquipment' import { BaseCharacterEquipment } from '@/entities/base/characterEquipment'
import { Entity } from '@mikro-orm/core'
@Entity() @Entity()
export class CharacterEquipment extends BaseCharacterEquipment {} export class CharacterEquipment extends BaseCharacterEquipment {}

View File

@ -1,6 +1,5 @@
import { Entity } from '@mikro-orm/core'
import { BaseCharacterHair } from '@/entities/base/characterHair' import { BaseCharacterHair } from '@/entities/base/characterHair'
import { Entity } from '@mikro-orm/core'
@Entity() @Entity()
export class CharacterHair extends BaseCharacterHair { export class CharacterHair extends BaseCharacterHair {

View File

@ -1,6 +1,5 @@
import { Entity } from '@mikro-orm/core'
import { BaseCharacterItem } from '@/entities/base/characterItem' import { BaseCharacterItem } from '@/entities/base/characterItem'
import { Entity } from '@mikro-orm/core'
@Entity() @Entity()
export class CharacterItem extends BaseCharacterItem {} export class CharacterItem extends BaseCharacterItem {}

View File

@ -1,6 +1,5 @@
import { Entity } from '@mikro-orm/core'
import { BaseCharacterType } from '@/entities/base/characterType' import { BaseCharacterType } from '@/entities/base/characterType'
import { Entity } from '@mikro-orm/core'
@Entity() @Entity()
export class CharacterType extends BaseCharacterType { export class CharacterType extends BaseCharacterType {

View File

@ -1,6 +1,5 @@
import { Entity } from '@mikro-orm/core'
import { BaseChat } from '@/entities/base/chat' import { BaseChat } from '@/entities/base/chat'
import { Entity } from '@mikro-orm/core'
@Entity() @Entity()
export class Chat extends BaseChat {} export class Chat extends BaseChat {}

View File

@ -1,6 +1,5 @@
import { Entity } from '@mikro-orm/core'
import { BaseItem } from '@/entities/base/item' import { BaseItem } from '@/entities/base/item'
import { Entity } from '@mikro-orm/core'
@Entity() @Entity()
export class Item extends BaseItem {} export class Item extends BaseItem {}

View File

@ -1,6 +1,5 @@
import { Entity } from '@mikro-orm/core'
import { BaseMap } from '@/entities/base/map' import { BaseMap } from '@/entities/base/map'
import { Entity } from '@mikro-orm/core'
export type MapCacheT = ReturnType<Map['cache']> | {} export type MapCacheT = ReturnType<Map['cache']> | {}

View File

@ -1,6 +1,5 @@
import { Entity } from '@mikro-orm/core'
import { BaseMapEffect } from '@/entities/base/mapEffect' import { BaseMapEffect } from '@/entities/base/mapEffect'
import { Entity } from '@mikro-orm/core'
@Entity() @Entity()
export class MapEffect extends BaseMapEffect {} export class MapEffect extends BaseMapEffect {}

View File

@ -1,6 +1,5 @@
import { Entity } from '@mikro-orm/core'
import { BaseMapEventTile } from '@/entities/base/mapEventTile' import { BaseMapEventTile } from '@/entities/base/mapEventTile'
import { Entity } from '@mikro-orm/core'
@Entity() @Entity()
export class MapEventTile extends BaseMapEventTile {} export class MapEventTile extends BaseMapEventTile {}

View File

@ -1,6 +1,5 @@
import { Entity } from '@mikro-orm/core'
import { BaseMapEventTileTeleport } from '@/entities/base/mapEventTileTeleport' import { BaseMapEventTileTeleport } from '@/entities/base/mapEventTileTeleport'
import { Entity } from '@mikro-orm/core'
@Entity() @Entity()
export class MapEventTileTeleport extends BaseMapEventTileTeleport {} export class MapEventTileTeleport extends BaseMapEventTileTeleport {}

View File

@ -1,6 +1,5 @@
import { Entity } from '@mikro-orm/core'
import { BaseMapObject } from '@/entities/base/mapObject' import { BaseMapObject } from '@/entities/base/mapObject'
import { Entity } from '@mikro-orm/core'
@Entity() @Entity()
export class MapObject extends BaseMapObject { export class MapObject extends BaseMapObject {

View File

@ -1,6 +1,5 @@
import { Entity } from '@mikro-orm/core'
import { BasePasswordResetToken } from '@/entities/base/passwordResetToken' import { BasePasswordResetToken } from '@/entities/base/passwordResetToken'
import { Entity } from '@mikro-orm/core'
@Entity() @Entity()
export class PasswordResetToken extends BasePasswordResetToken {} export class PasswordResetToken extends BasePasswordResetToken {}

View File

@ -1,6 +1,5 @@
import { Entity } from '@mikro-orm/core'
import { BasePlacedMapObject } from '@/entities/base/placedMapObject' import { BasePlacedMapObject } from '@/entities/base/placedMapObject'
import { Entity } from '@mikro-orm/core'
@Entity() @Entity()
export class PlacedMapObject extends BasePlacedMapObject {} export class PlacedMapObject extends BasePlacedMapObject {}

View File

@ -1,6 +1,5 @@
import { Entity } from '@mikro-orm/core'
import { BaseSprite } from '@/entities/base/sprite' import { BaseSprite } from '@/entities/base/sprite'
import { Entity } from '@mikro-orm/core'
@Entity() @Entity()
export class Sprite extends BaseSprite { export class Sprite extends BaseSprite {

View File

@ -1,6 +1,5 @@
import { Entity } from '@mikro-orm/core'
import { BaseSpriteAction } from '@/entities/base/spriteAction' import { BaseSpriteAction } from '@/entities/base/spriteAction'
import { Entity } from '@mikro-orm/core'
@Entity() @Entity()
export class SpriteAction extends BaseSpriteAction {} export class SpriteAction extends BaseSpriteAction {}

View File

@ -1,6 +1,5 @@
import { Entity } from '@mikro-orm/core'
import { BaseTile } from '@/entities/base/tile' import { BaseTile } from '@/entities/base/tile'
import { Entity } from '@mikro-orm/core'
@Entity() @Entity()
export class Tile extends BaseTile { export class Tile extends BaseTile {

View File

@ -1,6 +1,5 @@
import { Entity } from '@mikro-orm/core'
import { BaseUser } from '@/entities/base/user' import { BaseUser } from '@/entities/base/user'
import { Entity } from '@mikro-orm/core'
@Entity() @Entity()
export class User extends BaseUser {} export class User extends BaseUser {}

View File

@ -1,6 +1,5 @@
import { Entity } from '@mikro-orm/core'
import { BaseWorld } from '@/entities/base/world' import { BaseWorld } from '@/entities/base/world'
import { Entity } from '@mikro-orm/core'
@Entity() @Entity()
export class World extends BaseWorld {} export class World extends BaseWorld {}

View File

@ -1,7 +1,6 @@
import type { UUID } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import type { UUID } from '@/application/types'
import MapManager from '@/managers/mapManager' import MapManager from '@/managers/mapManager'
import CharacterHairRepository from '@/repositories/characterHairRepository' import CharacterHairRepository from '@/repositories/characterHairRepository'
import CharacterRepository from '@/repositories/characterRepository' import CharacterRepository from '@/repositories/characterRepository'
@ -27,7 +26,7 @@ export default class CharacterConnectEvent extends BaseEvent {
return return
} }
const character = await this.characterRepository.getByUserAndId(this.socket.userId!, data.characterId) const character = await this.characterRepository.getByUserAndId(this.socket.userId, data.characterId)
if (!character) { if (!character) {
this.emitError('Character not found or does not belong to this user') this.emitError('Character not found or does not belong to this user')
@ -63,7 +62,7 @@ export default class CharacterConnectEvent extends BaseEvent {
} }
private async checkForActiveCharacters(): Promise<boolean> { private async checkForActiveCharacters(): Promise<boolean> {
const characters = await this.characterRepository.getByUserId(this.socket.userId!) const characters = await this.characterRepository.getByUserId(this.socket.userId)
return characters?.some((char) => MapManager.getCharacterById(char.id)) ?? false return characters?.some((char) => MapManager.getCharacterById(char.id)) ?? false
} }
} }

View File

@ -1,5 +1,3 @@
import { ZodError, z } from 'zod'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import { ZCharacterCreate } from '@/application/zodTypes' import { ZCharacterCreate } from '@/application/zodTypes'
@ -8,6 +6,7 @@ import CharacterRepository from '@/repositories/characterRepository'
import CharacterTypeRepository from '@/repositories/characterTypeRepository' import CharacterTypeRepository from '@/repositories/characterTypeRepository'
import MapRepository from '@/repositories/mapRepository' import MapRepository from '@/repositories/mapRepository'
import UserRepository from '@/repositories/userRepository' import UserRepository from '@/repositories/userRepository'
import { z, ZodError } from 'zod'
const MAX_CHARACTERS = 4 const MAX_CHARACTERS = 4
@ -33,7 +32,7 @@ export default class CharacterCreateEvent extends BaseEvent {
} }
private async createCharacter(data: z.infer<typeof ZCharacterCreate>): Promise<void> { private async createCharacter(data: z.infer<typeof ZCharacterCreate>): Promise<void> {
const user = await this.userRepository.getById(this.socket.userId!) const user = await this.userRepository.getById(this.socket.userId)
if (!user) { if (!user) {
throw new Error('You are not logged in') throw new Error('You are not logged in')
} }

View File

@ -1,7 +1,6 @@
import type { UUID } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import type { UUID } from '@/application/types'
import { Character } from '@/entities/character' import { Character } from '@/entities/character'
import CharacterRepository from '@/repositories/characterRepository' import CharacterRepository from '@/repositories/characterRepository'
@ -21,8 +20,8 @@ export default class CharacterDeleteEvent extends BaseEvent {
private async handleEvent(data: TypePayload, callback: (response: TypeResponse) => void): Promise<any> { private async handleEvent(data: TypePayload, callback: (response: TypeResponse) => void): Promise<any> {
try { try {
const characterRepository = new CharacterRepository() const characterRepository = new CharacterRepository()
await (await characterRepository.getByUserAndId(this.socket.userId!, data.characterId))?.delete() await (await characterRepository.getByUserAndId(this.socket.userId, data.characterId))?.delete()
const characters: Character[] = await characterRepository.getByUserId(this.socket.userId!) const characters: Character[] = await characterRepository.getByUserId(this.socket.userId)
this.socket.emit(SocketEvent.CHARACTER_LIST, characters) this.socket.emit(SocketEvent.CHARACTER_LIST, characters)
} catch (error: any) { } catch (error: any) {

View File

@ -11,7 +11,7 @@ export default class CharacterListEvent extends BaseEvent {
private async handleEvent(data: any): Promise<void> { private async handleEvent(data: any): Promise<void> {
try { try {
const characterRepository = new CharacterRepository() const characterRepository = new CharacterRepository()
let characters: Character[] = await characterRepository.getByUserId(this.socket.userId!) let characters: Character[] = await characterRepository.getByUserId(this.socket.userId)
this.socket.emit(SocketEvent.CHARACTER_LIST, characters) this.socket.emit(SocketEvent.CHARACTER_LIST, characters)
} catch (error: any) { } catch (error: any) {

View File

@ -1,7 +1,6 @@
import type { UUID } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import type { UUID } from '@/application/types'
import MapManager from '@/managers/mapManager' import MapManager from '@/managers/mapManager'
import MapRepository from '@/repositories/mapRepository' import MapRepository from '@/repositories/mapRepository'
import TeleportService from '@/services/characterTeleportService' import TeleportService from '@/services/characterTeleportService'

View File

@ -19,7 +19,7 @@ export default class ChatMessageEvent extends BaseEvent {
return callback(false) return callback(false)
} }
const mapCharacter = MapManager.getCharacterById(this.socket.characterId!) const mapCharacter = MapManager.getCharacterById(this.socket.characterId)
if (!mapCharacter) { if (!mapCharacter) {
this.logger.error('chat:message error', 'Character not found') this.logger.error('chat:message error', 'Character not found')
return callback(false) return callback(false)

View File

@ -16,7 +16,7 @@ export default class DisconnectEvent extends BaseEvent {
this.io.emit(SocketEvent.USER_DISCONNECT, this.socket.userId) this.io.emit(SocketEvent.USER_DISCONNECT, this.socket.userId)
const mapCharacter = MapManager.getCharacterById(this.socket.characterId!) const mapCharacter = MapManager.getCharacterById(this.socket.characterId)
if (!mapCharacter) { if (!mapCharacter) {
this.logger.info('User disconnected but had no character set') this.logger.info('User disconnected but had no character set')
return return

View File

@ -1,7 +1,6 @@
import type { UUID } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import type { UUID } from '@/application/types'
import CharacterHairRepository from '@/repositories/characterHairRepository' import CharacterHairRepository from '@/repositories/characterHairRepository'
interface IPayload { interface IPayload {

View File

@ -1,8 +1,6 @@
import type { UUID } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { CharacterGender, SocketEvent } from '@/application/enums'
import { CharacterGender } from '@/application/enums' import type { UUID } from '@/application/types'
import CharacterHairRepository from '@/repositories/characterHairRepository' import CharacterHairRepository from '@/repositories/characterHairRepository'
import SpriteRepository from '@/repositories/spriteRepository' import SpriteRepository from '@/repositories/spriteRepository'

View File

@ -1,7 +1,6 @@
import type { UUID } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import type { UUID } from '@/application/types'
import CharacterTypeRepository from '@/repositories/characterTypeRepository' import CharacterTypeRepository from '@/repositories/characterTypeRepository'
interface IPayload { interface IPayload {

View File

@ -1,8 +1,6 @@
import type { UUID } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { CharacterGender, CharacterRace, SocketEvent } from '@/application/enums'
import { CharacterGender, CharacterRace } from '@/application/enums' import type { UUID } from '@/application/types'
import CharacterTypeRepository from '@/repositories/characterTypeRepository' import CharacterTypeRepository from '@/repositories/characterTypeRepository'
import SpriteRepository from '@/repositories/spriteRepository' import SpriteRepository from '@/repositories/spriteRepository'

View File

@ -1,6 +1,5 @@
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { ItemRarity, ItemType, SocketEvent } from '@/application/enums'
import { ItemRarity, ItemType } from '@/application/enums'
import { Item } from '@/entities/item' import { Item } from '@/entities/item'
import SpriteRepository from '@/repositories/spriteRepository' import SpriteRepository from '@/repositories/spriteRepository'

View File

@ -1,7 +1,6 @@
import type { UUID } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import type { UUID } from '@/application/types'
import ItemRepository from '@/repositories/itemRepository' import ItemRepository from '@/repositories/itemRepository'
interface IPayload { interface IPayload {

View File

@ -1,8 +1,6 @@
import type { UUID } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { ItemRarity, ItemType, SocketEvent } from '@/application/enums'
import { ItemType, ItemRarity } from '@/application/enums' import type { UUID } from '@/application/types'
import ItemRepository from '@/repositories/itemRepository' import ItemRepository from '@/repositories/itemRepository'
import SpriteRepository from '@/repositories/spriteRepository' import SpriteRepository from '@/repositories/spriteRepository'

View File

@ -1,10 +1,8 @@
import fs from 'fs' import fs from 'fs'
import type { UUID } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import Storage from '@/application/storage' import Storage from '@/application/storage'
import type { UUID } from '@/application/types'
import MapObjectRepository from '@/repositories/mapObjectRepository' import MapObjectRepository from '@/repositories/mapObjectRepository'
interface IPayload { interface IPayload {

View File

@ -1,7 +1,6 @@
import type { UUID } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import type { UUID } from '@/application/types'
import MapObjectRepository from '@/repositories/mapObjectRepository' import MapObjectRepository from '@/repositories/mapObjectRepository'
type Payload = { type Payload = {

View File

@ -1,12 +1,10 @@
import fs from 'fs/promises' import fs from 'fs/promises'
import { writeFile } from 'node:fs/promises' import { writeFile } from 'node:fs/promises'
import sharp from 'sharp'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import Storage from '@/application/storage' import Storage from '@/application/storage'
import { MapObject } from '@/entities/mapObject' import { MapObject } from '@/entities/mapObject'
import sharp from 'sharp'
interface IObjectData { interface IObjectData {
[key: string]: Buffer [key: string]: Buffer

View File

@ -1,7 +1,6 @@
import type { UUID } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import type { UUID } from '@/application/types'
import { Sprite } from '@/entities/sprite' import { Sprite } from '@/entities/sprite'
import SpriteRepository from '@/repositories/spriteRepository' import SpriteRepository from '@/repositories/spriteRepository'

View File

@ -1,5 +1,4 @@
import fs from 'fs/promises' import fs from 'fs/promises'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import Storage from '@/application/storage' import Storage from '@/application/storage'

View File

@ -1,10 +1,8 @@
import fs from 'fs' import fs from 'fs'
import type { UUID } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import Storage from '@/application/storage' import Storage from '@/application/storage'
import type { UUID } from '@/application/types'
import SpriteRepository from '@/repositories/spriteRepository' import SpriteRepository from '@/repositories/spriteRepository'
type Payload = { type Payload = {

View File

@ -1,13 +1,10 @@
import fs from 'fs' import fs from 'fs'
import sharp from 'sharp'
import type { UUID } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import type { UUID } from '@/application/types'
import { SpriteAction } from '@/entities/spriteAction' import { SpriteAction } from '@/entities/spriteAction'
import SpriteRepository from '@/repositories/spriteRepository' import SpriteRepository from '@/repositories/spriteRepository'
import sharp from 'sharp'
interface SpriteImage { interface SpriteImage {
url: string url: string

View File

@ -1,10 +1,8 @@
import fs from 'fs/promises' import fs from 'fs/promises'
import type { UUID } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import Storage from '@/application/storage' import Storage from '@/application/storage'
import type { UUID } from '@/application/types'
import TileRepository from '@/repositories/tileRepository' import TileRepository from '@/repositories/tileRepository'
type Payload = { type Payload = {

View File

@ -1,7 +1,6 @@
import type { UUID } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import type { UUID } from '@/application/types'
import TileRepository from '@/repositories/tileRepository' import TileRepository from '@/repositories/tileRepository'
type Payload = { type Payload = {

View File

@ -1,6 +1,5 @@
import fs from 'fs/promises' import fs from 'fs/promises'
import { writeFile } from 'node:fs/promises' import { writeFile } from 'node:fs/promises'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import Storage from '@/application/storage' import Storage from '@/application/storage'

View File

@ -1,7 +1,6 @@
import type { MapCacheT } from '@/entities/map'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import type { MapCacheT } from '@/entities/map'
import { Map } from '@/entities/map' import { Map } from '@/entities/map'
type Payload = { type Payload = {

View File

@ -1,7 +1,6 @@
import type { UUID } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import type { UUID } from '@/application/types'
import MapRepository from '@/repositories/mapRepository' import MapRepository from '@/repositories/mapRepository'
type Payload = { type Payload = {

View File

@ -1,7 +1,6 @@
import type { UUID } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import type { UUID } from '@/application/types'
import { Map } from '@/entities/map' import { Map } from '@/entities/map'
import MapRepository from '@/repositories/mapRepository' import MapRepository from '@/repositories/mapRepository'

View File

@ -1,8 +1,6 @@
import type { UUID } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { MapEventTileType, SocketEvent } from '@/application/enums'
import { MapEventTileType } from '@/application/enums' import type { UUID } from '@/application/types'
import { Map } from '@/entities/map' import { Map } from '@/entities/map'
import { MapEffect } from '@/entities/mapEffect' import { MapEffect } from '@/entities/mapEffect'
import { MapEventTile } from '@/entities/mapEventTile' import { MapEventTile } from '@/entities/mapEventTile'
@ -87,7 +85,7 @@ export default class MapUpdateEvent extends BaseEvent {
if (tile.teleport) { if (tile.teleport) {
const teleport = new MapEventTileTeleport() const teleport = new MapEventTileTeleport()
.setToMap((await mapRepository.getById(tile.teleport.toMap.id))!) .setToMap(await mapRepository.getById(tile.teleport.toMap.id))
.setToPositionX(tile.teleport.toPositionX) .setToPositionX(tile.teleport.toPositionX)
.setToPositionY(tile.teleport.toPositionY) .setToPositionY(tile.teleport.toPositionY)
.setToRotation(tile.teleport.toRotation) .setToRotation(tile.teleport.toRotation)
@ -117,7 +115,7 @@ export default class MapUpdateEvent extends BaseEvent {
// Reload map from database to get fresh data // Reload map from database to get fresh data
map = await mapRepository.getById(data.mapId) map = await mapRepository.getById(data.mapId)
await mapRepository.getEntityManager().populate(map!, mapRepository.POPULATE_MAP_EDITOR as any) await mapRepository.getEntityManager().populate(map, mapRepository.POPULATE_MAP_EDITOR as any)
if (!map) { if (!map) {
this.logger.info(`User ${character!.getId()} tried to update map ${data.mapId} but it does not exist after update.`) this.logger.info(`User ${character!.getId()} tried to update map ${data.mapId} but it does not exist after update.`)

View File

@ -12,7 +12,7 @@ export default class CharacterMove extends BaseEvent {
private async handleEvent(data: any, callback: (response: any) => void): Promise<void> { private async handleEvent(data: any, callback: (response: any) => void): Promise<void> {
try { try {
console.log('attack', this.socket.characterId) console.log('attack', this.socket.characterId)
await this.characterAttackService.attack(this.socket.characterId!) await this.characterAttackService.attack(this.socket.characterId)
} catch (error) { } catch (error) {
this.logger.error('map:character:attack error', error) this.logger.error('map:character:attack error', error)
return callback(false) return callback(false)

View File

@ -1,7 +1,6 @@
import type { MapEventTileWithTeleport } from '@/application/types'
import { BaseEvent } from '@/application/base/baseEvent' import { BaseEvent } from '@/application/base/baseEvent'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import type { MapEventTileWithTeleport } from '@/application/types'
import MapManager from '@/managers/mapManager' import MapManager from '@/managers/mapManager'
import MapCharacter from '@/models/mapCharacter' import MapCharacter from '@/models/mapCharacter'
import MapEventTileRepository from '@/repositories/mapEventTileRepository' import MapEventTileRepository from '@/repositories/mapEventTileRepository'
@ -17,7 +16,7 @@ export default class CharacterMove extends BaseEvent {
} }
private async handleEvent({ positionX, positionY }: { positionX: number; positionY: number }): Promise<void> { private async handleEvent({ positionX, positionY }: { positionX: number; positionY: number }): Promise<void> {
const mapCharacter = MapManager.getCharacterById(this.socket.characterId!) const mapCharacter = MapManager.getCharacterById(this.socket.characterId)
if (!mapCharacter?.getCharacter()) { if (!mapCharacter?.getCharacter()) {
this.logger.error('map:character:move error: Character not found or not initialized') this.logger.error('map:character:move error: Character not found or not initialized')
return return
@ -116,7 +115,7 @@ export default class CharacterMove extends BaseEvent {
private async handleTeleportMapEventTile(mapEventTile: MapEventTileWithTeleport): Promise<void> { private async handleTeleportMapEventTile(mapEventTile: MapEventTileWithTeleport): Promise<void> {
if (mapEventTile.getTeleport()) { if (mapEventTile.getTeleport()) {
await TeleportService.teleportCharacter(this.socket.characterId!, { await TeleportService.teleportCharacter(this.socket.characterId, {
targetMapId: mapEventTile.getTeleport()!.getToMap().getId(), targetMapId: mapEventTile.getTeleport()!.getToMap().getId(),
targetX: mapEventTile.getTeleport()!.getToPositionX(), targetX: mapEventTile.getTeleport()!.getToPositionX(),
targetY: mapEventTile.getTeleport()!.getToPositionY(), targetY: mapEventTile.getTeleport()!.getToPositionY(),

View File

@ -1,8 +1,6 @@
import { Server as SocketServer } from 'socket.io'
import type { TSocket } from '@/application/types'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import type { TSocket } from '@/application/types'
import { Server as SocketServer } from 'socket.io'
export default class SomeJob { export default class SomeJob {
constructor(private params: any) {} constructor(private params: any) {}

View File

@ -1,10 +1,9 @@
import { Server } from 'socket.io'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import Logger, { LoggerType } from '@/application/logger' import Logger, { LoggerType } from '@/application/logger'
import { World } from '@/entities/world' import { World } from '@/entities/world'
import SocketManager from '@/managers/socketManager' import SocketManager from '@/managers/socketManager'
import WorldRepository from '@/repositories/worldRepository' import WorldRepository from '@/repositories/worldRepository'
import { Server } from 'socket.io'
class DateManager { class DateManager {
private static readonly CONFIG = { private static readonly CONFIG = {

View File

@ -1,16 +1,14 @@
import fs from 'fs' import fs from 'fs'
import { createServer as httpServer, Server as HTTPServer } from 'http' import { createServer as httpServer, Server as HTTPServer } from 'http'
import { createServer as httpsServer, Server as HTTPSServer } from 'https' import { createServer as httpsServer, Server as HTTPSServer } from 'https'
import cors from 'cors'
import express, { type Application } from 'express'
import config from '@/application/config' import config from '@/application/config'
import Logger, { LoggerType } from '@/application/logger.js' import Logger, { LoggerType } from '@/application/logger.js'
import { AuthController } from '@/controllers/auth' import { AuthController } from '@/controllers/auth'
import { AvatarController } from '@/controllers/avatar' import { AvatarController } from '@/controllers/avatar'
import { CacheController } from '@/controllers/cache' import { CacheController } from '@/controllers/cache'
import { TexturesController } from '@/controllers/textures' import { TexturesController } from '@/controllers/textures'
import cors from 'cors'
import express, { type Application } from 'express'
/** /**
* HTTP manager * HTTP manager

View File

@ -1,6 +1,5 @@
import type { UUID } from '@/application/types'
import Logger, { LoggerType } from '@/application/logger' import Logger, { LoggerType } from '@/application/logger'
import type { UUID } from '@/application/types'
import { Map } from '@/entities/map' import { Map } from '@/entities/map'
import LoadedMap from '@/models/loadedMap' import LoadedMap from '@/models/loadedMap'
import MapCharacter from '@/models/mapCharacter' import MapCharacter from '@/models/mapCharacter'

View File

@ -1,15 +1,12 @@
import fs from 'fs' import fs from 'fs'
import { Job, Queue, Worker } from 'bullmq'
import IORedis from 'ioredis'
import { Server as SocketServer } from 'socket.io'
import type { TSocket } from '@/application/types'
import config from '@/application/config' import config from '@/application/config'
import Logger, { LoggerType } from '@/application/logger' import Logger, { LoggerType } from '@/application/logger'
import Storage from '@/application/storage' import Storage from '@/application/storage'
import type { TSocket } from '@/application/types'
import SocketManager from '@/managers/socketManager' import SocketManager from '@/managers/socketManager'
import { Job, Queue, Worker } from 'bullmq'
import IORedis from 'ioredis'
import { Server as SocketServer } from 'socket.io'
class QueueManager { class QueueManager {
private connection!: IORedis.Redis private connection!: IORedis.Redis

View File

@ -1,15 +1,12 @@
import fs from 'fs' import fs from 'fs'
import { Server as HTTPServer } from 'http' import { Server as HTTPServer } from 'http'
import { pathToFileURL } from 'url' import { pathToFileURL } from 'url'
import { Server as SocketServer } from 'socket.io'
import type { TSocket, UUID } from '@/application/types'
import type { Application } from 'express'
import Logger, { LoggerType } from '@/application/logger' import Logger, { LoggerType } from '@/application/logger'
import Storage from '@/application/storage' import Storage from '@/application/storage'
import type { TSocket, UUID } from '@/application/types'
import { Authentication } from '@/middleware/authentication' import { Authentication } from '@/middleware/authentication'
import type { Application } from 'express'
import { Server as SocketServer } from 'socket.io'
class SocketManager { class SocketManager {
private io: SocketServer | null = null private io: SocketServer | null = null

View File

@ -1,10 +1,9 @@
import { Server } from 'socket.io'
import { SocketEvent } from '@/application/enums' import { SocketEvent } from '@/application/enums'
import Logger, { LoggerType } from '@/application/logger' import Logger, { LoggerType } from '@/application/logger'
import { World } from '@/entities/world' import { World } from '@/entities/world'
import SocketManager from '@/managers/socketManager' import SocketManager from '@/managers/socketManager'
import WorldRepository from '@/repositories/worldRepository' import WorldRepository from '@/repositories/worldRepository'
import { Server } from 'socket.io'
type WeatherState = { type WeatherState = {
rainPercentage: number rainPercentage: number

View File

@ -1,9 +1,7 @@
import jwt from 'jsonwebtoken'
import type { TSocket } from '@/application/types'
import config from '@/application/config' import config from '@/application/config'
import Logger, { LoggerType } from '@/application/logger' import Logger, { LoggerType } from '@/application/logger'
import type { TSocket } from '@/application/types'
import jwt from 'jsonwebtoken'
class SocketAuthenticator { class SocketAuthenticator {
private socket: TSocket private socket: TSocket

View File

@ -6,9 +6,7 @@ export class Migration20250207212301 extends Migration {
`create table \`map\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`width\` int not null default 10, \`height\` int not null default 10, \`tiles\` json null, \`pvp\` tinyint(1) not null default false, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;` `create table \`map\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`width\` int not null default 10, \`height\` int not null default 10, \`tiles\` json null, \`pvp\` tinyint(1) not null default false, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`
) )
this.addSql( this.addSql(`create table \`map_effect\` (\`id\` varchar(255) not null, \`map_id\` varchar(255) not null, \`effect\` varchar(255) not null, \`strength\` int not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`)
`create table \`map_effect\` (\`id\` varchar(255) not null, \`map_id\` varchar(255) not null, \`effect\` varchar(255) not null, \`strength\` int not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`
)
this.addSql(`alter table \`map_effect\` add index \`map_effect_map_id_index\`(\`map_id\`);`) this.addSql(`alter table \`map_effect\` add index \`map_effect_map_id_index\`(\`map_id\`);`)
this.addSql( this.addSql(
@ -33,9 +31,7 @@ export class Migration20250207212301 extends Migration {
this.addSql(`alter table \`placed_map_object\` add index \`placed_map_object_map_id_index\`(\`map_id\`);`) this.addSql(`alter table \`placed_map_object\` add index \`placed_map_object_map_id_index\`(\`map_id\`);`)
this.addSql(`alter table \`placed_map_object\` add index \`placed_map_object_map_object_id_index\`(\`map_object_id\`);`) this.addSql(`alter table \`placed_map_object\` add index \`placed_map_object_map_object_id_index\`(\`map_object_id\`);`)
this.addSql( this.addSql(`create table \`sprite\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`)
`create table \`sprite\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`
)
this.addSql( this.addSql(
`create table \`item\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`description\` varchar(255) not null default '', \`item_type\` enum('WEAPON', 'HELMET', 'CHEST', 'LEGS', 'BOOTS', 'GLOVES', 'RING', 'NECKLACE') not null, \`stackable\` tinyint(1) not null default false, \`rarity\` enum('COMMON', 'UNCOMMON', 'RARE', 'EPIC', 'LEGENDARY') not null default 'COMMON', \`sprite_id\` varchar(255) null, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;` `create table \`item\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`description\` varchar(255) not null default '', \`item_type\` enum('WEAPON', 'HELMET', 'CHEST', 'LEGS', 'BOOTS', 'GLOVES', 'RING', 'NECKLACE') not null, \`stackable\` tinyint(1) not null default false, \`rarity\` enum('COMMON', 'UNCOMMON', 'RARE', 'EPIC', 'LEGENDARY') not null default 'COMMON', \`sprite_id\` varchar(255) null, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`
@ -57,19 +53,13 @@ export class Migration20250207212301 extends Migration {
) )
this.addSql(`alter table \`sprite_action\` add index \`sprite_action_sprite_id_index\`(\`sprite_id\`);`) this.addSql(`alter table \`sprite_action\` add index \`sprite_action_sprite_id_index\`(\`sprite_id\`);`)
this.addSql( this.addSql(`create table \`tile\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`tags\` json null, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`)
`create table \`tile\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`tags\` json null, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`
)
this.addSql( this.addSql(`create table \`user\` (\`id\` varchar(255) not null, \`username\` varchar(255) not null, \`email\` varchar(255) not null, \`password\` varchar(255) not null, \`online\` tinyint(1) not null default false, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`)
`create table \`user\` (\`id\` varchar(255) not null, \`username\` varchar(255) not null, \`email\` varchar(255) not null, \`password\` varchar(255) not null, \`online\` tinyint(1) not null default false, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`
)
this.addSql(`alter table \`user\` add unique \`user_username_unique\`(\`username\`);`) this.addSql(`alter table \`user\` add unique \`user_username_unique\`(\`username\`);`)
this.addSql(`alter table \`user\` add unique \`user_email_unique\`(\`email\`);`) this.addSql(`alter table \`user\` add unique \`user_email_unique\`(\`email\`);`)
this.addSql( this.addSql(`create table \`password_reset_token\` (\`id\` varchar(255) not null, \`user_id\` varchar(255) not null, \`token\` varchar(255) not null, \`created_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`)
`create table \`password_reset_token\` (\`id\` varchar(255) not null, \`user_id\` varchar(255) not null, \`token\` varchar(255) not null, \`created_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`
)
this.addSql(`alter table \`password_reset_token\` add index \`password_reset_token_user_id_index\`(\`user_id\`);`) this.addSql(`alter table \`password_reset_token\` add index \`password_reset_token_user_id_index\`(\`user_id\`);`)
this.addSql(`alter table \`password_reset_token\` add unique \`password_reset_token_token_unique\`(\`token\`);`) this.addSql(`alter table \`password_reset_token\` add unique \`password_reset_token_token_unique\`(\`token\`);`)
@ -82,15 +72,11 @@ export class Migration20250207212301 extends Migration {
this.addSql(`alter table \`character\` add index \`character_character_type_id_index\`(\`character_type_id\`);`) this.addSql(`alter table \`character\` add index \`character_character_type_id_index\`(\`character_type_id\`);`)
this.addSql(`alter table \`character\` add index \`character_character_hair_id_index\`(\`character_hair_id\`);`) this.addSql(`alter table \`character\` add index \`character_character_hair_id_index\`(\`character_hair_id\`);`)
this.addSql( this.addSql(`create table \`chat\` (\`id\` varchar(255) not null, \`character_id\` varchar(255) not null, \`map_id\` varchar(255) not null, \`message\` varchar(255) not null, \`created_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`)
`create table \`chat\` (\`id\` varchar(255) not null, \`character_id\` varchar(255) not null, \`map_id\` varchar(255) not null, \`message\` varchar(255) not null, \`created_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`
)
this.addSql(`alter table \`chat\` add index \`chat_character_id_index\`(\`character_id\`);`) this.addSql(`alter table \`chat\` add index \`chat_character_id_index\`(\`character_id\`);`)
this.addSql(`alter table \`chat\` add index \`chat_map_id_index\`(\`map_id\`);`) this.addSql(`alter table \`chat\` add index \`chat_map_id_index\`(\`map_id\`);`)
this.addSql( this.addSql(`create table \`character_item\` (\`id\` varchar(255) not null, \`character_id\` varchar(255) not null, \`item_id\` varchar(255) not null, \`quantity\` int not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`)
`create table \`character_item\` (\`id\` varchar(255) not null, \`character_id\` varchar(255) not null, \`item_id\` varchar(255) not null, \`quantity\` int not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`
)
this.addSql(`alter table \`character_item\` add index \`character_item_character_id_index\`(\`character_id\`);`) this.addSql(`alter table \`character_item\` add index \`character_item_character_id_index\`(\`character_id\`);`)
this.addSql(`alter table \`character_item\` add index \`character_item_item_id_index\`(\`item_id\`);`) this.addSql(`alter table \`character_item\` add index \`character_item_item_id_index\`(\`item_id\`);`)
@ -100,28 +86,18 @@ export class Migration20250207212301 extends Migration {
this.addSql(`alter table \`character_equipment\` add index \`character_equipment_character_id_index\`(\`character_id\`);`) this.addSql(`alter table \`character_equipment\` add index \`character_equipment_character_id_index\`(\`character_id\`);`)
this.addSql(`alter table \`character_equipment\` add index \`character_equipment_character_item_id_index\`(\`character_item_id\`);`) this.addSql(`alter table \`character_equipment\` add index \`character_equipment_character_item_id_index\`(\`character_item_id\`);`)
this.addSql( this.addSql(`create table \`world\` (\`date\` datetime not null, \`rain_percentage\` int not null default 0, \`fog_density\` int not null default 0, primary key (\`date\`)) default character set utf8mb4 engine = InnoDB;`)
`create table \`world\` (\`date\` datetime not null, \`rain_percentage\` int not null default 0, \`fog_density\` int not null default 0, primary key (\`date\`)) default character set utf8mb4 engine = InnoDB;`
)
this.addSql(`alter table \`map_effect\` add constraint \`map_effect_map_id_foreign\` foreign key (\`map_id\`) references \`map\` (\`id\`) on update cascade on delete cascade;`) this.addSql(`alter table \`map_effect\` add constraint \`map_effect_map_id_foreign\` foreign key (\`map_id\`) references \`map\` (\`id\`) on update cascade on delete cascade;`)
this.addSql(`alter table \`map_event_tile\` add constraint \`map_event_tile_map_id_foreign\` foreign key (\`map_id\`) references \`map\` (\`id\`) on update cascade on delete cascade;`) this.addSql(`alter table \`map_event_tile\` add constraint \`map_event_tile_map_id_foreign\` foreign key (\`map_id\`) references \`map\` (\`id\`) on update cascade on delete cascade;`)
this.addSql( this.addSql(`alter table \`map_event_tile\` add constraint \`map_event_tile_teleport_id_foreign\` foreign key (\`teleport_id\`) references \`map_event_tile_teleport\` (\`id\`) on update cascade on delete set null;`)
`alter table \`map_event_tile\` add constraint \`map_event_tile_teleport_id_foreign\` foreign key (\`teleport_id\`) references \`map_event_tile_teleport\` (\`id\`) on update cascade on delete set null;`
)
this.addSql( this.addSql(`alter table \`map_event_tile_teleport\` add constraint \`map_event_tile_teleport_map_event_tile_id_foreign\` foreign key (\`map_event_tile_id\`) references \`map_event_tile\` (\`id\`) on update cascade on delete cascade;`)
`alter table \`map_event_tile_teleport\` add constraint \`map_event_tile_teleport_map_event_tile_id_foreign\` foreign key (\`map_event_tile_id\`) references \`map_event_tile\` (\`id\`) on update cascade on delete cascade;` this.addSql(`alter table \`map_event_tile_teleport\` add constraint \`map_event_tile_teleport_to_map_id_foreign\` foreign key (\`to_map_id\`) references \`map\` (\`id\`) on update cascade on delete cascade;`)
)
this.addSql(
`alter table \`map_event_tile_teleport\` add constraint \`map_event_tile_teleport_to_map_id_foreign\` foreign key (\`to_map_id\`) references \`map\` (\`id\`) on update cascade on delete cascade;`
)
this.addSql(`alter table \`placed_map_object\` add constraint \`placed_map_object_map_id_foreign\` foreign key (\`map_id\`) references \`map\` (\`id\`) on update cascade on delete cascade;`) this.addSql(`alter table \`placed_map_object\` add constraint \`placed_map_object_map_id_foreign\` foreign key (\`map_id\`) references \`map\` (\`id\`) on update cascade on delete cascade;`)
this.addSql( this.addSql(`alter table \`placed_map_object\` add constraint \`placed_map_object_map_object_id_foreign\` foreign key (\`map_object_id\`) references \`map_object\` (\`id\`) on update cascade on delete cascade;`)
`alter table \`placed_map_object\` add constraint \`placed_map_object_map_object_id_foreign\` foreign key (\`map_object_id\`) references \`map_object\` (\`id\`) on update cascade on delete cascade;`
)
this.addSql(`alter table \`item\` add constraint \`item_sprite_id_foreign\` foreign key (\`sprite_id\`) references \`sprite\` (\`id\`) on update cascade on delete set null;`) this.addSql(`alter table \`item\` add constraint \`item_sprite_id_foreign\` foreign key (\`sprite_id\`) references \`sprite\` (\`id\`) on update cascade on delete set null;`)
@ -131,32 +107,20 @@ export class Migration20250207212301 extends Migration {
this.addSql(`alter table \`sprite_action\` add constraint \`sprite_action_sprite_id_foreign\` foreign key (\`sprite_id\`) references \`sprite\` (\`id\`) on update cascade on delete cascade;`) this.addSql(`alter table \`sprite_action\` add constraint \`sprite_action_sprite_id_foreign\` foreign key (\`sprite_id\`) references \`sprite\` (\`id\`) on update cascade on delete cascade;`)
this.addSql( this.addSql(`alter table \`password_reset_token\` add constraint \`password_reset_token_user_id_foreign\` foreign key (\`user_id\`) references \`user\` (\`id\`) on update cascade on delete cascade;`)
`alter table \`password_reset_token\` add constraint \`password_reset_token_user_id_foreign\` foreign key (\`user_id\`) references \`user\` (\`id\`) on update cascade on delete cascade;`
)
this.addSql(`alter table \`character\` add constraint \`character_user_id_foreign\` foreign key (\`user_id\`) references \`user\` (\`id\`) on update cascade on delete cascade;`) this.addSql(`alter table \`character\` add constraint \`character_user_id_foreign\` foreign key (\`user_id\`) references \`user\` (\`id\`) on update cascade on delete cascade;`)
this.addSql(`alter table \`character\` add constraint \`character_map_id_foreign\` foreign key (\`map_id\`) references \`map\` (\`id\`) on update cascade;`) this.addSql(`alter table \`character\` add constraint \`character_map_id_foreign\` foreign key (\`map_id\`) references \`map\` (\`id\`) on update cascade;`)
this.addSql( this.addSql(`alter table \`character\` add constraint \`character_character_type_id_foreign\` foreign key (\`character_type_id\`) references \`character_type\` (\`id\`) on update cascade on delete set null;`)
`alter table \`character\` add constraint \`character_character_type_id_foreign\` foreign key (\`character_type_id\`) references \`character_type\` (\`id\`) on update cascade on delete set null;` this.addSql(`alter table \`character\` add constraint \`character_character_hair_id_foreign\` foreign key (\`character_hair_id\`) references \`character_hair\` (\`id\`) on update cascade on delete set null;`)
)
this.addSql(
`alter table \`character\` add constraint \`character_character_hair_id_foreign\` foreign key (\`character_hair_id\`) references \`character_hair\` (\`id\`) on update cascade on delete set null;`
)
this.addSql(`alter table \`chat\` add constraint \`chat_character_id_foreign\` foreign key (\`character_id\`) references \`character\` (\`id\`) on update cascade on delete cascade;`) this.addSql(`alter table \`chat\` add constraint \`chat_character_id_foreign\` foreign key (\`character_id\`) references \`character\` (\`id\`) on update cascade on delete cascade;`)
this.addSql(`alter table \`chat\` add constraint \`chat_map_id_foreign\` foreign key (\`map_id\`) references \`map\` (\`id\`) on update cascade on delete cascade;`) this.addSql(`alter table \`chat\` add constraint \`chat_map_id_foreign\` foreign key (\`map_id\`) references \`map\` (\`id\`) on update cascade on delete cascade;`)
this.addSql( this.addSql(`alter table \`character_item\` add constraint \`character_item_character_id_foreign\` foreign key (\`character_id\`) references \`character\` (\`id\`) on update cascade on delete cascade;`)
`alter table \`character_item\` add constraint \`character_item_character_id_foreign\` foreign key (\`character_id\`) references \`character\` (\`id\`) on update cascade on delete cascade;`
)
this.addSql(`alter table \`character_item\` add constraint \`character_item_item_id_foreign\` foreign key (\`item_id\`) references \`item\` (\`id\`) on update cascade on delete cascade;`) this.addSql(`alter table \`character_item\` add constraint \`character_item_item_id_foreign\` foreign key (\`item_id\`) references \`item\` (\`id\`) on update cascade on delete cascade;`)
this.addSql( this.addSql(`alter table \`character_equipment\` add constraint \`character_equipment_character_id_foreign\` foreign key (\`character_id\`) references \`character\` (\`id\`) on update cascade on delete cascade;`)
`alter table \`character_equipment\` add constraint \`character_equipment_character_id_foreign\` foreign key (\`character_id\`) references \`character\` (\`id\`) on update cascade on delete cascade;` this.addSql(`alter table \`character_equipment\` add constraint \`character_equipment_character_item_id_foreign\` foreign key (\`character_item_id\`) references \`character_item\` (\`id\`) on update cascade on delete cascade;`)
)
this.addSql(
`alter table \`character_equipment\` add constraint \`character_equipment_character_item_id_foreign\` foreign key (\`character_item_id\`) references \`character_item\` (\`id\`) on update cascade on delete cascade;`
)
} }
} }

View File

@ -1,10 +1,9 @@
import serverConfig from '@/application/config'
import { defineConfig, MariaDbDriver } from '@mikro-orm/mariadb' import { defineConfig, MariaDbDriver } from '@mikro-orm/mariadb'
// 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 '@/application/config'
export default defineConfig({ export default defineConfig({
extensions: [Migrator], extensions: [Migrator],
metadataProvider: TsMorphMetadataProvider, metadataProvider: TsMorphMetadataProvider,

Some files were not shown because too many files have changed in this diff Show More