mirror of
https://github.com/sakaljurgis/kodi-api-server.git
synced 2026-07-08 20:37:41 +00:00
all-files: implement titles (shows, movies) list
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
@@ -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 { TitleTypeEnum } from '../Enum/title-type.enum';
|
||||||
|
import { FileEntity } from './file.entity';
|
||||||
|
|
||||||
@Entity('titles')
|
@Entity('titles')
|
||||||
export class TitleEntity {
|
export class TitleEntity {
|
||||||
@PrimaryColumn({ name: 'id' })
|
@PrimaryColumn()
|
||||||
id: number;
|
id: number;
|
||||||
|
|
||||||
@Column({ name: 'title' })
|
@Column()
|
||||||
title: string;
|
title: string;
|
||||||
|
|
||||||
@Column({ name: 'type' })
|
@Column()
|
||||||
type: TitleTypeEnum;
|
type: TitleTypeEnum;
|
||||||
|
|
||||||
|
@OneToMany(() => FileEntity, (file) => file.title)
|
||||||
|
files: FileEntity[];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { Controller, Get, Param } from '@nestjs/common';
|
import { Controller, Get, Param } from '@nestjs/common';
|
||||||
import ApiResponse from '../Dto/api-response.dto';
|
import ApiResponse from '../Dto/api-response.dto';
|
||||||
import { AllFilesService } from './all-files.service';
|
import { AllFilesService } from './all-files.service';
|
||||||
|
import { TitleTypeEnum } from './Enum/title-type.enum';
|
||||||
|
|
||||||
@Controller('api/all')
|
@Controller('api/all')
|
||||||
export class AllFilesController {
|
export class AllFilesController {
|
||||||
@@ -11,19 +12,14 @@ export class AllFilesController {
|
|||||||
return this.allFilesService.getMenu();
|
return this.allFilesService.getMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get('titles')
|
|
||||||
async titles() {
|
|
||||||
return this.allFilesService.getAllTitles();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Get('show')
|
@Get('show')
|
||||||
getShows() {
|
getShows(): Promise<ApiResponse> {
|
||||||
return { will: 'show shows list' };
|
return this.allFilesService.getListOfTitles(TitleTypeEnum.show);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get('movie')
|
@Get('movie')
|
||||||
getMovies() {
|
async getMovies(): Promise<ApiResponse> {
|
||||||
return { will: 'show movies list' };
|
return this.allFilesService.getListOfTitles(TitleTypeEnum.movie);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get('play')
|
@Get('play')
|
||||||
|
|||||||
@@ -4,9 +4,10 @@ import { AllFilesService } from './all-files.service';
|
|||||||
import { KodiApiResponseFactory } from '../kodi-api-response.factory';
|
import { KodiApiResponseFactory } from '../kodi-api-response.factory';
|
||||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
import { TitleEntity } from './Entity/title.entity';
|
import { TitleEntity } from './Entity/title.entity';
|
||||||
|
import { FileEntity } from './Entity/file.entity';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [TypeOrmModule.forFeature([TitleEntity])],
|
imports: [TypeOrmModule.forFeature([TitleEntity, FileEntity])],
|
||||||
controllers: [AllFilesController],
|
controllers: [AllFilesController],
|
||||||
providers: [AllFilesService, KodiApiResponseFactory],
|
providers: [AllFilesService, KodiApiResponseFactory],
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import { KodiApiResponseFactory } from '../kodi-api-response.factory';
|
|||||||
import { InjectRepository } from '@nestjs/typeorm';
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
import { Repository } from 'typeorm';
|
import { Repository } from 'typeorm';
|
||||||
import { TitleEntity } from './Entity/title.entity';
|
import { TitleEntity } from './Entity/title.entity';
|
||||||
|
import { FileEntity } from './Entity/file.entity';
|
||||||
|
import { TitleTypeEnum } from './Enum/title-type.enum';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AllFilesService {
|
export class AllFilesService {
|
||||||
@@ -11,6 +13,8 @@ export class AllFilesService {
|
|||||||
private readonly koiApiResponseFactory: KodiApiResponseFactory,
|
private readonly koiApiResponseFactory: KodiApiResponseFactory,
|
||||||
@InjectRepository(TitleEntity)
|
@InjectRepository(TitleEntity)
|
||||||
private titleRepository: Repository<TitleEntity>,
|
private titleRepository: Repository<TitleEntity>,
|
||||||
|
@InjectRepository(FileEntity)
|
||||||
|
private fileRepository: Repository<FileEntity>,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
getMenu(): ApiResponse {
|
getMenu(): ApiResponse {
|
||||||
@@ -29,8 +33,24 @@ export class AllFilesService {
|
|||||||
return apiResponse;
|
return apiResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
async getAllTitles() {
|
async getListOfTitles(type: TitleTypeEnum): Promise<ApiResponse> {
|
||||||
return this.titleRepository.find();
|
const entities = await this.titleRepository
|
||||||
//return { todo: true };
|
.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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { TypeOrmModuleOptions } from '@nestjs/typeorm';
|
|||||||
import { LrtCategory } from '../KodiApi/LRT/LrtApiClient/Entity/lrt-category.entity';
|
import { LrtCategory } from '../KodiApi/LRT/LrtApiClient/Entity/lrt-category.entity';
|
||||||
import { join } from 'path';
|
import { join } from 'path';
|
||||||
import { TitleEntity } from '../KodiApi/AllFiles/Entity/title.entity';
|
import { TitleEntity } from '../KodiApi/AllFiles/Entity/title.entity';
|
||||||
|
import { FileEntity } from '../KodiApi/AllFiles/Entity/file.entity';
|
||||||
|
|
||||||
env.config();
|
env.config();
|
||||||
|
|
||||||
@@ -21,7 +22,7 @@ export class ConfigService {
|
|||||||
return {
|
return {
|
||||||
type: 'sqlite',
|
type: 'sqlite',
|
||||||
database: this.getEnv('DB_PATH'),
|
database: this.getEnv('DB_PATH'),
|
||||||
entities: [LrtCategory, TitleEntity],
|
entities: [LrtCategory, TitleEntity, FileEntity],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user