diff --git a/Dockerfile b/Dockerfile index 1f96bd9..3cf44a2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,6 @@ WORKDIR /usr/src/app COPY package*.json ./ RUN npm ci COPY . . -RUN npm run build # Production stage FROM node:23.7.0-alpine diff --git a/docker-start.sh b/docker-start.sh index 6d9b026..045122a 100644 --- a/docker-start.sh +++ b/docker-start.sh @@ -45,7 +45,7 @@ echo "MySQL is ready!" # Run migrations with error handling echo "Running database migrations..." -if ! npx mikro-orm migration:up; then +if ! npx mikro-orm-esm migration:up; then echo "Migration failed" exit 1 fi diff --git a/migrations/Migration20250128165214.ts b/migrations/Migration20250128165214.ts deleted file mode 100644 index 03ba14d..0000000 --- a/migrations/Migration20250128165214.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { Migration } from '@mikro-orm/migrations'; - -export class Migration20250128165214 extends Migration { - - override async up(): Promise { - this.addSql(`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(`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(`create table \`map_event_tile\` (\`id\` varchar(255) not null, \`map_id\` varchar(255) not null, \`type\` enum('BLOCK', 'TELEPORT', 'NPC', 'ITEM') not null, \`position_x\` int not null, \`position_y\` int not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`); - this.addSql(`alter table \`map_event_tile\` add index \`map_event_tile_map_id_index\`(\`map_id\`);`); - - this.addSql(`create table \`map_event_tile_teleport\` (\`id\` varchar(255) not null, \`map_event_tile_id\` varchar(255) not null, \`to_map_id\` varchar(255) not null, \`to_rotation\` int not null, \`to_position_x\` int not null, \`to_position_y\` int not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`); - this.addSql(`alter table \`map_event_tile_teleport\` add unique \`map_event_tile_teleport_map_event_tile_id_unique\`(\`map_event_tile_id\`);`); - this.addSql(`alter table \`map_event_tile_teleport\` add index \`map_event_tile_teleport_to_map_id_index\`(\`to_map_id\`);`); - - this.addSql(`create table \`map_object\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`tags\` json null, \`origin_x\` numeric(10,2) not null default 0, \`origin_y\` numeric(10,2) not null default 0, \`frame_rate\` int not null default 0, \`frame_width\` int not null default 0, \`frame_height\` int not null default 0, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`); - - this.addSql(`create table \`placed_map_object\` (\`id\` varchar(255) not null, \`map_id\` varchar(255) not null, \`map_object_id\` varchar(255) not null, \`is_rotated\` tinyint(1) not null default false, \`position_x\` int not null default 0, \`position_y\` int not null default 0, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`); - 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(`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(`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;`); - this.addSql(`alter table \`item\` add index \`item_sprite_id_index\`(\`sprite_id\`);`); - - this.addSql(`create table \`character_type\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`gender\` enum('MALE', 'FEMALE') not null, \`race\` enum('HUMAN', 'ELF', 'DWARF', 'ORC', 'GOBLIN') not null, \`is_selectable\` tinyint(1) not null default false, \`sprite_id\` varchar(255) null, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`); - this.addSql(`alter table \`character_type\` add index \`character_type_sprite_id_index\`(\`sprite_id\`);`); - - this.addSql(`create table \`character_hair\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`gender\` varchar(255) not null default 'MALE', \`is_selectable\` tinyint(1) not null default false, \`sprite_id\` varchar(255) null, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`); - this.addSql(`alter table \`character_hair\` add index \`character_hair_sprite_id_index\`(\`sprite_id\`);`); - - this.addSql(`create table \`sprite_action\` (\`id\` varchar(255) not null, \`sprite_id\` varchar(255) not null, \`action\` varchar(255) not null, \`sprites\` json null, \`origin_x\` numeric(5,2) not null default 0, \`origin_y\` numeric(5,2) not null default 0, \`frame_width\` int not null default 0, \`frame_height\` int not null default 0, \`frame_rate\` int not null default 0, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`); - this.addSql(`alter table \`sprite_action\` add index \`sprite_action_sprite_id_index\`(\`sprite_id\`);`); - - 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;`); - - 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;`); - this.addSql(`alter table \`user\` add unique \`user_username_unique\`(\`username\`);`); - this.addSql(`alter table \`user\` add unique \`user_email_unique\`(\`email\`);`); - - 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;`); - 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(`create table \`character\` (\`id\` varchar(255) not null, \`user_id\` varchar(255) not null, \`name\` varchar(255) not null, \`online\` tinyint(1) not null default false, \`role\` varchar(255) not null default 'player', \`map_id\` varchar(255) not null, \`position_x\` int not null default 0, \`position_y\` int not null default 0, \`rotation\` int not null default 0, \`character_type_id\` varchar(255) null, \`character_hair_id\` varchar(255) null, \`alignment\` int not null default 50, \`hitpoints\` int not null default 100, \`mana\` int not null default 100, \`level\` int not null default 1, \`experience\` int not null default 0, \`strength\` int not null default 10, \`dexterity\` int not null default 10, \`intelligence\` int not null default 10, \`wisdom\` int not null default 10, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`); - this.addSql(`alter table \`character\` add index \`character_user_id_index\`(\`user_id\`);`); - this.addSql(`alter table \`character\` add unique \`character_name_unique\`(\`name\`);`); - this.addSql(`alter table \`character\` add index \`character_map_id_index\`(\`map_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(`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_map_id_index\`(\`map_id\`);`); - - 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;`); - 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(`create table \`character_equipment\` (\`id\` varchar(255) not null, \`slot\` enum('HEAD', 'BODY', 'ARMS', 'LEGS', 'NECK', 'RING') not null, \`character_id\` varchar(255) not null, \`character_item_id\` varchar(255) not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;`); - 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(`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_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_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 \`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_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 \`character_type\` add constraint \`character_type_sprite_id_foreign\` foreign key (\`sprite_id\`) references \`sprite\` (\`id\`) on update cascade on delete set null;`); - - this.addSql(`alter table \`character_hair\` add constraint \`character_hair_sprite_id_foreign\` foreign key (\`sprite_id\`) references \`sprite\` (\`id\`) on update cascade on delete set null;`); - - 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 \`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_map_id_foreign\` foreign key (\`map_id\`) references \`map\` (\`id\`) on update cascade;`); - 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;`); - 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_map_id_foreign\` foreign key (\`map_id\`) references \`map\` (\`id\`) on update cascade on delete cascade;`); - - 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;`); - 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_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;`); - } - -} diff --git a/package.json b/package.json index 2169d9d..f04080e 100644 --- a/package.json +++ b/package.json @@ -1,26 +1,26 @@ { "type": "module", + "tsNode": true, "scripts": { - "start": "node --experimental-specifier-resolution=node dist/server.js", + "start": "node --experimental-specifier-resolution=node --loader ts-node/esm src/server.ts", "dev": "nodemon --exec tsx src/server.ts", - "build": "tsc", "format": "prettier --write src/", "lint": "eslint .", "lint:fix": "eslint . --fix" }, "imports": { - "#root/*": "./dist/*.js", - "#application/*": "./dist/application/*.js", - "#commands/*": "./dist/commands/*.js", - "#entities/*": "./dist/entities/*.js", - "#controllers/*": "./dist/controllers/*.js", - "#jobs/*": "./dist/jobs/*.js", - "#managers/*": "./dist/managers/*.js", - "#middleware/*": "./dist/middleware/*.js", - "#models/*": "./dist/models/*.js", - "#repositories/*": "./dist/repositories/*.js", - "#services/*": "./dist/services/*.js", - "#events/*": "./dist/events/*.js" + "#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": { "@mikro-orm/core": "^6.4.2", diff --git a/src/entities/base/character.ts b/src/entities/base/character.ts index 4e6f68b..87d1833 100644 --- a/src/entities/base/character.ts +++ b/src/entities/base/character.ts @@ -1,17 +1,17 @@ import { randomUUID } from 'node:crypto' -import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' +import { Collection, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' import type { UUID } from '#application/types' +import type { CharacterEquipment } from '#entities/characterEquipment' +import type { CharacterHair } from '#entities/characterHair' +import type { CharacterItem } from '#entities/characterItem' +import type { CharacterType } from '#entities/characterType' +import type { Chat } from '#entities/chat' +import type { Map } from '#entities/map' +import type { User } from '#entities/user' import { BaseEntity } from '#application/base/baseEntity' -import { CharacterEquipment } from '#entities/characterEquipment' -import { CharacterHair } from '#entities/characterHair' -import { CharacterItem } from '#entities/characterItem' -import { CharacterType } from '#entities/characterType' -import { Chat } from '#entities/chat' -import { Map } from '#entities/map' -import { User } from '#entities/user' export class BaseCharacter extends BaseEntity { @PrimaryKey() @@ -29,7 +29,7 @@ export class BaseCharacter extends BaseEntity { @Property() role = 'player' - @OneToMany(() => Chat, (chat) => chat.character) + @OneToMany({ mappedBy: 'character' }) chats = new Collection(this) // Position - @TODO: Update to spawn point when current map is not found diff --git a/src/entities/base/characterEquipment.ts b/src/entities/base/characterEquipment.ts index faa7aa4..9b452d4 100644 --- a/src/entities/base/characterEquipment.ts +++ b/src/entities/base/characterEquipment.ts @@ -3,11 +3,11 @@ import { randomUUID } from 'node:crypto' import { Enum, ManyToOne, PrimaryKey } from '@mikro-orm/core' import type { UUID } from '#application/types' +import type { Character } from '#entities/character' +import type { CharacterItem } from '#entities/characterItem' import { BaseEntity } from '#application/base/baseEntity' import { CharacterEquipmentSlotType } from '#application/enums' -import { Character } from '#entities/character' -import { CharacterItem } from '#entities/characterItem' export class BaseCharacterEquipment extends BaseEntity { @PrimaryKey() diff --git a/src/entities/base/characterItem.ts b/src/entities/base/characterItem.ts index 9d0f1af..4af270c 100644 --- a/src/entities/base/characterItem.ts +++ b/src/entities/base/characterItem.ts @@ -1,13 +1,12 @@ import { randomUUID } from 'node:crypto' -import { Collection, Entity, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' +import { ManyToOne, PrimaryKey, Property } from '@mikro-orm/core' import type { UUID } from '#application/types' +import type { Character } from '#entities/character' +import type { Item } from '#entities/item' import { BaseEntity } from '#application/base/baseEntity' -import { Character } from '#entities/character' -import { CharacterEquipment } from '#entities/characterEquipment' -import { Item } from '#entities/item' export class BaseCharacterItem extends BaseEntity { @PrimaryKey() diff --git a/src/entities/base/chat.ts b/src/entities/base/chat.ts index e7bd31e..a2f854f 100644 --- a/src/entities/base/chat.ts +++ b/src/entities/base/chat.ts @@ -1,12 +1,12 @@ import { randomUUID } from 'node:crypto' -import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core' +import { ManyToOne, PrimaryKey, Property } from '@mikro-orm/core' import type { UUID } from '#application/types' +import type { Character } from '#entities/character' +import type { Map } from '#entities/map' import { BaseEntity } from '#application/base/baseEntity' -import { Character } from '#entities/character' -import { Map } from '#entities/map' export class BaseChat extends BaseEntity { @PrimaryKey() diff --git a/src/entities/base/map.ts b/src/entities/base/map.ts index 5fe4ab9..78464ba 100644 --- a/src/entities/base/map.ts +++ b/src/entities/base/map.ts @@ -1,13 +1,13 @@ import { randomUUID } from 'node:crypto' -import { Collection, Entity, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' +import { Collection, OneToMany, PrimaryKey, Property } from '@mikro-orm/core' import type { UUID } from '#application/types' +import type { MapEffect } from '#entities/mapEffect' +import type { MapEventTile } from '#entities/mapEventTile' +import type { PlacedMapObject } from '#entities/placedMapObject' import { BaseEntity } from '#application/base/baseEntity' -import { MapEffect } from '#entities/mapEffect' -import { MapEventTile } from '#entities/mapEventTile' -import { PlacedMapObject } from '#entities/placedMapObject' export class BaseMap extends BaseEntity { @PrimaryKey() @@ -34,13 +34,13 @@ export class BaseMap extends BaseEntity { @Property() updatedAt = new Date() - @OneToMany(() => MapEffect, (effect) => effect.map, { orphanRemoval: true }) + @OneToMany({ mappedBy: 'map', orphanRemoval: true }) mapEffects = new Collection(this) - @OneToMany(() => MapEventTile, (tile) => tile.map, { orphanRemoval: true }) + @OneToMany({ mappedBy: 'map', orphanRemoval: true }) mapEventTiles = new Collection(this) - @OneToMany(() => PlacedMapObject, (placedMapObject) => placedMapObject.map, { orphanRemoval: true }) + @OneToMany({ mappedBy: 'map', orphanRemoval: true }) placedMapObjects = new Collection(this) setId(id: UUID) { diff --git a/src/entities/base/mapEffect.ts b/src/entities/base/mapEffect.ts index 2863ef0..0270538 100644 --- a/src/entities/base/mapEffect.ts +++ b/src/entities/base/mapEffect.ts @@ -3,9 +3,9 @@ import { randomUUID } from 'node:crypto' import { ManyToOne, PrimaryKey, Property } from '@mikro-orm/core' import type { UUID } from '#application/types' +import type { Map } from '#entities/map' import { BaseEntity } from '#application/base/baseEntity' -import { Map } from '#entities/map' export class BaseMapEffect extends BaseEntity { @PrimaryKey() diff --git a/src/entities/base/mapEventTile.ts b/src/entities/base/mapEventTile.ts index e88873f..9013e6f 100644 --- a/src/entities/base/mapEventTile.ts +++ b/src/entities/base/mapEventTile.ts @@ -1,13 +1,13 @@ import { randomUUID } from 'node:crypto' -import { Entity, Enum, ManyToOne, OneToOne, PrimaryKey, Property } from '@mikro-orm/core' +import { Enum, ManyToOne, OneToOne, PrimaryKey, Property } from '@mikro-orm/core' import type { UUID } from '#application/types' +import type { Map } from '#entities/map' +import type { MapEventTileTeleport } from '#entities/mapEventTileTeleport' import { BaseEntity } from '#application/base/baseEntity' import { MapEventTileType } from '#application/enums' -import { Map } from '#entities/map' -import { MapEventTileTeleport } from '#entities/mapEventTileTeleport' export class BaseMapEventTile extends BaseEntity { @PrimaryKey() @@ -25,7 +25,7 @@ export class BaseMapEventTile extends BaseEntity { @Property() positionY!: number - @OneToOne(() => MapEventTileTeleport, (teleport) => teleport.mapEventTile, { eager: true }) + @OneToOne({ eager: true }) teleport?: MapEventTileTeleport setId(id: UUID) { diff --git a/src/entities/base/mapEventTileTeleport.ts b/src/entities/base/mapEventTileTeleport.ts index 9011d3b..de7caf7 100644 --- a/src/entities/base/mapEventTileTeleport.ts +++ b/src/entities/base/mapEventTileTeleport.ts @@ -1,12 +1,12 @@ import { randomUUID } from 'node:crypto' -import { Entity, ManyToOne, OneToOne, PrimaryKey, Property } from '@mikro-orm/core' +import { ManyToOne, OneToOne, PrimaryKey, Property } from '@mikro-orm/core' import type { UUID } from '#application/types' +import type { Map } from '#entities/map' +import type { MapEventTile } from '#entities/mapEventTile' import { BaseEntity } from '#application/base/baseEntity' -import { Map } from '#entities/map' -import { MapEventTile } from '#entities/mapEventTile' export class BaseMapEventTileTeleport extends BaseEntity { @PrimaryKey() diff --git a/src/entities/base/passwordResetToken.ts b/src/entities/base/passwordResetToken.ts index 5193327..2340f67 100644 --- a/src/entities/base/passwordResetToken.ts +++ b/src/entities/base/passwordResetToken.ts @@ -1,11 +1,11 @@ import { randomUUID } from 'node:crypto' -import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core' +import { ManyToOne, PrimaryKey, Property } from '@mikro-orm/core' import type { UUID } from '#application/types' +import type { User } from '#entities/user' import { BaseEntity } from '#application/base/baseEntity' -import { User } from '#entities/user' export class BasePasswordResetToken extends BaseEntity { @PrimaryKey() diff --git a/src/entities/base/placedMapObject.ts b/src/entities/base/placedMapObject.ts index f31965d..fdead21 100644 --- a/src/entities/base/placedMapObject.ts +++ b/src/entities/base/placedMapObject.ts @@ -1,14 +1,12 @@ import { randomUUID } from 'node:crypto' -import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core' +import { ManyToOne, PrimaryKey, Property } from '@mikro-orm/core' import type { UUID } from '#application/types' +import type { Map } from '#entities/map' +import type { MapObject } from '#entities/mapObject' import { BaseEntity } from '#application/base/baseEntity' -import { Map } from '#entities/map' -import { MapObject } from '#entities/mapObject' - -//@TODO : Rename mapObject export class BasePlacedMapObject extends BaseEntity { @PrimaryKey() diff --git a/src/entities/base/spriteAction.ts b/src/entities/base/spriteAction.ts index 8114d0c..b7191d8 100644 --- a/src/entities/base/spriteAction.ts +++ b/src/entities/base/spriteAction.ts @@ -1,11 +1,11 @@ import { randomUUID } from 'node:crypto' -import { Entity, ManyToOne, PrimaryKey, Property } from '@mikro-orm/core' +import { ManyToOne, PrimaryKey, Property } from '@mikro-orm/core' import type { UUID } from '#application/types' +import type { Sprite } from '#entities/sprite' import { BaseEntity } from '#application/base/baseEntity' -import { Sprite } from '#entities/sprite' export interface SpriteImage { url: string diff --git a/src/migrations/.snapshot-game.json b/src/migrations/.snapshot-game.json new file mode 100644 index 0000000..8091ff7 --- /dev/null +++ b/src/migrations/.snapshot-game.json @@ -0,0 +1,2079 @@ +{ + "namespaces": [], + "tables": [ + { + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "name": { + "name": "name", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "width": { + "name": "width", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "10", + "mappedType": "integer" + }, + "height": { + "name": "height", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "10", + "mappedType": "integer" + }, + "tiles": { + "name": "tiles", + "type": "json", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "length": null, + "mappedType": "json" + }, + "pvp": { + "name": "pvp", + "type": "tinyint(1)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 1, + "default": "false", + "mappedType": "boolean" + }, + "created_at": { + "name": "created_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "datetime" + }, + "updated_at": { + "name": "updated_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "datetime" + } + }, + "name": "map", + "indexes": [ + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": {}, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "map_id": { + "name": "map_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "effect": { + "name": "effect", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "strength": { + "name": "strength", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "integer" + } + }, + "name": "map_effect", + "indexes": [ + { + "columnNames": ["map_id"], + "composite": false, + "keyName": "map_effect_map_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "map_effect_map_id_foreign": { + "constraintName": "map_effect_map_id_foreign", + "columnNames": ["map_id"], + "localTableName": "map_effect", + "referencedColumnNames": ["id"], + "referencedTableName": "map", + "deleteRule": "cascade", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "map_id": { + "name": "map_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "type": { + "name": "type", + "type": "enum('BLOCK','TELEPORT','NPC','ITEM')", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "enumItems": ["BLOCK", "TELEPORT", "NPC", "ITEM"], + "mappedType": "enum" + }, + "position_x": { + "name": "position_x", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "integer" + }, + "position_y": { + "name": "position_y", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "integer" + }, + "teleport_id": { + "name": "teleport_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "length": 255, + "mappedType": "string" + } + }, + "name": "map_event_tile", + "indexes": [ + { + "columnNames": ["map_id"], + "composite": false, + "keyName": "map_event_tile_map_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "columnNames": ["teleport_id"], + "composite": false, + "keyName": "map_event_tile_teleport_id_unique", + "constraint": true, + "primary": false, + "unique": true + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "map_event_tile_map_id_foreign": { + "constraintName": "map_event_tile_map_id_foreign", + "columnNames": ["map_id"], + "localTableName": "map_event_tile", + "referencedColumnNames": ["id"], + "referencedTableName": "map", + "deleteRule": "cascade", + "updateRule": "cascade" + }, + "map_event_tile_teleport_id_foreign": { + "constraintName": "map_event_tile_teleport_id_foreign", + "columnNames": ["teleport_id"], + "localTableName": "map_event_tile", + "referencedColumnNames": ["id"], + "referencedTableName": "map_event_tile_teleport", + "deleteRule": "set null", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "map_event_tile_id": { + "name": "map_event_tile_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "to_map_id": { + "name": "to_map_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "to_rotation": { + "name": "to_rotation", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "integer" + }, + "to_position_x": { + "name": "to_position_x", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "integer" + }, + "to_position_y": { + "name": "to_position_y", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "integer" + } + }, + "name": "map_event_tile_teleport", + "indexes": [ + { + "columnNames": ["map_event_tile_id"], + "composite": false, + "keyName": "map_event_tile_teleport_map_event_tile_id_unique", + "constraint": true, + "primary": false, + "unique": true + }, + { + "columnNames": ["to_map_id"], + "composite": false, + "keyName": "map_event_tile_teleport_to_map_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "map_event_tile_teleport_map_event_tile_id_foreign": { + "constraintName": "map_event_tile_teleport_map_event_tile_id_foreign", + "columnNames": ["map_event_tile_id"], + "localTableName": "map_event_tile_teleport", + "referencedColumnNames": ["id"], + "referencedTableName": "map_event_tile", + "deleteRule": "cascade", + "updateRule": "cascade" + }, + "map_event_tile_teleport_to_map_id_foreign": { + "constraintName": "map_event_tile_teleport_to_map_id_foreign", + "columnNames": ["to_map_id"], + "localTableName": "map_event_tile_teleport", + "referencedColumnNames": ["id"], + "referencedTableName": "map", + "deleteRule": "cascade", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "name": { + "name": "name", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "tags": { + "name": "tags", + "type": "json", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "length": null, + "mappedType": "json" + }, + "origin_x": { + "name": "origin_x", + "type": "numeric(10,2)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "precision": 10, + "scale": 2, + "default": "0", + "mappedType": "decimal" + }, + "origin_y": { + "name": "origin_y", + "type": "numeric(10,2)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "precision": 10, + "scale": 2, + "default": "0", + "mappedType": "decimal" + }, + "frame_rate": { + "name": "frame_rate", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "0", + "mappedType": "integer" + }, + "frame_width": { + "name": "frame_width", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "0", + "mappedType": "integer" + }, + "frame_height": { + "name": "frame_height", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "0", + "mappedType": "integer" + }, + "created_at": { + "name": "created_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "datetime" + }, + "updated_at": { + "name": "updated_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "datetime" + } + }, + "name": "map_object", + "indexes": [ + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": {}, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "map_id": { + "name": "map_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "map_object_id": { + "name": "map_object_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "is_rotated": { + "name": "is_rotated", + "type": "tinyint(1)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 1, + "default": "false", + "mappedType": "boolean" + }, + "position_x": { + "name": "position_x", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "0", + "mappedType": "integer" + }, + "position_y": { + "name": "position_y", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "0", + "mappedType": "integer" + } + }, + "name": "placed_map_object", + "indexes": [ + { + "columnNames": ["map_id"], + "composite": false, + "keyName": "placed_map_object_map_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "columnNames": ["map_object_id"], + "composite": false, + "keyName": "placed_map_object_map_object_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "placed_map_object_map_id_foreign": { + "constraintName": "placed_map_object_map_id_foreign", + "columnNames": ["map_id"], + "localTableName": "placed_map_object", + "referencedColumnNames": ["id"], + "referencedTableName": "map", + "deleteRule": "cascade", + "updateRule": "cascade" + }, + "placed_map_object_map_object_id_foreign": { + "constraintName": "placed_map_object_map_object_id_foreign", + "columnNames": ["map_object_id"], + "localTableName": "placed_map_object", + "referencedColumnNames": ["id"], + "referencedTableName": "map_object", + "deleteRule": "cascade", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "name": { + "name": "name", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "created_at": { + "name": "created_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "datetime" + }, + "updated_at": { + "name": "updated_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "datetime" + } + }, + "name": "sprite", + "indexes": [ + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": {}, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "name": { + "name": "name", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "description": { + "name": "description", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "default": "''", + "mappedType": "string" + }, + "item_type": { + "name": "item_type", + "type": "enum('WEAPON','HELMET','CHEST','LEGS','BOOTS','GLOVES','RING','NECKLACE')", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "enumItems": ["WEAPON", "HELMET", "CHEST", "LEGS", "BOOTS", "GLOVES", "RING", "NECKLACE"], + "mappedType": "enum" + }, + "stackable": { + "name": "stackable", + "type": "tinyint(1)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 1, + "default": "false", + "mappedType": "boolean" + }, + "rarity": { + "name": "rarity", + "type": "enum('COMMON','UNCOMMON','RARE','EPIC','LEGENDARY')", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "default": "'COMMON'", + "enumItems": ["COMMON", "UNCOMMON", "RARE", "EPIC", "LEGENDARY"], + "mappedType": "enum" + }, + "sprite_id": { + "name": "sprite_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "length": 255, + "mappedType": "string" + }, + "created_at": { + "name": "created_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "datetime" + }, + "updated_at": { + "name": "updated_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "datetime" + } + }, + "name": "item", + "indexes": [ + { + "columnNames": ["sprite_id"], + "composite": false, + "keyName": "item_sprite_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "item_sprite_id_foreign": { + "constraintName": "item_sprite_id_foreign", + "columnNames": ["sprite_id"], + "localTableName": "item", + "referencedColumnNames": ["id"], + "referencedTableName": "sprite", + "deleteRule": "set null", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "name": { + "name": "name", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "gender": { + "name": "gender", + "type": "enum('MALE','FEMALE')", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "enumItems": ["MALE", "FEMALE"], + "mappedType": "enum" + }, + "race": { + "name": "race", + "type": "enum('HUMAN','ELF','DWARF','ORC','GOBLIN')", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "enumItems": ["HUMAN", "ELF", "DWARF", "ORC", "GOBLIN"], + "mappedType": "enum" + }, + "is_selectable": { + "name": "is_selectable", + "type": "tinyint(1)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 1, + "default": "false", + "mappedType": "boolean" + }, + "sprite_id": { + "name": "sprite_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "length": 255, + "mappedType": "string" + }, + "created_at": { + "name": "created_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "datetime" + }, + "updated_at": { + "name": "updated_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "datetime" + } + }, + "name": "character_type", + "indexes": [ + { + "columnNames": ["sprite_id"], + "composite": false, + "keyName": "character_type_sprite_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "character_type_sprite_id_foreign": { + "constraintName": "character_type_sprite_id_foreign", + "columnNames": ["sprite_id"], + "localTableName": "character_type", + "referencedColumnNames": ["id"], + "referencedTableName": "sprite", + "deleteRule": "set null", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "name": { + "name": "name", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "gender": { + "name": "gender", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "default": "'MALE'", + "mappedType": "string" + }, + "is_selectable": { + "name": "is_selectable", + "type": "tinyint(1)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 1, + "default": "false", + "mappedType": "boolean" + }, + "sprite_id": { + "name": "sprite_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "length": 255, + "mappedType": "string" + }, + "created_at": { + "name": "created_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "datetime" + }, + "updated_at": { + "name": "updated_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "datetime" + } + }, + "name": "character_hair", + "indexes": [ + { + "columnNames": ["sprite_id"], + "composite": false, + "keyName": "character_hair_sprite_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "character_hair_sprite_id_foreign": { + "constraintName": "character_hair_sprite_id_foreign", + "columnNames": ["sprite_id"], + "localTableName": "character_hair", + "referencedColumnNames": ["id"], + "referencedTableName": "sprite", + "deleteRule": "set null", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "sprite_id": { + "name": "sprite_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "action": { + "name": "action", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "sprites": { + "name": "sprites", + "type": "json", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "length": null, + "mappedType": "json" + }, + "origin_x": { + "name": "origin_x", + "type": "numeric(5,2)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "precision": 5, + "scale": 2, + "default": "0", + "mappedType": "decimal" + }, + "origin_y": { + "name": "origin_y", + "type": "numeric(5,2)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "precision": 5, + "scale": 2, + "default": "0", + "mappedType": "decimal" + }, + "frame_width": { + "name": "frame_width", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "0", + "mappedType": "integer" + }, + "frame_height": { + "name": "frame_height", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "0", + "mappedType": "integer" + }, + "frame_rate": { + "name": "frame_rate", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "0", + "mappedType": "integer" + } + }, + "name": "sprite_action", + "indexes": [ + { + "columnNames": ["sprite_id"], + "composite": false, + "keyName": "sprite_action_sprite_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "sprite_action_sprite_id_foreign": { + "constraintName": "sprite_action_sprite_id_foreign", + "columnNames": ["sprite_id"], + "localTableName": "sprite_action", + "referencedColumnNames": ["id"], + "referencedTableName": "sprite", + "deleteRule": "cascade", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "name": { + "name": "name", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "tags": { + "name": "tags", + "type": "json", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "length": null, + "mappedType": "json" + }, + "created_at": { + "name": "created_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "datetime" + }, + "updated_at": { + "name": "updated_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "datetime" + } + }, + "name": "tile", + "indexes": [ + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": {}, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "username": { + "name": "username", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "email": { + "name": "email", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "password": { + "name": "password", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "online": { + "name": "online", + "type": "tinyint(1)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 1, + "default": "false", + "mappedType": "boolean" + } + }, + "name": "user", + "indexes": [ + { + "columnNames": ["username"], + "composite": false, + "keyName": "user_username_unique", + "constraint": true, + "primary": false, + "unique": true + }, + { + "columnNames": ["email"], + "composite": false, + "keyName": "user_email_unique", + "constraint": true, + "primary": false, + "unique": true + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": {}, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "user_id": { + "name": "user_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "token": { + "name": "token", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "created_at": { + "name": "created_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "datetime" + } + }, + "name": "password_reset_token", + "indexes": [ + { + "columnNames": ["user_id"], + "composite": false, + "keyName": "password_reset_token_user_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "columnNames": ["token"], + "composite": false, + "keyName": "password_reset_token_token_unique", + "constraint": true, + "primary": false, + "unique": true + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "password_reset_token_user_id_foreign": { + "constraintName": "password_reset_token_user_id_foreign", + "columnNames": ["user_id"], + "localTableName": "password_reset_token", + "referencedColumnNames": ["id"], + "referencedTableName": "user", + "deleteRule": "cascade", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "user_id": { + "name": "user_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "name": { + "name": "name", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "online": { + "name": "online", + "type": "tinyint(1)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 1, + "default": "false", + "mappedType": "boolean" + }, + "role": { + "name": "role", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "default": "'player'", + "mappedType": "string" + }, + "map_id": { + "name": "map_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "position_x": { + "name": "position_x", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "0", + "mappedType": "integer" + }, + "position_y": { + "name": "position_y", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "0", + "mappedType": "integer" + }, + "rotation": { + "name": "rotation", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "0", + "mappedType": "integer" + }, + "character_type_id": { + "name": "character_type_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "length": 255, + "mappedType": "string" + }, + "character_hair_id": { + "name": "character_hair_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "length": 255, + "mappedType": "string" + }, + "alignment": { + "name": "alignment", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "50", + "mappedType": "integer" + }, + "hitpoints": { + "name": "hitpoints", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "100", + "mappedType": "integer" + }, + "mana": { + "name": "mana", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "100", + "mappedType": "integer" + }, + "level": { + "name": "level", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "1", + "mappedType": "integer" + }, + "experience": { + "name": "experience", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "0", + "mappedType": "integer" + }, + "strength": { + "name": "strength", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "10", + "mappedType": "integer" + }, + "dexterity": { + "name": "dexterity", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "10", + "mappedType": "integer" + }, + "intelligence": { + "name": "intelligence", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "10", + "mappedType": "integer" + }, + "wisdom": { + "name": "wisdom", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "10", + "mappedType": "integer" + } + }, + "name": "character", + "indexes": [ + { + "columnNames": ["user_id"], + "composite": false, + "keyName": "character_user_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "columnNames": ["name"], + "composite": false, + "keyName": "character_name_unique", + "constraint": true, + "primary": false, + "unique": true + }, + { + "columnNames": ["map_id"], + "composite": false, + "keyName": "character_map_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "columnNames": ["character_type_id"], + "composite": false, + "keyName": "character_character_type_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "columnNames": ["character_hair_id"], + "composite": false, + "keyName": "character_character_hair_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "character_user_id_foreign": { + "constraintName": "character_user_id_foreign", + "columnNames": ["user_id"], + "localTableName": "character", + "referencedColumnNames": ["id"], + "referencedTableName": "user", + "deleteRule": "cascade", + "updateRule": "cascade" + }, + "character_map_id_foreign": { + "constraintName": "character_map_id_foreign", + "columnNames": ["map_id"], + "localTableName": "character", + "referencedColumnNames": ["id"], + "referencedTableName": "map", + "updateRule": "cascade" + }, + "character_character_type_id_foreign": { + "constraintName": "character_character_type_id_foreign", + "columnNames": ["character_type_id"], + "localTableName": "character", + "referencedColumnNames": ["id"], + "referencedTableName": "character_type", + "deleteRule": "set null", + "updateRule": "cascade" + }, + "character_character_hair_id_foreign": { + "constraintName": "character_character_hair_id_foreign", + "columnNames": ["character_hair_id"], + "localTableName": "character", + "referencedColumnNames": ["id"], + "referencedTableName": "character_hair", + "deleteRule": "set null", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "character_id": { + "name": "character_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "map_id": { + "name": "map_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "message": { + "name": "message", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "created_at": { + "name": "created_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "datetime" + } + }, + "name": "chat", + "indexes": [ + { + "columnNames": ["character_id"], + "composite": false, + "keyName": "chat_character_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "columnNames": ["map_id"], + "composite": false, + "keyName": "chat_map_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "chat_character_id_foreign": { + "constraintName": "chat_character_id_foreign", + "columnNames": ["character_id"], + "localTableName": "chat", + "referencedColumnNames": ["id"], + "referencedTableName": "character", + "deleteRule": "cascade", + "updateRule": "cascade" + }, + "chat_map_id_foreign": { + "constraintName": "chat_map_id_foreign", + "columnNames": ["map_id"], + "localTableName": "chat", + "referencedColumnNames": ["id"], + "referencedTableName": "map", + "deleteRule": "cascade", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "character_id": { + "name": "character_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "item_id": { + "name": "item_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "quantity": { + "name": "quantity", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "integer" + } + }, + "name": "character_item", + "indexes": [ + { + "columnNames": ["character_id"], + "composite": false, + "keyName": "character_item_character_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "columnNames": ["item_id"], + "composite": false, + "keyName": "character_item_item_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "character_item_character_id_foreign": { + "constraintName": "character_item_character_id_foreign", + "columnNames": ["character_id"], + "localTableName": "character_item", + "referencedColumnNames": ["id"], + "referencedTableName": "character", + "deleteRule": "cascade", + "updateRule": "cascade" + }, + "character_item_item_id_foreign": { + "constraintName": "character_item_item_id_foreign", + "columnNames": ["item_id"], + "localTableName": "character_item", + "referencedColumnNames": ["id"], + "referencedTableName": "item", + "deleteRule": "cascade", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "slot": { + "name": "slot", + "type": "enum('HEAD','BODY','ARMS','LEGS','NECK','RING')", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "enumItems": ["HEAD", "BODY", "ARMS", "LEGS", "NECK", "RING"], + "mappedType": "enum" + }, + "character_id": { + "name": "character_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + }, + "character_item_id": { + "name": "character_item_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": 255, + "mappedType": "string" + } + }, + "name": "character_equipment", + "indexes": [ + { + "columnNames": ["character_id"], + "composite": false, + "keyName": "character_equipment_character_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "columnNames": ["character_item_id"], + "composite": false, + "keyName": "character_equipment_character_item_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "character_equipment_character_id_foreign": { + "constraintName": "character_equipment_character_id_foreign", + "columnNames": ["character_id"], + "localTableName": "character_equipment", + "referencedColumnNames": ["id"], + "referencedTableName": "character", + "deleteRule": "cascade", + "updateRule": "cascade" + }, + "character_equipment_character_item_id_foreign": { + "constraintName": "character_equipment_character_item_id_foreign", + "columnNames": ["character_item_id"], + "localTableName": "character_equipment", + "referencedColumnNames": ["id"], + "referencedTableName": "character_item", + "deleteRule": "cascade", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "date": { + "name": "date", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "mappedType": "datetime" + }, + "rain_percentage": { + "name": "rain_percentage", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "0", + "mappedType": "integer" + }, + "fog_density": { + "name": "fog_density", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "length": null, + "default": "0", + "mappedType": "integer" + } + }, + "name": "world", + "indexes": [ + { + "keyName": "PRIMARY", + "columnNames": ["date"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": {}, + "nativeEnums": {} + } + ], + "nativeEnums": {} +} diff --git a/src/migrations/Migration20250207212301.ts b/src/migrations/Migration20250207212301.ts new file mode 100644 index 0000000..679af39 --- /dev/null +++ b/src/migrations/Migration20250207212301.ts @@ -0,0 +1,162 @@ +import { Migration } from '@mikro-orm/migrations' + +export class Migration20250207212301 extends Migration { + override async up(): Promise { + this.addSql( + `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( + `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( + `create table \`map_event_tile\` (\`id\` varchar(255) not null, \`map_id\` varchar(255) not null, \`type\` enum('BLOCK', 'TELEPORT', 'NPC', 'ITEM') not null, \`position_x\` int not null, \`position_y\` int not null, \`teleport_id\` varchar(255) null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;` + ) + this.addSql(`alter table \`map_event_tile\` add index \`map_event_tile_map_id_index\`(\`map_id\`);`) + this.addSql(`alter table \`map_event_tile\` add unique \`map_event_tile_teleport_id_unique\`(\`teleport_id\`);`) + + this.addSql( + `create table \`map_event_tile_teleport\` (\`id\` varchar(255) not null, \`map_event_tile_id\` varchar(255) not null, \`to_map_id\` varchar(255) not null, \`to_rotation\` int not null, \`to_position_x\` int not null, \`to_position_y\` int not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;` + ) + this.addSql(`alter table \`map_event_tile_teleport\` add unique \`map_event_tile_teleport_map_event_tile_id_unique\`(\`map_event_tile_id\`);`) + this.addSql(`alter table \`map_event_tile_teleport\` add index \`map_event_tile_teleport_to_map_id_index\`(\`to_map_id\`);`) + + this.addSql( + `create table \`map_object\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`tags\` json null, \`origin_x\` numeric(10,2) not null default 0, \`origin_y\` numeric(10,2) not null default 0, \`frame_rate\` int not null default 0, \`frame_width\` int not null default 0, \`frame_height\` int not null default 0, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;` + ) + + this.addSql( + `create table \`placed_map_object\` (\`id\` varchar(255) not null, \`map_id\` varchar(255) not null, \`map_object_id\` varchar(255) not null, \`is_rotated\` tinyint(1) not null default false, \`position_x\` int not null default 0, \`position_y\` int not null default 0, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;` + ) + 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( + `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( + `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;` + ) + this.addSql(`alter table \`item\` add index \`item_sprite_id_index\`(\`sprite_id\`);`) + + this.addSql( + `create table \`character_type\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`gender\` enum('MALE', 'FEMALE') not null, \`race\` enum('HUMAN', 'ELF', 'DWARF', 'ORC', 'GOBLIN') not null, \`is_selectable\` tinyint(1) not null default false, \`sprite_id\` varchar(255) null, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;` + ) + this.addSql(`alter table \`character_type\` add index \`character_type_sprite_id_index\`(\`sprite_id\`);`) + + this.addSql( + `create table \`character_hair\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`gender\` varchar(255) not null default 'MALE', \`is_selectable\` tinyint(1) not null default false, \`sprite_id\` varchar(255) null, \`created_at\` datetime not null, \`updated_at\` datetime not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;` + ) + this.addSql(`alter table \`character_hair\` add index \`character_hair_sprite_id_index\`(\`sprite_id\`);`) + + this.addSql( + `create table \`sprite_action\` (\`id\` varchar(255) not null, \`sprite_id\` varchar(255) not null, \`action\` varchar(255) not null, \`sprites\` json null, \`origin_x\` numeric(5,2) not null default 0, \`origin_y\` numeric(5,2) not null default 0, \`frame_width\` int not null default 0, \`frame_height\` int not null default 0, \`frame_rate\` int not null default 0, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;` + ) + this.addSql(`alter table \`sprite_action\` add index \`sprite_action_sprite_id_index\`(\`sprite_id\`);`) + + 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;` + ) + + 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;` + ) + this.addSql(`alter table \`user\` add unique \`user_username_unique\`(\`username\`);`) + this.addSql(`alter table \`user\` add unique \`user_email_unique\`(\`email\`);`) + + 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;` + ) + 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( + `create table \`character\` (\`id\` varchar(255) not null, \`user_id\` varchar(255) not null, \`name\` varchar(255) not null, \`online\` tinyint(1) not null default false, \`role\` varchar(255) not null default 'player', \`map_id\` varchar(255) not null, \`position_x\` int not null default 0, \`position_y\` int not null default 0, \`rotation\` int not null default 0, \`character_type_id\` varchar(255) null, \`character_hair_id\` varchar(255) null, \`alignment\` int not null default 50, \`hitpoints\` int not null default 100, \`mana\` int not null default 100, \`level\` int not null default 1, \`experience\` int not null default 0, \`strength\` int not null default 10, \`dexterity\` int not null default 10, \`intelligence\` int not null default 10, \`wisdom\` int not null default 10, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;` + ) + this.addSql(`alter table \`character\` add index \`character_user_id_index\`(\`user_id\`);`) + this.addSql(`alter table \`character\` add unique \`character_name_unique\`(\`name\`);`) + this.addSql(`alter table \`character\` add index \`character_map_id_index\`(\`map_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( + `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_map_id_index\`(\`map_id\`);`) + + 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;` + ) + 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( + `create table \`character_equipment\` (\`id\` varchar(255) not null, \`slot\` enum('HEAD', 'BODY', 'ARMS', 'LEGS', 'NECK', 'RING') not null, \`character_id\` varchar(255) not null, \`character_item_id\` varchar(255) not null, primary key (\`id\`)) default character set utf8mb4 engine = InnoDB;` + ) + 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( + `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_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_teleport_id_foreign\` foreign key (\`teleport_id\`) references \`map_event_tile_teleport\` (\`id\`) on update cascade on delete set null;` + ) + + 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;` + ) + 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_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 \`character_type\` add constraint \`character_type_sprite_id_foreign\` foreign key (\`sprite_id\`) references \`sprite\` (\`id\`) on update cascade on delete set null;`) + + this.addSql(`alter table \`character_hair\` add constraint \`character_hair_sprite_id_foreign\` foreign key (\`sprite_id\`) references \`sprite\` (\`id\`) on update cascade on delete set null;`) + + 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 \`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_map_id_foreign\` foreign key (\`map_id\`) references \`map\` (\`id\`) on update cascade;`) + 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;` + ) + 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_map_id_foreign\` foreign key (\`map_id\`) references \`map\` (\`id\`) on update cascade on delete cascade;`) + + 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;` + ) + 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_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;` + ) + } +} diff --git a/src/mikro-orm.config.ts b/src/mikro-orm.config.ts index 78363d0..7abd09a 100644 --- a/src/mikro-orm.config.ts +++ b/src/mikro-orm.config.ts @@ -8,7 +8,7 @@ import serverConfig from '#application/config' export default defineConfig({ extensions: [Migrator], metadataProvider: TsMorphMetadataProvider, - entities: ['./src/entities/*.js'], + entities: ['./dist/entities/*.js'], entitiesTs: ['./src/entities/*.ts'], driver: MySqlDriver, host: serverConfig.DB_HOST, @@ -21,7 +21,7 @@ export default defineConfig({ allowPublicKeyRetrieval: true }, migrations: { - path: './migrations', - pathTs: './migrations' + path: './dist/migrations', + pathTs: './src/migrations' } }) diff --git a/src/services/characterMoveService.ts b/src/services/characterMoveService.ts index 45baeca..a444bdc 100644 --- a/src/services/characterMoveService.ts +++ b/src/services/characterMoveService.ts @@ -140,8 +140,8 @@ class CharacterMoveService extends BaseService { } private getDistance(a: Position, b: Position): number { - const dx = Math.abs(a.positionX - b.positionX), - dy = Math.abs(a.positionY - b.positionY) + const dx = Math.abs(a.positionX - b.positionX) + const dy = Math.abs(a.positionY - b.positionY) // Manhattan distance for straight paths, then Euclidean for diagonals return dx + dy + (Math.sqrt(2) - 2) * Math.min(dx, dy) }