Normalized database. Updated seed files. Simplified seed upsert.
This commit is contained in:
@@ -1,257 +1,241 @@
|
||||
const upsert = require('../src/utils/upsert');
|
||||
|
||||
function getMedia(tagsMap) {
|
||||
return [
|
||||
{
|
||||
path: 'tags/airtight/poster.jpeg',
|
||||
target_id: tagsMap.airtight,
|
||||
role: 'poster',
|
||||
comment: 'Jynx Maze in "Pump My Ass Full of Cum 3" for Jules Jordan',
|
||||
},
|
||||
{
|
||||
path: 'tags/airtight/2.jpeg',
|
||||
target_id: tagsMap.airtight,
|
||||
comment: 'Dakota Skye in "Dakota Goes Nuts" for ArchAngel',
|
||||
},
|
||||
{
|
||||
path: 'tags/airtight/1.jpeg',
|
||||
target_id: tagsMap.airtight,
|
||||
comment: 'Chloe Amour in "DP Masters 4" for Jules Jordan',
|
||||
},
|
||||
{
|
||||
path: 'tags/airtight/0.jpeg',
|
||||
domain: 'tags',
|
||||
target_id: tagsMap.airtight,
|
||||
comment: 'Sheena Shaw in "Ass Worship 14" for Jules Jordan',
|
||||
},
|
||||
{
|
||||
path: 'tags/anal/poster.jpeg',
|
||||
target_id: tagsMap.anal,
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/double-penetration/poster.jpeg',
|
||||
target_id: tagsMap['double-penetration'],
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/double-anal/poster.jpeg',
|
||||
target_id: tagsMap['double-anal'],
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/double-vaginal/poster.jpeg',
|
||||
target_id: tagsMap['double-vaginal'],
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/da-tp/0.jpeg',
|
||||
target_id: tagsMap['da-tp'],
|
||||
role: 'poster',
|
||||
comment: 'Natasha Teen in LegalPorno SZ2164',
|
||||
},
|
||||
{
|
||||
path: 'tags/da-tp/3.jpeg',
|
||||
target_id: tagsMap['da-tp'],
|
||||
role: 'photo',
|
||||
comment: 'Evelina Darling in GIO294',
|
||||
},
|
||||
{
|
||||
path: 'tags/da-tp/1.jpeg',
|
||||
target_id: tagsMap['da-tp'],
|
||||
role: 'photo',
|
||||
comment: 'Francys Belle in SZ1702 for LegalPorno',
|
||||
},
|
||||
{
|
||||
path: 'tags/da-tp/2.jpeg',
|
||||
target_id: tagsMap['da-tp'],
|
||||
role: 'photo',
|
||||
comment: 'Angel Smalls in GIO408 for LegalPorno',
|
||||
},
|
||||
{
|
||||
path: 'tags/da-tp/4.jpeg',
|
||||
target_id: tagsMap['da-tp'],
|
||||
role: 'photo',
|
||||
comment: 'Ninel Mojado aka Mira Cuckold in GIO063 for LegalPorno',
|
||||
},
|
||||
{
|
||||
path: 'tags/dv-tp/poster.jpeg',
|
||||
target_id: tagsMap['dv-tp'],
|
||||
role: 'poster',
|
||||
comment: 'Juelz Ventura in "Gangbanged 5" for Elegant Angel',
|
||||
},
|
||||
{
|
||||
path: 'tags/dv-tp/0.jpeg',
|
||||
target_id: tagsMap['dv-tp'],
|
||||
role: 'photo',
|
||||
comment: 'Luna Rival in LegalPorno SZ1490',
|
||||
},
|
||||
{
|
||||
path: 'tags/tattoo/poster.jpeg',
|
||||
target_id: tagsMap.tattoo,
|
||||
role: 'poster',
|
||||
comment: 'Kali Roses in "Goes All In For Anal" for Hussie Pass',
|
||||
},
|
||||
{
|
||||
path: 'tags/triple-anal/poster.jpeg',
|
||||
target_id: tagsMap['triple-anal'],
|
||||
role: 'poster',
|
||||
comment: 'Kristy Black in SZ1986 for LegalPorno',
|
||||
},
|
||||
{
|
||||
path: 'tags/triple-anal/1.jpeg',
|
||||
target_id: tagsMap['triple-anal'],
|
||||
role: 'photo',
|
||||
comment: 'Natasha Teen in SZ2098 for LegalPorno',
|
||||
},
|
||||
{
|
||||
path: 'tags/triple-anal/2.jpeg',
|
||||
target_id: tagsMap['triple-anal'],
|
||||
role: 'photo',
|
||||
comment: 'Kira Thorn in GIO1018 for LegalPorno',
|
||||
},
|
||||
{
|
||||
path: 'tags/blowbang/poster.jpeg',
|
||||
target_id: tagsMap.blowbang,
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/gangbang/poster.jpeg',
|
||||
target_id: tagsMap.gangbang,
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/gangbang/1.jpeg',
|
||||
target_id: tagsMap.gangbang,
|
||||
role: 'photo',
|
||||
comment: 'Ginger Lynn in "Gangbang Mystique", a photoset shot by Suze Randall for Puritan No. 10, 1984. This photo pushed the boundaries of pornography at the time, as depicting a woman \'fully occupied\' was unheard of.',
|
||||
},
|
||||
{
|
||||
path: 'tags/gangbang/2.jpeg',
|
||||
target_id: tagsMap.gangbang,
|
||||
role: 'photo',
|
||||
comment: 'Riley Reid\'s double anal in "The Gangbang of Riley Reid" for Jules Jordan',
|
||||
},
|
||||
{
|
||||
path: 'tags/gangbang/3.jpeg',
|
||||
target_id: tagsMap.gangbang,
|
||||
role: 'photo',
|
||||
comment: 'Kelsi Monroe in "Brazzers House 2, Day 2" for Brazzers',
|
||||
},
|
||||
{
|
||||
path: 'tags/mff/poster.jpeg',
|
||||
target_id: tagsMap.mff,
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/mfm/poster.jpeg',
|
||||
target_id: tagsMap.mfm,
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/orgy/poster.jpeg',
|
||||
target_id: tagsMap.orgy,
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/asian/poster.jpeg',
|
||||
target_id: tagsMap.asian,
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/caucasian/poster.jpeg',
|
||||
target_id: tagsMap.caucasian,
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/ebony/poster.jpeg',
|
||||
target_id: tagsMap.ebony,
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/latina/poster.jpeg',
|
||||
target_id: tagsMap.latina,
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/interracial/poster.jpeg',
|
||||
target_id: tagsMap.interracial,
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/facial/poster.jpeg',
|
||||
target_id: tagsMap.facial,
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/bukkake/poster.jpeg',
|
||||
target_id: tagsMap.bukkake,
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/swallowing/poster.jpeg',
|
||||
target_id: tagsMap.swallowing,
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/creampie/poster.jpeg',
|
||||
target_id: tagsMap.creampie,
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/anal-creampie/poster.jpeg',
|
||||
target_id: tagsMap['anal-creampie'],
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/oral-creampie/poster.jpeg',
|
||||
target_id: tagsMap['oral-creampie'],
|
||||
role: 'poster',
|
||||
comment: '',
|
||||
},
|
||||
]
|
||||
.map((file, index) => ({
|
||||
...file,
|
||||
thumbnail: file.thumbnail || file.path.replace('.jpeg', '_thumb.jpeg'),
|
||||
mime: 'image/jpeg',
|
||||
index,
|
||||
domain: file.domain || 'tags',
|
||||
target: { [file.domain || 'tags']: file.target_id },
|
||||
role: file.role || 'photo',
|
||||
}));
|
||||
}
|
||||
const tagPosters = [
|
||||
{
|
||||
path: 'tags/airtight/poster.jpeg',
|
||||
tagSlug: 'airtight',
|
||||
comment: 'Jynx Maze in "Pump My Ass Full of Cum 3" for Jules Jordan',
|
||||
},
|
||||
{
|
||||
path: 'tags/anal/poster.jpeg',
|
||||
tagSlug: 'anal',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/double-penetration/poster.jpeg',
|
||||
tagSlug: 'double-penetration',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/double-anal/poster.jpeg',
|
||||
tagSlug: 'double-anal',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/double-vaginal/poster.jpeg',
|
||||
tagSlug: 'double-vaginal',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/tattoo/poster.jpeg',
|
||||
tagSlug: 'tattoo',
|
||||
comment: 'Kali Roses in "Goes All In For Anal" for Hussie Pass',
|
||||
},
|
||||
{
|
||||
path: 'tags/triple-anal/poster.jpeg',
|
||||
tagSlug: 'triple-anal',
|
||||
comment: 'Kristy Black in SZ1986 for LegalPorno',
|
||||
},
|
||||
{
|
||||
path: 'tags/blowbang/poster.jpeg',
|
||||
tagSlug: 'blowbang',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/gangbang/poster.jpeg',
|
||||
tagSlug: 'gangbang',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/mff/poster.jpeg',
|
||||
tagSlug: 'mff',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/mfm/poster.jpeg',
|
||||
tagSlug: 'mfm',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/orgy/poster.jpeg',
|
||||
tagSlug: 'orgy',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/asian/poster.jpeg',
|
||||
tagSlug: 'asian',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/caucasian/poster.jpeg',
|
||||
tagSlug: 'caucasian',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/ebony/poster.jpeg',
|
||||
tagSlug: 'ebony',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/latina/poster.jpeg',
|
||||
tagSlug: 'latina',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/interracial/poster.jpeg',
|
||||
tagSlug: 'interracial',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/facial/poster.jpeg',
|
||||
tagSlug: 'facial',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/bukkake/poster.jpeg',
|
||||
tagSlug: 'bukkake',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/swallowing/poster.jpeg',
|
||||
tagSlug: 'swallowing',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/creampie/poster.jpeg',
|
||||
tagSlug: 'creampie',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/anal-creampie/poster.jpeg',
|
||||
tagSlug: 'anal-creampie',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/oral-creampie/poster.jpeg',
|
||||
tagSlug: 'oral-creampie',
|
||||
comment: '',
|
||||
},
|
||||
]
|
||||
.map((file, index) => ({
|
||||
...file,
|
||||
thumbnail: file.thumbnail || file.path.replace('.jpeg', '_thumb.jpeg'),
|
||||
mime: 'image/jpeg',
|
||||
index,
|
||||
}));
|
||||
|
||||
const tagPhotos = [
|
||||
{
|
||||
path: 'tags/airtight/2.jpeg',
|
||||
tagSlug: 'airtight',
|
||||
comment: 'Dakota Skye in "Dakota Goes Nuts" for ArchAngel',
|
||||
},
|
||||
{
|
||||
path: 'tags/airtight/1.jpeg',
|
||||
tagSlug: 'airtight',
|
||||
comment: 'Chloe Amour in "DP Masters 4" for Jules Jordan',
|
||||
},
|
||||
{
|
||||
path: 'tags/airtight/0.jpeg',
|
||||
domain: 'tags',
|
||||
tagSlug: 'airtight',
|
||||
comment: 'Sheena Shaw in "Ass Worship 14" for Jules Jordan',
|
||||
},
|
||||
{
|
||||
path: 'tags/da-tp/0.jpeg',
|
||||
tagSlug: 'da-tp',
|
||||
comment: 'Natasha Teen in LegalPorno SZ2164',
|
||||
},
|
||||
{
|
||||
path: 'tags/da-tp/3.jpeg',
|
||||
tagSlug: 'da-tp',
|
||||
comment: 'Evelina Darling in GIO294',
|
||||
},
|
||||
{
|
||||
path: 'tags/da-tp/1.jpeg',
|
||||
tagSlug: 'da-tp',
|
||||
comment: 'Francys Belle in SZ1702 for LegalPorno',
|
||||
},
|
||||
{
|
||||
path: 'tags/da-tp/2.jpeg',
|
||||
tagSlug: 'da-tp',
|
||||
comment: 'Angel Smalls in GIO408 for LegalPorno',
|
||||
},
|
||||
{
|
||||
path: 'tags/da-tp/4.jpeg',
|
||||
tagSlug: 'da-tp',
|
||||
comment: 'Ninel Mojado aka Mira Cuckold in GIO063 for LegalPorno',
|
||||
},
|
||||
{
|
||||
path: 'tags/dv-tp/poster.jpeg',
|
||||
tagSlug: 'dv-tp',
|
||||
comment: 'Juelz Ventura in "Gangbanged 5" for Elegant Angel',
|
||||
},
|
||||
{
|
||||
path: 'tags/dv-tp/0.jpeg',
|
||||
tagSlug: 'dv-tp',
|
||||
comment: 'Luna Rival in LegalPorno SZ1490',
|
||||
},
|
||||
{
|
||||
path: 'tags/triple-anal/1.jpeg',
|
||||
tagSlug: 'triple-anal',
|
||||
comment: 'Natasha Teen in SZ2098 for LegalPorno',
|
||||
},
|
||||
{
|
||||
path: 'tags/triple-anal/2.jpeg',
|
||||
tagSlug: 'triple-anal',
|
||||
comment: 'Kira Thorn in GIO1018 for LegalPorno',
|
||||
},
|
||||
{
|
||||
path: 'tags/gangbang/1.jpeg',
|
||||
tagSlug: 'gangbang',
|
||||
comment: 'Ginger Lynn in "Gangbang Mystique", a photoset shot by Suze Randall for Puritan No. 10, 1984. This photo pushed the boundaries of pornography at the time, as depicting a woman \'fully occupied\' was unheard of.',
|
||||
},
|
||||
{
|
||||
path: 'tags/gangbang/2.jpeg',
|
||||
tagSlug: 'gangbang',
|
||||
comment: 'Riley Reid\'s double anal in "The Gangbang of Riley Reid" for Jules Jordan',
|
||||
},
|
||||
{
|
||||
path: 'tags/gangbang/3.jpeg',
|
||||
tagSlug: 'gangbang',
|
||||
comment: 'Kelsi Monroe in "Brazzers House 2, Day 2" for Brazzers',
|
||||
},
|
||||
]
|
||||
.map((file, index) => ({
|
||||
...file,
|
||||
thumbnail: file.thumbnail || file.path.replace('.jpeg', '_thumb.jpeg'),
|
||||
mime: 'image/jpeg',
|
||||
index,
|
||||
}));
|
||||
|
||||
/* eslint-disable max-len */
|
||||
exports.seed = knex => Promise.resolve()
|
||||
.then(async () => {
|
||||
const [duplicates, tags] = await Promise.all([
|
||||
knex('media').where('domain', 'tags'),
|
||||
knex('tags').where('alias_for', null),
|
||||
const tagMedia = tagPosters.concat(tagPhotos);
|
||||
|
||||
const tags = await knex('tags').whereIn('slug', tagMedia.map(item => item.tagSlug));
|
||||
const { inserted, updated } = await upsert('media', tagMedia.map(({
|
||||
path, thumbnail, mime, index, comment,
|
||||
}) => ({
|
||||
path, thumbnail, mime, index, comment,
|
||||
})), 'path', knex);
|
||||
|
||||
const tagIdsBySlug = tags.reduce((acc, tag) => ({ ...acc, [tag.slug]: tag.id }), {});
|
||||
const mediaIdsByPath = inserted.concat(updated).reduce((acc, item) => ({ ...acc, [item.path]: item.id }), {});
|
||||
|
||||
const tagPosterEntries = tagPosters.map(poster => ({
|
||||
tag_id: tagIdsBySlug[poster.tagSlug],
|
||||
media_id: mediaIdsByPath[poster.path],
|
||||
}));
|
||||
|
||||
const tagPhotoEntries = tagPhotos.map(photo => ({
|
||||
tag_id: tagIdsBySlug[photo.tagSlug],
|
||||
media_id: mediaIdsByPath[photo.path],
|
||||
}));
|
||||
|
||||
return Promise.all([
|
||||
upsert('tags_posters', tagPosterEntries, 'tag_id', knex),
|
||||
upsert('tags_photos', tagPhotoEntries, 'tag_id', knex),
|
||||
]);
|
||||
|
||||
const duplicatesByPath = duplicates.reduce((acc, file) => ({ ...acc, [file.path]: file }), {});
|
||||
const tagsMap = tags.reduce((acc, { id, slug }) => ({ ...acc, [slug]: id }), {});
|
||||
|
||||
const media = getMedia(tagsMap);
|
||||
|
||||
return upsert('media', media, duplicatesByPath, 'path', knex);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user