You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

56 lines
1.4 KiB

import { BaseEntity, Column, Entity, In, PrimaryColumn } from "typeorm";
@Entity()
export class PlexMovie extends BaseEntity
{
@PrimaryColumn({ length: 27 })
imdbId!: string;
@Column({ type: "int", nullable: true, unique: true })
tmdbId!: number|null;
@Column()
plexKey!: number;
/**
* Check if a movie is on Plex given its TMDb ID
*/
public static async findPlexKey(tmdbId: number|string) {
return (await PlexMovie.findOne({ where: { tmdbId } }))?.plexKey ?? null;
}
/**
* Check if the given movie exists on Plex
*/
public static async exists(tmdbId: number|string) {
return (await PlexMovie.count({ where: { tmdbId } })) > 0;
}
/**
* Get the set of IMDb IDs stored in the library
*/
public static async imdbSet() {
let rows = await PlexMovie.createQueryBuilder("plex_movie")
.select("imdbId")
.getRawMany();
return new Set(rows.map(row => <string>row.imdbId));
}
/**
* Insert a set of IMDb IDs into the database
*/
public static async insertMovies(movies: { imdbId: string, plexKey: number }[]) {
await PlexMovie.createQueryBuilder()
.insert()
.into("plex_movie")
.values([...movies].map(({imdbId, plexKey}) => ({ imdbId, tmdbId: null, plexKey })))
.execute();
}
/**
* Remove the given set of IMDb IDs from the library
*/
public static async removeImdbSet(imdbIds: Set<string>) {
await PlexMovie.delete({ imdbId: In([...imdbIds]) });
}
}