@ -1,5 +1,5 @@ | |||||
UID=1000 | |||||
GID=1000 | |||||
USER_ID=1000 | |||||
GROUP_ID=1000 | |||||
DOCKER_BUILDKIT=1 | DOCKER_BUILDKIT=1 | ||||
COMPOSE_DOCKER_CLI_BUILD=1 | COMPOSE_DOCKER_CLI_BUILD=1 |
@ -1,23 +0,0 @@ | |||||
import { Entity, PrimaryGeneratedColumn, Column, BaseEntity } from "typeorm"; | |||||
@Entity() | |||||
export class MovieInfo extends BaseEntity | |||||
{ | |||||
@PrimaryGeneratedColumn() | |||||
id!: number; | |||||
@Column({ type: "text", nullable: true }) | |||||
overview!: string | null; | |||||
@Column({ type: "int", nullable: true }) | |||||
runtime!: number | null; | |||||
@Column({ type: "char", length: 10, nullable: true }) | |||||
releaseDate!: string | null; | |||||
@Column({ type: "varchar", length: 32, nullable: true }) | |||||
backdropPath!: string | null; | |||||
@Column({ type: "varchar", length: 32, nullable: true }) | |||||
posterPath!: string | null; | |||||
} |
@ -1,11 +0,0 @@ | |||||
import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from "typeorm"; | |||||
@Entity() | |||||
export class MovieQuota extends BaseEntity | |||||
{ | |||||
@PrimaryGeneratedColumn() | |||||
id!: number; | |||||
@Column({ default: 5 }) | |||||
moviesPerWeek!: number; | |||||
} |
@ -1,53 +0,0 @@ | |||||
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(); | |||||
} | |||||
} |
@ -1,18 +0,0 @@ | |||||
import { Entity, PrimaryGeneratedColumn, Column, BaseEntity, ManyToOne } from "typeorm"; | |||||
import { MovieTicket } from "./MovieTicket"; | |||||
@Entity() | |||||
export class MovieTorrent extends BaseEntity | |||||
{ | |||||
@PrimaryGeneratedColumn() | |||||
id!: number; | |||||
@Column() | |||||
infoHash!: string; | |||||
@Column() | |||||
diskName!: string; | |||||
@ManyToOne(() => MovieTicket, ticket => ticket.torrents) | |||||
movieTicket!: MovieTicket; | |||||
} |
@ -1,39 +0,0 @@ | |||||
import { randomBytes } from "crypto"; | |||||
import { Entity, PrimaryGeneratedColumn, Column, BaseEntity } from "typeorm"; | |||||
@Entity() | |||||
export class RegisterToken extends BaseEntity | |||||
{ | |||||
@PrimaryGeneratedColumn() | |||||
id!: number; | |||||
@Column() | |||||
token!: string | |||||
/** | |||||
* Check if the provided token is valid | |||||
*/ | |||||
public static async isValid(token: string) { | |||||
if (typeof token !== "string") { | |||||
return false; | |||||
} | |||||
return Boolean(token) && await RegisterToken.count({token}) > 0; | |||||
} | |||||
/** | |||||
* Create a new registration token and insert it into the database | |||||
*/ | |||||
public static generate() { | |||||
return new Promise<RegisterToken>((resolve, reject) => { | |||||
randomBytes(48, async (err, result) => { | |||||
if (err) { | |||||
reject(err); | |||||
} else { | |||||
let token = new RegisterToken(); | |||||
token.token = result.toString("hex"); | |||||
resolve(await token.save()); | |||||
} | |||||
}); | |||||
}); | |||||
} | |||||
} |
@ -1,32 +0,0 @@ | |||||
import { Entity, PrimaryGeneratedColumn, Column, BaseEntity, OneToMany, OneToOne, JoinColumn, CreateDateColumn, MoreThanOrEqual } from "typeorm"; | |||||
import { MovieTicket } from "./MovieTicket"; | |||||
import { MovieQuota } from "./MovieQuota"; | |||||
@Entity() | |||||
export class User extends BaseEntity | |||||
{ | |||||
@PrimaryGeneratedColumn() | |||||
id!: number; | |||||
@Column() | |||||
isAdmin!: boolean; | |||||
@Column({ length: 50 }) | |||||
name!: string; | |||||
@Column({ length: 255 }) | |||||
email!: string; | |||||
@Column({ type: "char", length: 60 }) | |||||
password!: string; | |||||
@CreateDateColumn() | |||||
createdAt!: Date; | |||||
@OneToOne(() => MovieQuota, { nullable: true }) | |||||
@JoinColumn() | |||||
quota!: MovieQuota | null; | |||||
@OneToMany(() => User, user => user.movieTickets) | |||||
movieTickets!: MovieTicket[]; | |||||
} |
@ -1,6 +0,0 @@ | |||||
export * from "./MovieInfo"; | |||||
export * from "./MovieQuota"; | |||||
export * from "./MovieTicket"; | |||||
export * from "./MovieTorrent"; | |||||
export * from "./RegisterToken"; | |||||
export * from "./User"; |