Staging release media store by role.

This commit is contained in:
2020-04-16 16:24:59 +02:00
parent fc58850e56
commit e3dfaf4440
184 changed files with 38 additions and 23 deletions

View File

@@ -522,9 +522,6 @@ async function associateReleaseMedia(releases) {
return;
}
// TODO: catch errors
// TODO: stage by role
const baseMediasByReleaseId = releases.reduce((acc, release) => ({
...acc,
[release.id]: [
@@ -535,32 +532,49 @@ async function associateReleaseMedia(releases) {
],
}), {});
const baseMedias = Object.values(baseMediasByReleaseId)
.map(releaseMedia => Object.values(releaseMedia))
.flat(2)
.filter(Boolean);
const baseMediasByRole = Object.values(baseMediasByReleaseId)
.flat()
.filter(Boolean)
.reduce((acc, baseMedia) => {
if (!acc[baseMedia.role]) acc[baseMedia.role] = [];
acc[baseMedia.role].push(baseMedia);
const storedMedias = await storeMedias(baseMedias);
const storedMediasById = itemsByKey(storedMedias, 'id');
return acc;
}, {});
const associationsByRole = Object.entries(baseMediasByReleaseId).reduce((acc, [releaseId, releaseBaseMedias]) => {
releaseBaseMedias.forEach((baseMedia) => {
const media = storedMediasById[baseMedia.id];
await Promise.reduce(['posters', 'covers', 'photos', 'teasers', 'trailers'], async (chain, role) => {
// stage by role so posters are prioritized over photos and videos
await chain;
if (!media) return;
if (!acc[media.role]) acc[media.role] = [];
const baseMedias = baseMediasByRole[role];
acc[media.role].push({
release_id: releaseId,
media_id: media.use || media.entry.id,
});
});
if (!baseMedias) {
return;
}
return acc;
}, {});
const storedMedias = await storeMedias(baseMedias);
const storedMediasById = itemsByKey(storedMedias, 'id');
await Promise.all(Object.entries(associationsByRole)
.map(async ([role, associations]) => knex.raw(`${knex(`releases_${role}`).insert(associations)} ON CONFLICT DO NOTHING`)));
const associations = Object
.entries(baseMediasByReleaseId)
.reduce((acc, [releaseId, releaseBaseMedias]) => {
releaseBaseMedias.forEach((baseMedia) => {
const media = storedMediasById[baseMedia.id];
if (media) {
acc.push({
release_id: releaseId,
media_id: media.use || media.entry.id,
});
}
});
return acc;
}, [])
.filter(Boolean);
await knex.raw(`${knex(`releases_${role}`).insert(associations)} ON CONFLICT DO NOTHING`);
}, Promise.resolve());
}
module.exports = {