Added chapters and shoot location. Added In The Crack.
This commit is contained in:
@@ -7,13 +7,14 @@ const logger = require('./logger')(__filename);
|
||||
const knex = require('./knex');
|
||||
const slugify = require('./utils/slugify');
|
||||
const bulkInsert = require('./utils/bulk-insert');
|
||||
const resolvePlace = require('./utils/resolve-place');
|
||||
const { formatDate } = require('./utils/qu');
|
||||
const { associateActors, scrapeActors } = require('./actors');
|
||||
const { associateReleaseTags } = require('./tags');
|
||||
const { curateEntity } = require('./entities');
|
||||
const { associateReleaseMedia } = require('./media');
|
||||
|
||||
function curateReleaseEntry(release, batchId, existingRelease, type = 'scene') {
|
||||
async function curateReleaseEntry(release, batchId, existingRelease, type = 'scene') {
|
||||
const slugBase = release.title
|
||||
|| (release.actors?.length && `${release.entity.slug} ${release.actors.map(actor => actor.name).join(' ')}`)
|
||||
|| (release.date && `${release.entity.slug} ${formatDate(release.date, 'YYYY MM DD')}`)
|
||||
@@ -50,6 +51,20 @@ function curateReleaseEntry(release, batchId, existingRelease, type = 'scene') {
|
||||
curatedRelease.duration = release.duration;
|
||||
}
|
||||
|
||||
if (release.productionLocation) {
|
||||
curatedRelease.production_location = release.productionLocation;
|
||||
|
||||
if (argv.resolvePlace) {
|
||||
const productionLocation = await resolvePlace(release.productionLocation);
|
||||
|
||||
if (productionLocation) {
|
||||
curatedRelease.production_city = productionLocation.city;
|
||||
curatedRelease.production_state = productionLocation.state;
|
||||
curatedRelease.production_country_alpha2 = productionLocation.country;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!existingRelease && !release.id) {
|
||||
curatedRelease.created_batch_id = batchId;
|
||||
}
|
||||
@@ -228,6 +243,46 @@ async function updateReleasesSearch(releaseIds) {
|
||||
}
|
||||
}
|
||||
|
||||
async function storeChapters(releases) {
|
||||
const chapters = releases.map(release => release.chapters?.map((chapter, index) => ({
|
||||
title: chapter.title,
|
||||
description: chapter.description,
|
||||
releaseId: release.id,
|
||||
chapter: index + 1,
|
||||
duration: chapter.duration,
|
||||
poster: chapter.poster,
|
||||
photos: chapter.photos,
|
||||
tags: chapter.tags,
|
||||
}))).flat().filter(Boolean);
|
||||
|
||||
const curatedChapterEntries = chapters.map(chapter => ({
|
||||
title: chapter.title,
|
||||
description: chapter.description,
|
||||
duration: chapter.duration,
|
||||
release_id: chapter.releaseId,
|
||||
chapter: chapter.chapter,
|
||||
}));
|
||||
|
||||
const storedChapters = await bulkInsert('chapters', curatedChapterEntries);
|
||||
const chapterIdsByReleaseIdAndChapter = storedChapters.reduce((acc, chapter) => ({
|
||||
...acc,
|
||||
[chapter.release_id]: {
|
||||
...acc[chapter.release_id],
|
||||
[chapter.chapter]: chapter.id,
|
||||
},
|
||||
}), {});
|
||||
|
||||
const chaptersWithId = chapters.map(chapter => ({
|
||||
...chapter,
|
||||
id: chapterIdsByReleaseIdAndChapter[chapter.releaseId][chapter.chapter],
|
||||
}));
|
||||
|
||||
await associateReleaseTags(chaptersWithId, 'chapter');
|
||||
|
||||
// media is more error-prone, associate separately
|
||||
await associateReleaseMedia(chaptersWithId, 'chapter');
|
||||
}
|
||||
|
||||
async function storeScenes(releases) {
|
||||
if (releases.length === 0) {
|
||||
return [];
|
||||
@@ -241,7 +296,7 @@ async function storeScenes(releases) {
|
||||
// uniqueness is entity ID + entry ID, filter uniques after adding entities
|
||||
const { uniqueReleases, duplicateReleases, duplicateReleaseEntries } = await filterDuplicateReleases(releasesWithStudios);
|
||||
|
||||
const curatedNewReleaseEntries = uniqueReleases.map(release => curateReleaseEntry(release, batchId));
|
||||
const curatedNewReleaseEntries = await Promise.all(uniqueReleases.map(release => curateReleaseEntry(release, batchId)));
|
||||
|
||||
const storedReleases = await bulkInsert('releases', curatedNewReleaseEntries);
|
||||
// TODO: update duplicate releases
|
||||
@@ -263,6 +318,8 @@ async function storeScenes(releases) {
|
||||
await scrapeActors(actors.map(actor => actor.name));
|
||||
}
|
||||
|
||||
await storeChapters(releasesWithId);
|
||||
|
||||
logger.info(`Stored ${storedReleaseEntries.length} releases`);
|
||||
|
||||
return releasesWithId;
|
||||
@@ -303,13 +360,13 @@ async function storeMovies(movies, movieScenes) {
|
||||
const { uniqueReleases } = await filterDuplicateReleases(movies);
|
||||
const [batchId] = await knex('batches').insert({ comment: null }).returning('id');
|
||||
|
||||
const curatedMovieEntries = uniqueReleases.map(release => curateReleaseEntry(release, batchId, null, 'movie'));
|
||||
const curatedMovieEntries = await Promise.all(uniqueReleases.map(release => curateReleaseEntry(release, batchId, null, 'movie')));
|
||||
|
||||
const storedMovies = await bulkInsert('movies', curatedMovieEntries, ['entity_id', 'entry_id'], true);
|
||||
const moviesWithId = attachReleaseIds(movies, storedMovies);
|
||||
|
||||
await associateMovieScenes(moviesWithId, movieScenes);
|
||||
await associateReleaseMedia(moviesWithId, 'movies');
|
||||
await associateReleaseMedia(moviesWithId, 'movie');
|
||||
|
||||
return storedMovies;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user