Updating entity ID for rescraped scenes with network entry IDs enabled.
This commit is contained in:
@@ -148,7 +148,8 @@ function attachReleaseIds(releases, storedReleases) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const id = storedReleaseIdsByEntityIdAndEntryId[release.entity.id]?.[release.entryId];
|
||||
const id = storedReleaseIdsByEntityIdAndEntryId[release.entity.id]?.[release.entryId]
|
||||
|| storedReleaseIdsByEntityIdAndEntryId[release.entity.parent?.id]?.[release.entryId];
|
||||
|
||||
if (id) {
|
||||
return {
|
||||
@@ -193,7 +194,11 @@ async function filterDuplicateReleases(releases) {
|
||||
const internalUniqueReleases = filterInternalDuplicateReleases(releases);
|
||||
|
||||
const duplicateReleaseEntries = await knex('releases')
|
||||
.whereIn(['entry_id', 'entity_id'], internalUniqueReleases.map(release => [release.entryId, release.entity.id]));
|
||||
.whereIn(['entry_id', 'entity_id'], internalUniqueReleases.map(release => [release.entryId, release.entity.id]))
|
||||
.orWhereIn(['entry_id', 'entity_id'], internalUniqueReleases
|
||||
// scene IDs shared across network, mark as duplicate so scene can be updated with channel if only available on release day (i.e. Perv City)
|
||||
.filter(release => release.entity.parent?.parameters?.networkEntryIds)
|
||||
.map(release => [release.entryId, release.entity.parent.id]));
|
||||
|
||||
const duplicateReleasesByEntityIdAndEntryId = duplicateReleaseEntries.reduce((acc, release) => {
|
||||
if (!acc[release.entity_id]) acc[release.entity_id] = {};
|
||||
@@ -202,8 +207,11 @@ async function filterDuplicateReleases(releases) {
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
const duplicateReleases = internalUniqueReleases.filter(release => duplicateReleasesByEntityIdAndEntryId[release.entity.id]?.[release.entryId]);
|
||||
const uniqueReleases = internalUniqueReleases.filter(release => !duplicateReleasesByEntityIdAndEntryId[release.entity.id]?.[release.entryId]);
|
||||
const duplicateReleases = internalUniqueReleases.filter(release => duplicateReleasesByEntityIdAndEntryId[release.entity.id]?.[release.entryId]
|
||||
|| duplicateReleasesByEntityIdAndEntryId[release.entity.parent?.id]?.[release.entryId]);
|
||||
|
||||
const uniqueReleases = internalUniqueReleases.filter(release => !duplicateReleasesByEntityIdAndEntryId[release.entity.id]?.[release.entryId]
|
||||
&& !duplicateReleasesByEntityIdAndEntryId[release.entity.parent?.id]?.[release.entryId]);
|
||||
|
||||
return {
|
||||
uniqueReleases,
|
||||
@@ -327,14 +335,15 @@ async function storeScenes(releases) {
|
||||
UPDATE releases
|
||||
SET url = COALESCE(new.url, releases.url),
|
||||
date = COALESCE(new.date, releases.date),
|
||||
entity_id = COALESCE((new.entity->>'id')::integer, releases.entity_id),
|
||||
title = COALESCE(new.title, releases.title),
|
||||
description = COALESCE(new.description, releases.description),
|
||||
duration = COALESCE(new.duration, releases.duration),
|
||||
deep = new.url IS NOT NULL,
|
||||
updated_at = NOW()
|
||||
FROM json_to_recordset(:scenes)
|
||||
AS new(id int, url text, date timestamptz, title text, description text, duration integer, deep boolean)
|
||||
WHERE releases.id = new.id;
|
||||
AS new(id int, url text, date timestamptz, entity json, title text, description text, duration integer, deep boolean)
|
||||
WHERE releases.id = new.id
|
||||
`, {
|
||||
scenes: JSON.stringify(duplicateReleasesWithId),
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user