mirror of
https://github.com/aleksilassila/reiverr.git
synced 2026-04-25 10:15:11 +02:00
feat: Backend typing and openapi schema & codegen
This commit is contained in:
@@ -1,6 +1,60 @@
|
||||
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
|
||||
import { ApiProperty } from '@nestjs/swagger';
|
||||
|
||||
const DEFAULT_SETTINGS = {
|
||||
export class SonarrSettings {
|
||||
@ApiProperty({ required: true })
|
||||
apiKey: string;
|
||||
@ApiProperty({ required: true })
|
||||
baseUrl: string;
|
||||
@ApiProperty({ required: true })
|
||||
qualityProfileId: number;
|
||||
@ApiProperty({ required: true })
|
||||
rootFolderPath: string;
|
||||
@ApiProperty({ required: true })
|
||||
languageProfileId: number;
|
||||
}
|
||||
|
||||
export class RadarrSettings {
|
||||
@ApiProperty({ required: true })
|
||||
apiKey: string;
|
||||
@ApiProperty({ required: true })
|
||||
baseUrl: string;
|
||||
@ApiProperty({ required: true })
|
||||
qualityProfileId: number;
|
||||
@ApiProperty({ required: true })
|
||||
rootFolderPath: string;
|
||||
}
|
||||
|
||||
export class JellyfinSettings {
|
||||
@ApiProperty({ required: true })
|
||||
apiKey: string;
|
||||
@ApiProperty({ required: true })
|
||||
baseUrl: string;
|
||||
@ApiProperty({ required: true })
|
||||
userId: string;
|
||||
}
|
||||
|
||||
export class Settings {
|
||||
@ApiProperty({ required: true })
|
||||
autoplayTrailers: boolean;
|
||||
@ApiProperty({ required: true })
|
||||
language: string;
|
||||
@ApiProperty({ required: true })
|
||||
animationDuration: number;
|
||||
// discover: {
|
||||
// region: string,
|
||||
// excludeLibraryItems: true,
|
||||
// includedLanguages: 'en'
|
||||
// },
|
||||
@ApiProperty({ required: true, type: SonarrSettings })
|
||||
sonarr: SonarrSettings;
|
||||
@ApiProperty({ required: true, type: RadarrSettings })
|
||||
radarr: RadarrSettings;
|
||||
@ApiProperty({ required: true, type: JellyfinSettings })
|
||||
jellyfin: JellyfinSettings;
|
||||
}
|
||||
|
||||
const DEFAULT_SETTINGS: Settings = {
|
||||
autoplayTrailers: true,
|
||||
language: 'en',
|
||||
animationDuration: 300,
|
||||
@@ -31,45 +85,23 @@ const DEFAULT_SETTINGS = {
|
||||
|
||||
@Entity()
|
||||
export class User {
|
||||
@ApiProperty({ required: true })
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id: string;
|
||||
|
||||
@ApiProperty({ required: true })
|
||||
@Column({ unique: true })
|
||||
name: string;
|
||||
|
||||
@ApiProperty({ required: true })
|
||||
@Column()
|
||||
password: string;
|
||||
|
||||
@ApiProperty({ required: true })
|
||||
@Column()
|
||||
isAdmin: boolean = false;
|
||||
|
||||
@ApiProperty({ required: true, type: Settings })
|
||||
@Column('json', { default: JSON.stringify(DEFAULT_SETTINGS) })
|
||||
settings: {
|
||||
autoplayTrailers: boolean;
|
||||
language: string;
|
||||
animationDuration: number;
|
||||
// discover: {
|
||||
// region: string,
|
||||
// excludeLibraryItems: true,
|
||||
// includedLanguages: 'en'
|
||||
// },
|
||||
sonarr: {
|
||||
apiKey: string;
|
||||
baseUrl: string;
|
||||
qualityProfileId: number;
|
||||
rootFolderPath: string;
|
||||
languageProfileId: number;
|
||||
};
|
||||
radarr: {
|
||||
apiKey: string;
|
||||
baseUrl: string;
|
||||
qualityProfileId: number;
|
||||
rootFolderPath: string;
|
||||
};
|
||||
jellyfin: {
|
||||
apiKey: string;
|
||||
baseUrl: string;
|
||||
userId: string;
|
||||
};
|
||||
} = DEFAULT_SETTINGS;
|
||||
settings = DEFAULT_SETTINGS;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user