import { Entity, PrimaryGeneratedColumn, Column, BaseEntity, ManyToOne, OneToMany, OneToOne, JoinColumn, CreateDateColumn, Not, IsNull } from "typeorm"; import { MovieInfo } from "./MovieInfo"; import { MovieTorrent } from "./MovieTorrent"; import { User } from "./User"; @Entity() export class MovieTicket extends BaseEntity { @PrimaryGeneratedColumn() id!: number; @Column({ type: "int", nullable: true }) tmdbId!: number | null; @Column({ type: "varchar", length: 27, nullable: true }) imdbId!: string | null; @Column({ type: "varchar" }) title!: string; @Column({ type: "year", nullable: true }) year!: number | null; @CreateDateColumn() createdAt!: Date; @Column({ default: false }) isFulfilled!: boolean; @Column({ default: false }) isCanceled!: boolean; @Column({ default: false }) isStale!: boolean; @ManyToOne(() => User, user => user.movieTickets) user!: User; @OneToMany(() => MovieTorrent, torrent => torrent.movieTicket) torrents!: MovieTorrent[]; @OneToOne(() => MovieInfo, { nullable: true }) @JoinColumn() info!: MovieInfo | null; /** * Fulfill the current ticket instance */ async fulfill() { this.isFulfilled = true; return await this.save(); } }