diff --git a/src/actors.js b/src/actors.js index 55e91a58..72d79d59 100644 --- a/src/actors.js +++ b/src/actors.js @@ -891,55 +891,61 @@ async function getOrCreateActors(baseActors, batchId) { } async function associateActors(releases, batchId) { - const baseActorsByReleaseId = releases.reduce((acc, release) => { - if (release.actors) { - acc[release.id] = toBaseActors(release.actors, release); + try { + const baseActorsByReleaseId = releases.reduce((acc, release) => { + if (release.actors) { + acc[release.id] = toBaseActors(release.actors, release); + } + + return acc; + }, {}); + + const baseActors = Object.values(baseActorsByReleaseId).flat(); + + if (baseActors.length === 0) { + return []; } - return acc; - }, {}); + const baseActorsBySlug = baseActors.reduce((acc, baseActor) => ({ + ...acc, + [baseActor.slug]: baseActor, + }), {}); - const baseActors = Object.values(baseActorsByReleaseId).flat(); + const uniqueBaseActors = Object.values(baseActorsBySlug); + const actors = await getOrCreateActors(uniqueBaseActors, batchId); - if (baseActors.length === 0) { - return []; - } - - const baseActorsBySlug = baseActors.reduce((acc, baseActor) => ({ - ...acc, - [baseActor.slug]: baseActor, - }), {}); - - const uniqueBaseActors = Object.values(baseActorsBySlug); - const actors = await getOrCreateActors(uniqueBaseActors, batchId); - - const actorIdsByEntityIdEntryIdAndSlug = actors.reduce((acc, actor) => ({ - ...acc, - [actor.entity_id]: { - ...acc[actor.entity_id], - [actor.entry_id]: { - ...acc[actor.entity_id]?.[actor.entry_id], - [actor.slug]: { - actor_id: actor.alias_for || actor.id, - alias_id: actor.alias_for ? actor.id : null, + const actorIdsByEntityIdEntryIdAndSlug = actors.reduce((acc, actor) => ({ + ...acc, + [actor.entity_id]: { + ...acc[actor.entity_id], + [actor.entry_id]: { + ...acc[actor.entity_id]?.[actor.entry_id], + [actor.slug]: { + actor_id: actor.alias_for || actor.id, + alias_id: actor.alias_for ? actor.id : null, + }, }, }, - }, - }), {}); + }), {}); - const releaseActorAssociations = Object.entries(baseActorsByReleaseId) - .map(([releaseId, releaseActors]) => releaseActors - .map(releaseActor => ({ - release_id: releaseId, - ...(actorIdsByEntityIdEntryIdAndSlug[releaseActor.entity?.id]?.[releaseActor.entryId]?.[releaseActor.slug] || actorIdsByEntityIdEntryIdAndSlug.null.null[releaseActor.slug]), - }))) - .flat(); + const releaseActorAssociations = Object.entries(baseActorsByReleaseId) + .map(([releaseId, releaseActors]) => releaseActors + .map(releaseActor => ({ + release_id: releaseId, + ...(actorIdsByEntityIdEntryIdAndSlug[releaseActor.entity?.id]?.[releaseActor.entryId]?.[releaseActor.slug] || actorIdsByEntityIdEntryIdAndSlug.null.null[releaseActor.slug]), + }))) + .flat(); - await bulkInsert('releases_actors', releaseActorAssociations, false); + await bulkInsert('releases_actors', releaseActorAssociations, false); - logger.verbose(`Associated ${releaseActorAssociations.length} actors to ${releases.length} scenes`); + logger.verbose(`Associated ${releaseActorAssociations.length} actors to ${releases.length} scenes`); - return actors; + return actors; + } catch (error) { + logger.error(`Failed to associate actors: ${error.message}`); + + return []; + } } async function fetchActor(actorId) {