'use strict'; const knex = require('./knex'); const slugify = require('./utils/slugify'); const capitalize = require('./utils/capitalize'); function toBaseActors(actorsOrNames, release) { return actorsOrNames.map((actorOrName) => { if (actorOrName.name) { return { ...actorOrName, name: capitalize(actorOrName.name), slug: slugify(actorOrName.name), networkId: release.site.network.id, }; } return { name: capitalize(actorOrName), slug: slugify(actorOrName), networkId: release.site.network.id, }; }); } function curateActorEntry(baseActor) { const actorEntry = { name: baseActor.name, slug: baseActor.slug, }; if (baseActor.name.split(/\s+/).length === 1) { // attach network ID for single names, to reduce mismatches actorEntry.network_id = baseActor.networkId; } return actorEntry; } function curateActorEntries(baseActors) { return baseActors.map(baseActor => curateActorEntry(baseActor)); } async function getActors(baseActors) { const existingActors = await knex('actors') .whereIn('slug', baseActors.map(baseActor => baseActor.slug)) .orWhereIn('name', baseActors.map(baseActor => baseActor.slug)); if (existingActors.length === 0) { // TODO: TESTING ONLY await knex('actors').insert(curateActorEntries(baseActors.slice(0, 3))); } console.log(existingActors); } async function associateActors(releases) { const baseActorsByReleaseId = releases.reduce((acc, release) => { if (release.actors) { acc[release.id] = toBaseActors(release.actors, release); } return acc; }, {}); const baseActors = Object.values(baseActorsByReleaseId).flat(); const baseActorsBySlug = baseActors.reduce((acc, baseActor) => ({ ...acc, [baseActor.slug]: baseActor }), {}); const uniqueBaseActors = Object.values(baseActorsBySlug); const actors = await getActors(uniqueBaseActors); console.log(actors); } module.exports = { associateActors, };