forked from DebaucheryLibrarian/traxxx
Using dedicated releases search table for ts vector documents.
This commit is contained in:
11
src/argv.js
11
src/argv.js
@@ -106,6 +106,17 @@ const { argv } = yargs
|
||||
type: 'boolean',
|
||||
default: true,
|
||||
})
|
||||
.option('images', {
|
||||
describe: 'Include any photos, posters or covers',
|
||||
type: 'boolean',
|
||||
default: true,
|
||||
alias: 'pics',
|
||||
})
|
||||
.option('videos', {
|
||||
describe: 'Include any trailers or teasers',
|
||||
type: 'boolean',
|
||||
default: true,
|
||||
})
|
||||
.option('posters', {
|
||||
describe: 'Include release posters',
|
||||
type: 'boolean',
|
||||
|
||||
@@ -343,32 +343,58 @@ async function storeReleaseAssets(releases) {
|
||||
[release.id]: pluckItems(release.photos),
|
||||
}), {});
|
||||
|
||||
if (argv.posters) {
|
||||
if (argv.images && argv.posters) {
|
||||
const posters = await storeMedia(Object.values(releasePostersById).flat(), 'release', 'poster');
|
||||
if (posters) await associateMedia(releasePostersById, posters, 'release', 'poster');
|
||||
}
|
||||
|
||||
if (argv.covers) {
|
||||
if (argv.images && argv.covers) {
|
||||
const covers = await storeMedia(Object.values(releaseCoversById).flat(), 'release', 'cover');
|
||||
if (covers) await associateMedia(releaseCoversById, covers, 'release', 'cover');
|
||||
}
|
||||
|
||||
if (argv.photos) {
|
||||
if (argv.images && argv.photos) {
|
||||
const photos = await storeMedia(Object.values(releasePhotosById).flat(), 'release', 'photo');
|
||||
if (photos) await associateMedia(releasePhotosById, photos, 'release', 'photo');
|
||||
}
|
||||
|
||||
if (argv.trailers) {
|
||||
if (argv.videos && argv.trailers) {
|
||||
const trailers = await storeMedia(Object.values(releaseTrailersById).flat(), 'release', 'trailer');
|
||||
if (trailers) await associateMedia(releaseTrailersById, trailers, 'release', 'trailer');
|
||||
}
|
||||
|
||||
if (argv.teasers) {
|
||||
if (argv.videos && argv.teasers) {
|
||||
const teasers = await storeMedia(Object.values(releaseTeasersById).flat(), 'release', 'teaser');
|
||||
if (teasers) await associateMedia(releaseTeasersById, teasers, 'release', 'teaser');
|
||||
}
|
||||
}
|
||||
|
||||
async function updateReleasesSearch(releaseIds) {
|
||||
const documents = await knex.raw(`
|
||||
SELECT
|
||||
releases.id as release_id,
|
||||
to_tsvector(
|
||||
releases.title || ' ' ||
|
||||
sites.name || ' ' ||
|
||||
sites.slug || ' ' ||
|
||||
replace(CAST(releases.date AS VARCHAR), '-', ' ') || ' ' ||
|
||||
string_agg(actors.name, ' ') || ' ' ||
|
||||
string_agg(tags.name, ' ')
|
||||
) as document
|
||||
FROM releases
|
||||
JOIN releases_actors AS local_actors ON local_actors.release_id = releases.id
|
||||
JOIN releases_tags AS local_tags ON local_tags.release_id = releases.id
|
||||
JOIN sites ON releases.site_id = sites.id
|
||||
JOIN actors ON local_actors.actor_id = actors.id
|
||||
JOIN tags ON local_tags.tag_id = tags.id
|
||||
WHERE releases.id = ANY(?)
|
||||
GROUP BY releases.id, sites.name, sites.slug;
|
||||
`, [releaseIds]);
|
||||
|
||||
const query = knex('releases_search').insert(documents.rows).toString();
|
||||
return knex.raw(`${query} ON CONFLICT (release_id) DO UPDATE SET document = EXCLUDED.document`);
|
||||
}
|
||||
|
||||
async function storeRelease(release) {
|
||||
const existingRelease = await knex('releases')
|
||||
.where({
|
||||
@@ -444,6 +470,8 @@ async function storeReleases(releases) {
|
||||
storeReleaseAssets(storedReleases),
|
||||
]);
|
||||
|
||||
await updateReleasesSearch(storedReleases.map(release => release.id));
|
||||
|
||||
if (argv.withProfiles && Object.keys(actors).length > 0) {
|
||||
await scrapeBasicActors();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user