Added update & delete rules to entities

This commit is contained in:
Dennis Postma 2025-01-01 20:44:36 +01:00
parent 11d30351ba
commit 465219276d
16 changed files with 66 additions and 114 deletions

View File

@ -1,6 +1,6 @@
import { Migration } from '@mikro-orm/migrations';
export class Migration20241229234130 extends Migration {
export class Migration20250101194316 extends Migration {
override async up(): Promise<void> {
this.addSql(`create table \`map_object\` (\`id\` varchar(255) not null, \`name\` varchar(255) not null, \`tags\` json null, \`origin_x\` int not null default 0, \`origin_y\` int not null default 0, \`is_animated\` tinyint(1) not null default false, \`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;`);
@ -72,33 +72,33 @@ export class Migration20241229234130 extends Migration {
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;`);
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;`);
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;`);
this.addSql(`alter table \`character\` add constraint \`character_zone_id_foreign\` foreign key (\`zone_id\`) references \`zone\` (\`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;`);
this.addSql(`alter table \`chat\` add constraint \`chat_zone_id_foreign\` foreign key (\`zone_id\`) references \`zone\` (\`id\`) on update 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_zone_id_foreign\` foreign key (\`zone_id\`) references \`zone\` (\`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;`);
this.addSql(`alter table \`character_item\` add constraint \`character_item_item_id_foreign\` foreign key (\`item_id\`) references \`item\` (\`id\`) on update 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;`);
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;`);
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;`);
this.addSql(`alter table \`zone_effect\` add constraint \`zone_effect_zone_id_foreign\` foreign key (\`zone_id\`) references \`zone\` (\`id\`) on update cascade;`);
this.addSql(`alter table \`zone_effect\` add constraint \`zone_effect_zone_id_foreign\` foreign key (\`zone_id\`) references \`zone\` (\`id\`) on update cascade on delete cascade;`);
this.addSql(`alter table \`zone_event_tile\` add constraint \`zone_event_tile_zone_id_foreign\` foreign key (\`zone_id\`) references \`zone\` (\`id\`) on update cascade;`);
this.addSql(`alter table \`zone_event_tile\` add constraint \`zone_event_tile_zone_id_foreign\` foreign key (\`zone_id\`) references \`zone\` (\`id\`) on update cascade on delete cascade;`);
this.addSql(`alter table \`zone_event_tile_teleport\` add constraint \`zone_event_tile_teleport_zone_event_tile_id_foreign\` foreign key (\`zone_event_tile_id\`) references \`zone_event_tile\` (\`id\`) on update cascade;`);
this.addSql(`alter table \`zone_event_tile_teleport\` add constraint \`zone_event_tile_teleport_to_zone_id_foreign\` foreign key (\`to_zone_id\`) references \`zone\` (\`id\`) on update cascade;`);
this.addSql(`alter table \`zone_event_tile_teleport\` add constraint \`zone_event_tile_teleport_zone_event_tile_id_foreign\` foreign key (\`zone_event_tile_id\`) references \`zone_event_tile\` (\`id\`) on update cascade on delete cascade;`);
this.addSql(`alter table \`zone_event_tile_teleport\` add constraint \`zone_event_tile_teleport_to_zone_id_foreign\` foreign key (\`to_zone_id\`) references \`zone\` (\`id\`) on update cascade on delete cascade;`);
this.addSql(`alter table \`zone_object\` add constraint \`zone_object_zone_id_foreign\` foreign key (\`zone_id\`) references \`zone\` (\`id\`) on update cascade;`);
this.addSql(`alter table \`zone_object\` add constraint \`zone_object_map_object_id_foreign\` foreign key (\`map_object_id\`) references \`map_object\` (\`id\`) on update cascade;`);
this.addSql(`alter table \`zone_object\` add constraint \`zone_object_zone_id_foreign\` foreign key (\`zone_id\`) references \`zone\` (\`id\`) on update cascade on delete cascade;`);
this.addSql(`alter table \`zone_object\` add constraint \`zone_object_map_object_id_foreign\` foreign key (\`map_object_id\`) references \`map_object\` (\`id\`) on update cascade on delete cascade;`);
}
}

18
package-lock.json generated
View File

@ -1784,9 +1784,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
"version": "20.17.10",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz",
"integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==",
"version": "20.17.11",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.11.tgz",
"integrity": "sha512-Ept5glCK35R8yeyIeYlRIZtX6SLRyqMhOFTgj5SOkMpLTdw3SEHI9fHx60xaUZ+V1aJxQJODE+7/j5ocZydYTg==",
"license": "MIT",
"dependencies": {
"undici-types": "~6.19.2"
@ -2457,9 +2457,9 @@
"license": "BSD-3-Clause"
},
"node_modules/bullmq": {
"version": "5.34.5",
"resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.34.5.tgz",
"integrity": "sha512-MHho9EOhLCTY3ZF+dd0wHv0VlY2FtpBcopMRsvj0kPra4TAwBFh2pik/s4WbX56cIfCE+VzfHIHy4xvqp3g1+Q==",
"version": "5.34.6",
"resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.34.6.tgz",
"integrity": "sha512-pRCYyO9RlkQWxdmKlrNnUthyFwurYXRYLVXD1YIx+nCCdhAOiHatD8FDHbsT/w2I31c0NWoMcfZiIGuipiF7Lg==",
"license": "MIT",
"dependencies": {
"cron-parser": "^4.9.0",
@ -5214,9 +5214,9 @@
}
},
"node_modules/mariadb/node_modules/@types/node": {
"version": "22.10.2",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz",
"integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==",
"version": "22.10.3",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.3.tgz",
"integrity": "sha512-DifAyw4BkrufCILvD3ucnuN8eydUfc/C1GlyrnI+LK6543w5/L3VeVgf05o3B4fqSXP1dKYLOZsKfutpxPzZrw==",
"license": "MIT",
"dependencies": {
"undici-types": "~6.20.0"

View File

@ -32,7 +32,7 @@ export class Character extends BaseEntity {
// Position
@ManyToOne()
zone!: Zone
zone!: Zone // @TODO: Update to spawn point when current zone is not found
@Property()
positionX = 0
@ -44,10 +44,10 @@ export class Character extends BaseEntity {
rotation = 0
// Customization
@ManyToOne()
@ManyToOne({ deleteRule: 'set null' })
characterType?: CharacterType | null | undefined
@ManyToOne()
@ManyToOne({ deleteRule: 'set null' })
characterHair?: CharacterHair | null | undefined
// Inventory

View File

@ -14,10 +14,10 @@ export class CharacterEquipment extends BaseEntity {
@Enum(() => CharacterEquipmentSlotType)
slot!: CharacterEquipmentSlotType
@ManyToOne(() => Character)
@ManyToOne({ deleteRule: 'cascade' })
character!: Character
@ManyToOne(() => CharacterItem)
@ManyToOne({ deleteRule: 'cascade' })
characterItem!: CharacterItem
setId(id: number) {

View File

@ -20,12 +20,9 @@ export class CharacterHair extends BaseEntity {
@Property()
isSelectable = false
@ManyToOne(() => Sprite, { nullable: true })
@ManyToOne({ nullable: true })
sprite?: Sprite
@OneToMany(() => Character, (character) => character.characterHair)
characters = new Collection<Character>(this)
setId(id: number) {
this.id = id
return this
@ -70,13 +67,4 @@ export class CharacterHair extends BaseEntity {
getSprite() {
return this.sprite
}
setCharacters(characters: Collection<Character>) {
this.characters = characters
return this
}
getCharacters() {
return this.characters
}
}

View File

@ -11,18 +11,15 @@ export class CharacterItem extends BaseEntity {
@PrimaryKey()
id!: number
@ManyToOne(() => Character)
@ManyToOne({ deleteRule: 'cascade' })
character!: Character
@ManyToOne(() => Item)
@ManyToOne({ deleteRule: 'cascade' })
item!: Item
@Property()
quantity!: number
@OneToMany(() => CharacterEquipment, (equipment) => equipment.characterItem)
characterEquipment = new Collection<CharacterEquipment>(this)
setId(id: number) {
this.id = id
return this
@ -58,13 +55,4 @@ export class CharacterItem extends BaseEntity {
getQuantity() {
return this.quantity
}
setCharacterEquipment(characterEquipment: Collection<CharacterEquipment>) {
this.characterEquipment = characterEquipment
return this
}
getCharacterEquipment() {
return this.characterEquipment
}
}

View File

@ -10,10 +10,10 @@ export class Chat extends BaseEntity {
@PrimaryKey()
id!: number
@ManyToOne(() => Character)
@ManyToOne({ deleteRule: 'cascade' })
character!: Character
@ManyToOne(() => Zone)
@ManyToOne({ deleteRule: 'cascade' })
zone!: Zone
@Property()

View File

@ -38,9 +38,6 @@ export class Item extends BaseEntity {
@Property()
updatedAt = new Date()
@OneToMany(() => CharacterItem, (characterItem) => characterItem.item)
characters = new Collection<CharacterItem>(this)
setId(id: UUID) {
this.id = id
return this
@ -121,13 +118,4 @@ export class Item extends BaseEntity {
getUpdatedAt() {
return this.updatedAt
}
setCharacters(characters: Collection<CharacterItem>) {
this.characters = characters
return this
}
getCharacters() {
return this.characters
}
}

View File

@ -42,9 +42,6 @@ export class MapObject extends BaseEntity {
@Property()
updatedAt = new Date()
@OneToMany(() => ZoneObject, (zoneObject) => zoneObject.mapObject)
zoneObjects = new Collection<ZoneObject>(this)
setId(id: UUID) {
this.id = id
return this
@ -143,13 +140,4 @@ export class MapObject extends BaseEntity {
getUpdatedAt() {
return this.updatedAt
}
setZoneObjects(zoneObjects: Collection<ZoneObject>) {
this.zoneObjects = zoneObjects
return this
}
getZoneObjects() {
return this.zoneObjects
}
}

View File

@ -9,7 +9,7 @@ export class PasswordResetToken extends BaseEntity {
@PrimaryKey()
id!: number
@ManyToOne(() => User)
@ManyToOne({ deleteRule: 'cascade' })
user!: User
@Property({ unique: true })

View File

@ -12,7 +12,7 @@ export class SpriteAction extends BaseEntity {
@PrimaryKey()
id = randomUUID()
@ManyToOne(() => Sprite)
@ManyToOne({ deleteRule: 'cascade' })
sprite!: Sprite
@Property()

View File

@ -29,6 +29,12 @@ export class Zone extends BaseEntity {
@Property()
pvp = false
@Property()
createdAt = new Date()
@Property()
updatedAt = new Date()
@OneToMany(() => ZoneEffect, (effect) => effect.zone)
zoneEffects = new Collection<ZoneEffect>(this)
@ -47,12 +53,6 @@ export class Zone extends BaseEntity {
@OneToMany(() => Chat, (chat) => chat.zone)
chats = new Collection<Chat>(this)
@Property()
createdAt = new Date()
@Property()
updatedAt = new Date()
setId(id: number) {
this.id = id
return this
@ -107,6 +107,24 @@ export class Zone extends BaseEntity {
return this.pvp
}
setCreatedAt(createdAt: Date) {
this.createdAt = createdAt
return this
}
getCreatedAt() {
return this.createdAt
}
setUpdatedAt(updatedAt: Date) {
this.updatedAt = updatedAt
return this
}
getUpdatedAt() {
return this.updatedAt
}
setZoneEffects(zoneEffects: Collection<ZoneEffect>) {
this.zoneEffects = zoneEffects
return this
@ -160,22 +178,4 @@ export class Zone extends BaseEntity {
getChats() {
return this.chats
}
setCreatedAt(createdAt: Date) {
this.createdAt = createdAt
return this
}
getCreatedAt() {
return this.createdAt
}
setUpdatedAt(updatedAt: Date) {
this.updatedAt = updatedAt
return this
}
getUpdatedAt() {
return this.updatedAt
}
}

View File

@ -12,7 +12,7 @@ export class ZoneEffect extends BaseEntity {
@PrimaryKey()
id = randomUUID()
@ManyToOne(() => Zone)
@ManyToOne({ deleteRule: 'cascade' })
zone!: Zone
@Property()

View File

@ -14,7 +14,7 @@ export class ZoneEventTile extends BaseEntity {
@PrimaryKey()
id = randomUUID()
@ManyToOne(() => Zone)
@ManyToOne({ deleteRule: 'cascade' })
zone!: Zone
@Enum(() => ZoneEventTileType)

View File

@ -13,10 +13,10 @@ export class ZoneEventTileTeleport extends BaseEntity {
@PrimaryKey()
id = randomUUID()
@OneToOne(() => ZoneEventTile)
@OneToOne({ deleteRule: 'cascade' })
zoneEventTile!: ZoneEventTile
@ManyToOne(() => Zone)
@ManyToOne({ deleteRule: 'cascade' })
toZone!: Zone
@Property()

View File

@ -14,10 +14,10 @@ export class ZoneObject extends BaseEntity {
@PrimaryKey()
id = randomUUID()
@ManyToOne(() => Zone)
@ManyToOne({ deleteRule: 'cascade' })
zone!: Zone
@ManyToOne(() => MapObject)
@ManyToOne({ deleteRule: 'cascade' })
mapObject!: MapObject
@Property()