feat: Backend typing and openapi schema & codegen

This commit is contained in:
Aleksi Lassila
2024-03-26 23:01:11 +02:00
parent b29907c0e2
commit 7318a0fa99
22 changed files with 376 additions and 179 deletions

View File

@@ -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;
}