2019-11-10 03:20:22 +00:00
|
|
|
'use strict';
|
|
|
|
|
2020-03-26 02:32:07 +00:00
|
|
|
const knex = require('./knex');
|
2020-01-07 03:23:28 +00:00
|
|
|
const slugify = require('./utils/slugify');
|
2020-03-26 02:32:07 +00:00
|
|
|
const capitalize = require('./utils/capitalize');
|
2019-11-10 03:20:22 +00:00
|
|
|
|
2020-03-26 02:32:07 +00:00
|
|
|
function toBaseActors(actorsOrNames, release) {
|
2020-03-24 02:48:24 +00:00
|
|
|
return actorsOrNames.map((actorOrName) => {
|
|
|
|
if (actorOrName.name) {
|
2019-11-30 04:55:32 +00:00
|
|
|
return {
|
2020-03-24 02:48:24 +00:00
|
|
|
...actorOrName,
|
2020-03-26 02:32:07 +00:00
|
|
|
name: capitalize(actorOrName.name),
|
2020-03-24 02:48:24 +00:00
|
|
|
slug: slugify(actorOrName.name),
|
2020-03-26 02:32:07 +00:00
|
|
|
networkId: release.site.network.id,
|
2019-11-30 04:55:32 +00:00
|
|
|
};
|
2020-03-24 02:48:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return {
|
2020-03-26 02:32:07 +00:00
|
|
|
name: capitalize(actorOrName),
|
|
|
|
slug: slugify(actorOrName),
|
|
|
|
networkId: release.site.network.id,
|
2020-03-24 02:48:24 +00:00
|
|
|
};
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2020-03-26 02:32:07 +00:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
2020-03-24 02:48:24 +00:00
|
|
|
async function associateActors(releases) {
|
2020-03-26 02:32:07 +00:00
|
|
|
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
|
|
|
|
2020-03-26 02:32:07 +00:00
|
|
|
console.log(actors);
|
2019-11-11 02:20:00 +00:00
|
|
|
}
|
|
|
|
|
2019-11-10 03:20:22 +00:00
|
|
|
module.exports = {
|
2020-03-24 02:48:24 +00:00
|
|
|
associateActors,
|
2019-11-10 03:20:22 +00:00
|
|
|
};
|