diff --git a/src/app.js b/src/app.js index b410cba0..6f4fc255 100644 --- a/src/app.js +++ b/src/app.js @@ -8,7 +8,7 @@ const initServer = require('./web/server'); const knex = require('./knex'); const fetchUpdates = require('./updates'); const { fetchScenes, fetchMovies } = require('./deep'); -const { storeScenes, storeMovies, updateReleasesSearch } = require('./store-releases'); +const { storeScenes, storeMovies, updateReleasesSearch, associateMovieScenes } = require('./store-releases'); const { scrapeActors, flushActors, flushProfiles, interpolateProfiles } = require('./actors'); const { flushEntities } = require('./entities'); const { deleteScenes, deleteMovies, flushScenes, flushBatches } = require('./releases'); @@ -79,7 +79,7 @@ async function init() { const sceneMovies = deepScenes ? deepScenes.map(scene => ({ ...scene.movie, entity: scene.entity })).filter(Boolean) : []; const deepMovies = argv.sceneMovies || argv.movie ? await fetchMovies([...(argv.movie || []), ...(sceneMovies || [])]) : sceneMovies; - const movieScenes = argv.movieScenes ? deepMovies.map(movie => movie.scenes?.map(scene => ({ ...scene, entity: movie.entity }))).flat().filter(Boolean) : []; + const movieScenes = argv.movieScenes ? deepMovies.map(movie => movie.scenes?.map(scene => ({ ...scene, movie, entity: movie.entity }))).flat().filter(Boolean) : []; const deepMovieScenes = argv.deep ? await fetchScenes(movieScenes) : movieScenes; if (argv.report) { @@ -88,15 +88,10 @@ async function init() { } if (argv.save) { - const storedScenes = deepScenes.length > 0 || deepMovieScenes.length > 0 - ? await storeScenes(deepScenes) - : []; + const storedMovies = await storeMovies(deepMovies); + const storedScenes = await storeScenes([...(deepScenes || []), ...(deepMovieScenes || [])]); - if (deepMovies.length > 0) { - const storedMovieScenes = await storeScenes(deepMovieScenes); - - await storeMovies(deepMovies, [...(storedMovieScenes || []), ...storedScenes]); - } + await associateMovieScenes(storedMovies, storedScenes); } knex.destroy(); diff --git a/src/store-releases.js b/src/store-releases.js index a13045ad..e76f3a82 100644 --- a/src/store-releases.js +++ b/src/store-releases.js @@ -290,7 +290,7 @@ async function storeClips(releases) { } async function storeScenes(releases) { - if (releases.length === 0) { + if (!releases || releases.length === 0) { return []; } @@ -331,42 +331,36 @@ async function storeScenes(releases) { } async function associateMovieScenes(movies, movieScenes) { - const movieScenesByEntityIdAndEntryId = movieScenes.reduce((acc, scene) => ({ + const moviesByEntityIdAndEntryId = movies.reduce((acc, movie) => ({ ...acc, - [scene.entity.id]: { - ...acc[scene.entity.id], - [scene.entryId]: scene, + [movie.entity.id]: { + ...acc[movie.entity.id], + [movie.entryId]: movie, }, }), {}); - console.log('movies', movies, movieScenes); - - const associations = movies.map((movie) => { - if (!movie.scenes || !movie.id) { + const associations = movieScenes.map((scene) => { + if (!scene.movie) { return null; } - console.log(movie, movie.scenes); + const sceneMovie = moviesByEntityIdAndEntryId[scene.entity.id]?.[scene.movie.entryId]; - return movie.scenes.map((scene) => { - const movieScene = movieScenesByEntityIdAndEntryId[movie.entity.id]?.[scene.entryId]; + if (sceneMovie?.id) { + return { + movie_id: sceneMovie.id, + scene_id: scene.id, + }; + } - if (movieScene?.id) { - return { - movie_id: movie.id, - scene_id: movieScene.id, - }; - } - - return null; - }); - }).flat().filter(Boolean); + return null; + }).filter(Boolean); await bulkInsert('movies_scenes', associations, false); } -async function storeMovies(movies, movieScenes) { - if (movies.length === 0) { +async function storeMovies(movies) { + if (!movies || movies.length === 0) { return []; } @@ -378,13 +372,13 @@ async function storeMovies(movies, movieScenes) { const storedMovies = await bulkInsert('movies', curatedMovieEntries, ['entity_id', 'entry_id'], true); const moviesWithId = attachReleaseIds(movies, storedMovies); - await associateMovieScenes(moviesWithId, movieScenes); await associateReleaseMedia(moviesWithId, 'movie'); - return storedMovies; + return moviesWithId; } module.exports = { + associateMovieScenes, storeScenes, storeMovies, updateReleasesSearch,