mirror of
https://github.com/aleksilassila/reiverr.git
synced 2026-04-26 18:55:12 +02:00
108 lines
2.2 KiB
TypeScript
108 lines
2.2 KiB
TypeScript
import { ApiProperty } from '@nestjs/swagger';
|
|
import {
|
|
Column,
|
|
Entity,
|
|
PrimaryGeneratedColumn,
|
|
UpdateDateColumn,
|
|
} from 'typeorm';
|
|
import { TmdbMovieFull, TmdbSeriesFull } from './tmdb/tmdb.dto';
|
|
import { TMDB_CACHE_TTL } from 'src/consts';
|
|
|
|
@Entity()
|
|
export class MovieMetadata {
|
|
@ApiProperty({ required: false, type: 'string' })
|
|
@PrimaryGeneratedColumn('uuid')
|
|
id: string;
|
|
|
|
@ApiProperty({ required: true, type: 'string' })
|
|
@Column({ unique: true })
|
|
tmdbId: string;
|
|
|
|
@ApiProperty({ required: false, type: 'object' })
|
|
@Column('json')
|
|
tmdbMovie: TmdbMovieFull;
|
|
|
|
@ApiProperty({ type: 'string' })
|
|
@UpdateDateColumn()
|
|
updatedAt: Date;
|
|
|
|
/**
|
|
* Requires update before serving
|
|
*/
|
|
isOutdated() {
|
|
const releaseDate = this.tmdbMovie?.release_date;
|
|
|
|
if (!this.tmdbMovie) return true;
|
|
if (!this.updatedAt) return true;
|
|
if (
|
|
releaseDate &&
|
|
new Date() > new Date(releaseDate) &&
|
|
new Date(this.updatedAt) < new Date(releaseDate)
|
|
)
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Can be lazily updated after serving
|
|
*/
|
|
isStale() {
|
|
if (this.isOutdated()) return true;
|
|
|
|
if (new Date().getTime() - this.updatedAt.getTime() > TMDB_CACHE_TTL)
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
@Entity()
|
|
export class SeriesMetadata {
|
|
@ApiProperty({ required: false, type: 'string' })
|
|
@PrimaryGeneratedColumn('uuid')
|
|
id: string;
|
|
|
|
@ApiProperty({ required: true, type: 'string' })
|
|
@Column({ unique: true })
|
|
tmdbId: string;
|
|
|
|
@ApiProperty({ required: false, type: 'object' })
|
|
@Column('json')
|
|
tmdbSeries: TmdbSeriesFull;
|
|
|
|
@ApiProperty({ type: 'string' })
|
|
@UpdateDateColumn()
|
|
updatedAt: Date;
|
|
|
|
/**
|
|
* Requires update before serving
|
|
*/
|
|
isOutdated() {
|
|
const nextAirDate = this.tmdbSeries?.next_episode_to_air?.air_date;
|
|
|
|
if (!this.tmdbSeries) return true;
|
|
if (!this.updatedAt) return true;
|
|
if (
|
|
nextAirDate &&
|
|
new Date() > new Date(nextAirDate) &&
|
|
new Date(this.updatedAt) < new Date(nextAirDate)
|
|
)
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Can be lazily updated after serving
|
|
*/
|
|
isStale() {
|
|
if (this.isOutdated()) return true;
|
|
|
|
if (new Date().getTime() - this.updatedAt.getTime() > TMDB_CACHE_TTL)
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
}
|