all-files: implement titles (shows, movies) list

This commit is contained in:
jurgis
2022-12-10 19:47:52 +01:00
parent 75ba458b59
commit 80ba785798
6 changed files with 82 additions and 18 deletions
@@ -0,0 +1,42 @@
import { Column, Entity, JoinColumn, ManyToOne, PrimaryColumn } from 'typeorm';
import { TitleEntity } from './title.entity';
@Entity('files')
export class FileEntity {
@PrimaryColumn()
id: number;
@Column()
path: string;
@Column()
deleted: boolean;
@Column()
size: number;
@Column({ name: 'relative_path' })
relativePath: string;
@Column({ name: 'file_name' })
fileName: string;
@Column()
infos: string;
@Column()
info: string;
@Column({ name: 'title_id' })
titleId: number;
@ManyToOne(() => TitleEntity, (title) => title.files)
@JoinColumn({ name: 'title_id' })
title: TitleEntity;
@Column()
season: number | null;
@Column()
duration: number;
}
+8 -4
View File
@@ -1,14 +1,18 @@
import { Column, Entity, PrimaryColumn } from 'typeorm';
import { Column, Entity, OneToMany, PrimaryColumn } from 'typeorm';
import { TitleTypeEnum } from '../Enum/title-type.enum';
import { FileEntity } from './file.entity';
@Entity('titles')
export class TitleEntity {
@PrimaryColumn({ name: 'id' })
@PrimaryColumn()
id: number;
@Column({ name: 'title' })
@Column()
title: string;
@Column({ name: 'type' })
@Column()
type: TitleTypeEnum;
@OneToMany(() => FileEntity, (file) => file.title)
files: FileEntity[];
}
+5 -9
View File
@@ -1,6 +1,7 @@
import { Controller, Get, Param } from '@nestjs/common';
import ApiResponse from '../Dto/api-response.dto';
import { AllFilesService } from './all-files.service';
import { TitleTypeEnum } from './Enum/title-type.enum';
@Controller('api/all')
export class AllFilesController {
@@ -11,19 +12,14 @@ export class AllFilesController {
return this.allFilesService.getMenu();
}
@Get('titles')
async titles() {
return this.allFilesService.getAllTitles();
}
@Get('show')
getShows() {
return { will: 'show shows list' };
getShows(): Promise<ApiResponse> {
return this.allFilesService.getListOfTitles(TitleTypeEnum.show);
}
@Get('movie')
getMovies() {
return { will: 'show movies list' };
async getMovies(): Promise<ApiResponse> {
return this.allFilesService.getListOfTitles(TitleTypeEnum.movie);
}
@Get('play')
+2 -1
View File
@@ -4,9 +4,10 @@ import { AllFilesService } from './all-files.service';
import { KodiApiResponseFactory } from '../kodi-api-response.factory';
import { TypeOrmModule } from '@nestjs/typeorm';
import { TitleEntity } from './Entity/title.entity';
import { FileEntity } from './Entity/file.entity';
@Module({
imports: [TypeOrmModule.forFeature([TitleEntity])],
imports: [TypeOrmModule.forFeature([TitleEntity, FileEntity])],
controllers: [AllFilesController],
providers: [AllFilesService, KodiApiResponseFactory],
})
+23 -3
View File
@@ -4,6 +4,8 @@ import { KodiApiResponseFactory } from '../kodi-api-response.factory';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { TitleEntity } from './Entity/title.entity';
import { FileEntity } from './Entity/file.entity';
import { TitleTypeEnum } from './Enum/title-type.enum';
@Injectable()
export class AllFilesService {
@@ -11,6 +13,8 @@ export class AllFilesService {
private readonly koiApiResponseFactory: KodiApiResponseFactory,
@InjectRepository(TitleEntity)
private titleRepository: Repository<TitleEntity>,
@InjectRepository(FileEntity)
private fileRepository: Repository<FileEntity>,
) {}
getMenu(): ApiResponse {
@@ -29,8 +33,24 @@ export class AllFilesService {
return apiResponse;
}
async getAllTitles() {
return this.titleRepository.find();
//return { todo: true };
async getListOfTitles(type: TitleTypeEnum): Promise<ApiResponse> {
const entities = await this.titleRepository
.createQueryBuilder()
.setFindOptions({ relations: { files: true } })
.where('type = :type', { type: type })
.andWhere('deleted = :deleted', { deleted: false })
.getMany();
const response = this.koiApiResponseFactory.createApiResponse();
response.setTitle('All ' + type + 's');
entities.forEach((entity) => {
response
.createItem()
.setLabel(entity.title)
.setToFolder()
.setPlot(entity.files.length + ' files');
});
return response;
}
}
+2 -1
View File
@@ -3,6 +3,7 @@ import { TypeOrmModuleOptions } from '@nestjs/typeorm';
import { LrtCategory } from '../KodiApi/LRT/LrtApiClient/Entity/lrt-category.entity';
import { join } from 'path';
import { TitleEntity } from '../KodiApi/AllFiles/Entity/title.entity';
import { FileEntity } from '../KodiApi/AllFiles/Entity/file.entity';
env.config();
@@ -21,7 +22,7 @@ export class ConfigService {
return {
type: 'sqlite',
database: this.getEnv('DB_PATH'),
entities: [LrtCategory, TitleEntity],
entities: [LrtCategory, TitleEntity, FileEntity],
};
}