import { Column, Entity, JoinTable, ManyToMany, OneToMany, PrimaryGeneratedColumn } from 'typeorm'; import { WorkCharacter } from './work-character'; import { World } from './world'; import { WorldCharacterName } from './world-character-name'; /** * This entity describes a canon character in a fictional world. */ @Entity() export class WorldCharacter implements IdentifiableEntityInterface, MultiNamedEntityInterface, HierarchicalEntityInterface { @PrimaryGeneratedColumn() public id!: number; @Column({ nullable: false, default: '', }) public nameCanonical!: string; @OneToMany(() => WorldCharacterName, (worldCharacterName: WorldCharacterName) => worldCharacterName.entity) public names!: Promise; /** * the characters in works which are based on this one */ @ManyToMany(() => WorkCharacter, (workCharacter: WorkCharacter) => workCharacter.worldCharacters) public workCharacters!: Promise; /** * the fictional worlds this character is a part of */ @ManyToMany(() => World, (world: World) => world.worldCharacters) public worlds!: Promise; @ManyToMany(() => WorldCharacter, (worldCharacter: WorldCharacter) => worldCharacter.children) @JoinTable() public parents!: Promise; @ManyToMany(() => WorldCharacter, (worldCharacter: WorldCharacter) => worldCharacter.parents) public children!: Promise; }