diff --git a/src/controllers/deprecated/media.ts b/src/controllers/deprecated/media.ts index 998f1fe1..83725f63 100644 --- a/src/controllers/deprecated/media.ts +++ b/src/controllers/deprecated/media.ts @@ -173,18 +173,17 @@ export const getVideo = async(ctx): Promise => { const existingFailedResult = await FailedLookups.findOne({ $or: failedQuery }, null, { lean: true }).exec(); if (existingFailedResult) { - // we have an existing failure record, so increment it, and throw not found error - await FailedLookups.updateOne({ _id: existingFailedResult._id }, { $inc: { count: 1 } }).exec(); throw new MediaNotFoundError(); } - // the database does not have a record of this file, so begin search for metadata on external apis. + // the database does not have a record of this file, so begin search for metadata on TMDB. const failedLookupQuery = { episode, imdbID, season, title, year }; if (!title && !imdbIdToSearch) { - // The APIs below require either a title or IMDb ID, so return if we don't have one - await FailedLookups.updateOne(failedLookupQuery, { $inc: { count: 1 } }, { upsert: true, setDefaultsOnInsert: true }).exec(); + // TMDB requires either a title or IMDb ID, so return if we don't have one + const reason = 'getVideo (deprecated) failed because there is no title or imdbId'; + await FailedLookups.updateOne(failedLookupQuery, { $inc: { count: 1 }, reason }, { upsert: true, setDefaultsOnInsert: true }).exec(); throw new MediaNotFoundError(); } @@ -214,7 +213,8 @@ export const getVideo = async(ctx): Promise => { // End TMDB lookups if (!tmdbData || _.isEmpty(tmdbData)) { - await FailedLookups.updateOne(failedLookupQuery, { $inc: { count: 1 } }, { upsert: true, setDefaultsOnInsert: true }).exec(); + const reason = `getVideo (deprecated) failed because no data was found on TMDB for ${failedLookupQuery}`; + await FailedLookups.updateOne(failedLookupQuery, { $inc: { count: 1 }, reason }, { upsert: true, setDefaultsOnInsert: true }).exec(); throw new MediaNotFoundError(); } @@ -235,8 +235,9 @@ export const getVideo = async(ctx): Promise => { leanMeta = await deprecatedExternalAPIHelper.addPosterFromImages(leanMeta); return ctx.body = leanMeta; } catch (e) { - console.error(e,tmdbData); - await FailedLookups.updateOne(failedLookupQuery, { $inc: { count: 1 } }, { upsert: true, setDefaultsOnInsert: true }).exec(); + console.error(e, tmdbData); + const reason = `getVideo (deprecated) failed because an error occurred: ${e}`; + await FailedLookups.updateOne(failedLookupQuery, { $inc: { count: 1 }, reason }, { upsert: true, setDefaultsOnInsert: true }).exec(); throw new MediaNotFoundError(); } }; diff --git a/src/models/FailedLookups.ts b/src/models/FailedLookups.ts index 53302017..0ededde4 100644 --- a/src/models/FailedLookups.ts +++ b/src/models/FailedLookups.ts @@ -36,10 +36,7 @@ const FailedLookupsSchema = new Schema({ year: { type: String }, failedValidation: { type: Boolean, default: false }, type: { type: String }, - reason: { - select: false, - type: String, - }, + reason: { type: String }, createdAt: { default: Date.now, expires: THIRTY_DAYS_IN_SECONDS, diff --git a/test/e2e/media-video-movie.spec.ts b/test/e2e/media-video-movie.spec.ts index 9d3e63ea..7821a017 100644 --- a/test/e2e/media-video-movie.spec.ts +++ b/test/e2e/media-video-movie.spec.ts @@ -159,6 +159,9 @@ describe('get by all', () => { expect(error.message).toEqual('Request failed with status code 404'); expect(await FailedLookupsModel.countDocuments()).toEqual(1); + const failedResult = await FailedLookupsModel.findOne(); + expect(failedResult.reason).toEqual('getVideoV2 got no tmdb data for areallylongtitlethatsurelywontmatchanymoviename, undefined, undefined, null, NaN, null') + try { await axios.get(`${appUrl}/api/media/video/v2?title=areallylongtitlethatsurelywontmatchanymoviename`); } catch (e) { diff --git a/test/e2e/media-video-tv-episode.spec.ts b/test/e2e/media-video-tv-episode.spec.ts index a820b7b0..e5342f0b 100644 --- a/test/e2e/media-video-tv-episode.spec.ts +++ b/test/e2e/media-video-tv-episode.spec.ts @@ -179,6 +179,9 @@ describe('get by all', () => { expect(error.message).toEqual('Request failed with status code 404'); expect(await FailedLookupsModel.countDocuments()).toEqual(1); + const failedResult = await FailedLookupsModel.findOne(); + expect(failedResult.reason).toEqual('getVideoV2 got no tmdb data for Lost, undefined, undefined, null, 999, 999') + try { await axios.get(`${appUrl}/api/media/video/v2?title=${EPISODE_LOST.seriesTitle}&season=999&episode=999`); } catch (e) {