mirror of
https://github.com/sct/overseerr.git
synced 2025-10-02 08:35:39 +02:00
Request Model (#79)
* feat(api): request model Also adds request binding to search/discover results * fix(api): rename Request to MediaRequest and update nextjs tsconfig * refactor(api): move related request fetching code into MediaRequest entity
This commit is contained in:
71
server/entity/MediaRequest.ts
Normal file
71
server/entity/MediaRequest.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
import {
|
||||
Entity,
|
||||
PrimaryGeneratedColumn,
|
||||
ManyToOne,
|
||||
Column,
|
||||
CreateDateColumn,
|
||||
UpdateDateColumn,
|
||||
getRepository,
|
||||
In,
|
||||
} from 'typeorm';
|
||||
import { User } from './User';
|
||||
|
||||
export enum Status {
|
||||
PENDING,
|
||||
APPROVED,
|
||||
DECLINED,
|
||||
AVAILABLE,
|
||||
}
|
||||
|
||||
@Entity()
|
||||
export class MediaRequest {
|
||||
public static async getRelatedRequests(
|
||||
mediaIds: number | number[]
|
||||
): Promise<MediaRequest[]> {
|
||||
const requestRepository = getRepository(MediaRequest);
|
||||
|
||||
try {
|
||||
let finalIds: number[];
|
||||
if (!Array.isArray(mediaIds)) {
|
||||
finalIds = [mediaIds];
|
||||
} else {
|
||||
finalIds = mediaIds;
|
||||
}
|
||||
|
||||
const requests = await requestRepository.find({ mediaId: In(finalIds) });
|
||||
|
||||
return requests;
|
||||
} catch (e) {
|
||||
console.error(e.messaage);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
@PrimaryGeneratedColumn()
|
||||
public id: number;
|
||||
|
||||
@Column()
|
||||
public mediaId: number;
|
||||
|
||||
@Column()
|
||||
public mediaType: 'movie' | 'tv';
|
||||
|
||||
@Column({ type: 'integer' })
|
||||
public status: Status;
|
||||
|
||||
@ManyToOne(() => User, (user) => user.requests, { eager: true })
|
||||
public requestedBy: User;
|
||||
|
||||
@ManyToOne(() => User, { nullable: true })
|
||||
public modifiedBy?: User;
|
||||
|
||||
@CreateDateColumn()
|
||||
public createdAt: Date;
|
||||
|
||||
@UpdateDateColumn()
|
||||
public updatedAt: Date;
|
||||
|
||||
constructor(init?: Partial<User>) {
|
||||
Object.assign(this, init);
|
||||
}
|
||||
}
|
@@ -4,8 +4,10 @@ import {
|
||||
Column,
|
||||
CreateDateColumn,
|
||||
UpdateDateColumn,
|
||||
OneToMany,
|
||||
} from 'typeorm';
|
||||
import { Permission, hasPermission } from '../lib/permissions';
|
||||
import { MediaRequest } from './MediaRequest';
|
||||
|
||||
@Entity()
|
||||
export class User {
|
||||
@@ -21,7 +23,13 @@ export class User {
|
||||
@Column({ unique: true })
|
||||
public email: string;
|
||||
|
||||
@Column({ nullable: true })
|
||||
@Column()
|
||||
public username: string;
|
||||
|
||||
@Column({ select: false })
|
||||
public plexId: number;
|
||||
|
||||
@Column({ nullable: true, select: false })
|
||||
public plexToken?: string;
|
||||
|
||||
@Column({ type: 'integer', default: 0 })
|
||||
@@ -30,6 +38,9 @@ export class User {
|
||||
@Column()
|
||||
public avatar: string;
|
||||
|
||||
@OneToMany(() => MediaRequest, (request) => request.requestedBy)
|
||||
public requests: MediaRequest;
|
||||
|
||||
@CreateDateColumn()
|
||||
public createdAt: Date;
|
||||
|
||||
|
Reference in New Issue
Block a user