feat: rewrite data fetching, refreshers, improved fetching performance

This commit is contained in:
Aleksi Lassila
2025-03-30 17:03:04 +03:00
parent d9e8b6ca3f
commit 23fec9d8df
16 changed files with 442 additions and 287 deletions

View File

@@ -68,12 +68,7 @@ export class LibraryController {
direction,
});
return {
...response,
items: await Promise.all(
response.items.map((i) => this.libraryService.getLibraryItemDto(i)),
),
};
return response
}
@Get('catalogue/:sourceId')

View File

@@ -1,6 +1,8 @@
import { ApiProperty, PickType } from '@nestjs/swagger';
import { TmdbItemDto } from 'src/metadata/tmdb/tmdb.dto';
import { LibraryItem } from './library.entity';
import { PlayStateDto } from '../play-state/play-state.dto';
import { PlayState } from '../play-state/play-state.entity';
export enum OrderDirection {
Asc = 'asc',
@@ -44,6 +46,9 @@ export class LibraryItemDto extends PickType(LibraryItem, [
@ApiProperty()
tmdbItem: TmdbItemDto;
@ApiProperty({ type: PlayStateDto, required: false })
lastPlayState?: PlayState;
@ApiProperty({ required: false })
watched?: boolean;
}

View File

@@ -47,7 +47,7 @@ export class LibraryService {
status?: MyListStatusFilter;
order?: MyListOrder;
direction?: OrderDirection;
}): Promise<PaginatedResponseDto<LibraryItem>> {
}): Promise<PaginatedResponseDto<LibraryItemDto>> {
const {
userId,
pagination,
@@ -191,7 +191,9 @@ export class LibraryService {
// console.log(builder.getQuery());
return {
items,
items: await Promise.all(
items.map((item) => this.getLibraryItemDto(item)),
),
total,
itemsPerPage: pagination.itemsPerPage,
page: pagination.page,
@@ -286,7 +288,7 @@ export class LibraryService {
),
};
} else if (type === CatalogueTypeFilter.Missing && missing) {
const tmdbIdToMyListItem: Record<string, LibraryItem> = {};
const tmdbIdToMyListItem: Record<string, LibraryItemDto> = {};
const myListItems = await this.getMyList({
pagination: {
itemsPerPage: 500,
@@ -315,12 +317,7 @@ export class LibraryService {
direction,
});
return {
...response,
items: await Promise.all(
response.items.map((item) => this.getLibraryItemDto(item)),
),
};
return response;
}
throw new Error(
@@ -404,6 +401,7 @@ export class LibraryService {
mediaType: mediaType === 'movie' ? MediaType.Movie : MediaType.Series,
watched,
playStates,
lastPlayState: playStates?.[0],
tmdbItem: {
id: movieMetadata?.tmdbMovie.id ?? seriesMetadata?.tmdbSeries.id,
poster_path: