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', })); } /* 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 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); });