fix: disambiguate tmdb ids by media type across lookups (#2577)
This commit is contained in:
@@ -18,7 +18,7 @@ import {
|
||||
import type { ZodNumber, ZodOptional, ZodString } from 'zod';
|
||||
|
||||
@Entity()
|
||||
@Unique(['tmdbId'])
|
||||
@Unique(['tmdbId', 'mediaType'])
|
||||
export class Blocklist implements BlocklistItem {
|
||||
@PrimaryGeneratedColumn()
|
||||
public id: number;
|
||||
@@ -77,6 +77,7 @@ export class Blocklist implements BlocklistItem {
|
||||
let media = await mediaRepository.findOne({
|
||||
where: {
|
||||
tmdbId: blocklistRequest.tmdbId,
|
||||
mediaType: blocklistRequest.mediaType,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -30,22 +30,17 @@ import Season from './Season';
|
||||
class Media {
|
||||
public static async getRelatedMedia(
|
||||
user: User | undefined,
|
||||
tmdbIds: number | number[]
|
||||
items: { tmdbId: number; mediaType: string }[]
|
||||
): Promise<Media[]> {
|
||||
const mediaRepository = getRepository(Media);
|
||||
|
||||
try {
|
||||
let finalIds: number[];
|
||||
if (!Array.isArray(tmdbIds)) {
|
||||
finalIds = [tmdbIds];
|
||||
} else {
|
||||
finalIds = tmdbIds;
|
||||
}
|
||||
|
||||
if (finalIds.length === 0) {
|
||||
if (items.length === 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const finalIds = [...new Set(items.map((i) => i.tmdbId))];
|
||||
|
||||
const media = await mediaRepository
|
||||
.createQueryBuilder('media')
|
||||
.leftJoinAndSelect(
|
||||
@@ -57,7 +52,9 @@ class Media {
|
||||
.where(' media.tmdbId in (:...finalIds)', { finalIds })
|
||||
.getMany();
|
||||
|
||||
return media;
|
||||
return media.filter((m) =>
|
||||
items.some((i) => i.tmdbId === m.tmdbId && i.mediaType === m.mediaType)
|
||||
);
|
||||
} catch (e) {
|
||||
logger.error(e.message);
|
||||
return [];
|
||||
|
||||
@@ -25,7 +25,7 @@ export class NotFoundError extends Error {
|
||||
}
|
||||
|
||||
@Entity()
|
||||
@Unique('UNIQUE_USER_DB', ['tmdbId', 'requestedBy'])
|
||||
@Unique('UNIQUE_USER_DB', ['tmdbId', 'mediaType', 'requestedBy'])
|
||||
export class Watchlist implements WatchlistItem {
|
||||
@PrimaryGeneratedColumn()
|
||||
id: number;
|
||||
@@ -142,11 +142,13 @@ export class Watchlist implements WatchlistItem {
|
||||
|
||||
public static async deleteWatchlist(
|
||||
tmdbId: Watchlist['tmdbId'],
|
||||
mediaType: MediaType,
|
||||
user: User
|
||||
): Promise<Watchlist | null> {
|
||||
const watchlistRepository = getRepository(this);
|
||||
const watchlist = await watchlistRepository.findOneBy({
|
||||
tmdbId,
|
||||
mediaType,
|
||||
requestedBy: { id: user.id },
|
||||
});
|
||||
if (!watchlist) {
|
||||
|
||||
Reference in New Issue
Block a user