traxxx/src/actors.js

78 lines
2.1 KiB
JavaScript
Raw Normal View History

'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);
2020-01-27 00:41:04 +00:00
console.log(actors);
}
module.exports = {
associateActors,
};