feat: show recently played from library on front pages

This commit is contained in:
Aleksi Lassila
2025-02-08 05:40:27 +02:00
parent 4a20351911
commit 9c1ec7f6ea
10 changed files with 144 additions and 35 deletions

View File

@@ -17,6 +17,7 @@ export class Movie {
@Column({ unique: true })
tmdbId: string;
@ApiProperty({ required: false, type: 'object' })
@Column('json')
tmdbMovie: TmdbMovieFull;
@@ -34,6 +35,7 @@ export class Series {
@Column({ unique: true })
tmdbId: string;
@ApiProperty({ required: false, type: 'object' })
@Column('json')
tmdbSeries: TmdbSeriesFull;

View File

@@ -43,7 +43,10 @@ export class LibraryController {
): Promise<PaginatedResponseDto<LibraryItemDto>> {
// const user = await this.userService.findOne(userId);
const items = await this.libraryService.getLibraryItems(userId, pagination);
const items = await this.libraryService.getLibraryItemsWithMetadata(
userId,
pagination,
);
return {
items,

View File

@@ -2,6 +2,7 @@ import { ApiProperty } from '@nestjs/swagger';
import { MovieDto } from 'src/metadata/metadata.dto';
import { PlayStateDto } from '../play-state/play-state.dto';
import { MediaType } from 'src/common/common.dto';
import { Series } from 'src/metadata/metadata.entity';
export class LibraryItemDto {
@ApiProperty()
@@ -14,5 +15,8 @@ export class LibraryItemDto {
playStates?: PlayStateDto[];
@ApiProperty({ type: MovieDto, required: false })
metadata?: MovieDto; // TODO
movieMetadata?: MovieDto;
@ApiProperty({ type: Series, required: false })
seriesMetadata?: Series;
}

View File

@@ -3,15 +3,41 @@ import { USER_LIBRARY_REPOSITORY } from '../user.providers';
import { Repository } from 'typeorm';
import { LibraryItem } from './library.entity';
import { MediaType, PaginationParamsDto } from 'src/common/common.dto';
import { LibraryItemDto } from './library.dto';
import { MetadataService } from 'src/metadata/metadata.service';
@Injectable()
export class LibraryService {
constructor(
@Inject(USER_LIBRARY_REPOSITORY)
private readonly libraryRepository: Repository<LibraryItem>,
private readonly metadataService: MetadataService,
) {}
async getLibraryItems(
async getLibraryItemsWithMetadata(
userId: string,
pagination: PaginationParamsDto,
): Promise<LibraryItemDto[]> {
const items = await this.getLibraryItems(userId, pagination);
return Promise.all(
items.map(async (item) => {
return {
...item,
movieMetadata:
item.mediaType === MediaType.Movie
? await this.metadataService.getMovieByTmdbId(item.tmdbId)
: undefined,
seriesMetadata:
item.mediaType === MediaType.Series
? await this.metadataService.getSeriesByTmdbId(item.tmdbId)
: undefined,
};
}),
);
}
private async getLibraryItems(
userId: string,
pagination: PaginationParamsDto,
): Promise<LibraryItem[]> {

View File

@@ -10,9 +10,14 @@ import { PlayStateService } from './play-state/play-state.service';
import { LibraryController } from './library/library.controller';
import { PlayStateController } from './play-state/play-state.controller';
import { SourcePluginsModule } from 'src/source-plugins/source-plugins.module';
import { MetadataModule } from 'src/metadata/metadata.module';
@Module({
imports: [DatabaseModule, forwardRef(() => SourcePluginsModule)],
imports: [
DatabaseModule,
forwardRef(() => SourcePluginsModule),
forwardRef(() => MetadataModule),
],
providers: [
...userProviders,
UsersService,