'use strict'; const knex = require('./knex'); const argv = require('./argv'); async function fetchEntityReleaseIds(networkSlugs = [], channelSlugs = []) { const entityQuery = knex .withRecursive('selected_entities', knex.raw(` SELECT entities.* FROM entities WHERE entities.slug = ANY(:networkSlugs) AND entities.type = 'network' OR (entities.slug = ANY(:channelSlugs) AND entities.type = 'channel') UNION ALL SELECT entities.* FROM entities INNER JOIN selected_entities ON selected_entities.id = entities.parent_id `, { networkSlugs, channelSlugs, })); const sceneIds = await entityQuery .clone() .select('releases.id') .distinct('releases.id') .from('selected_entities') .leftJoin('releases', 'releases.entity_id', 'selected_entities.id') .whereNotNull('releases.id') .modify((builder) => { if (argv.flushAfter) { builder.where('effective_date', '>=', argv.flushAfter); } if (argv.flushBefore) { builder.where('effective_date', '<=', argv.flushBefore); } }) .pluck('releases.id'); const movieIds = await entityQuery .clone() .select('movies.id') .distinct('movies.id') .from('selected_entities') .leftJoin('movies', 'movies.entity_id', 'selected_entities.id') .whereNotNull('movies.id') .modify((builder) => { if (argv.flushAfter) { builder.where('effective_date', '>=', argv.flushAfter); } if (argv.flushBefore) { builder.where('effective_date', '<=', argv.flushBefore); } }) .pluck('movies.id'); const serieIds = await entityQuery .clone() .select('series.id') .distinct('series.id') .from('selected_entities') .leftJoin('series', 'series.entity_id', 'selected_entities.id') .whereNotNull('series.id') .modify((builder) => { if (argv.flushAfter) { builder.where('date', '>=', argv.flushAfter); } if (argv.flushBefore) { builder.where('date', '<=', argv.flushBefore); } }) .pluck('series.id'); return { sceneIds, movieIds, serieIds, }; } module.exports = { fetchEntityReleaseIds, };