const upsert = require('../src/utils/upsert'); const tagPosters = [ ['airtight', 1, 'Jynx Maze in "Pump My Ass Full of Cum 3" for Jules Jordan'], ['anal', 2, 'Sheena Shaw for Bang Bros'], ['anal-creampie', 0, 'Gina Valentina and Jane Wilde in "A Very Special Anniversary" for Tushy'], ['asian', 'poster', 'Vina Sky in "Young and Glamorous 10" for Jules Jordan'], ['ass-to-mouth', 'poster', 'Alysa Gap and Logan in "Anal Buffet 4" for Evil Angel'], ['bdsm', 0, 'Dani Daniels in "The Traning of Dani Daniels, Day 2" for The Training of O at Kink'], ['behind-the-scenes', 0, 'Janice Griffith in "Day With A Pornstar: Janice" for Brazzers'], ['blowbang', 'poster'], ['blowjob', 0, 'Adriana Chechik in "The Dinner Party" for Real Wife Stories (Brazzers)'], ['bukkake', 'poster'], ['caucasian', 1, 'Sheena Shaw for Brazzers'], ['creampie', 'poster'], ['da-tp', 0, 'Natasha Teen in LegalPorno SZ2164'], ['deepthroat', 0, 'Chanel Grey in "Deepthroating Is Fun" for Throated'], ['double-anal', 2, 'Lana Rhoades in "Lana Rhoades Unleashed" for HardX'], ['double-penetration', 'poster', 'Mia Malkova in "DP Me Vol. 8" for HardX'], ['double-vaginal', 'poster', 'Riley Reid in "Pizza That Ass" for Reid My Lips'], ['dv-tp', 'poster', 'Juelz Ventura in "Gangbanged 5" for Elegant Angel'], ['ebony', 1, 'Sarah Banks for Brazzers'], ['facefucking', 1, 'Carrie for Young Throats'], ['facial', 'poster'], ['gangbang', 'poster', 'Kristen Scott in "Interracial Gangbang!" for Jules Jordan'], ['gaping', 1, 'Vina Sky in "Vina Sky Does Anal" for HardX'], ['interracial', 'poster'], ['latina', 'poster'], ['mff', 0, 'Madison Ivy and Adriana Chechik in "Day With A Pornstar" for Brazzers'], ['mfm', 1, 'Jynx Maze in "Don\'t Make Me Beg 4" for Evil Angel'], ['oral-creampie', 1, 'Keisha Grey in Brazzers House'], ['orgy', 'poster'], ['schoolgirl', 1, 'Eliza Ibarra for Brazzers'], ['swallowing', 'poster'], ['tattoo', 'poster', 'Kali Roses in "Goes All In For Anal" for Hussie Pass'], ['trainbang', 'poster', 'Kali Roses in "Passing Me Around" for Blacked'], ['triple-anal', 'poster', 'Kristy Black in SZ1986 for LegalPorno'], ] .map(([slug, filename, comment], index) => ({ tagSlug: slug, path: `tags/${slug}/${filename}.jpeg`, thumbnail: `tags/${slug}/${filename}_thumb.jpeg`, mime: 'image/jpeg', index, comment, })); const tagPhotos = [ ['airtight', 2, 'Dakota Skye in "Dakota Goes Nuts" for ArchAngel'], ['airtight', 3, 'Anita Bellini in "Triple Dick Gangbang" for Hands On Hardcore (DDF Network)'], ['anal', 'poster', 'Jynx Maze in "Anal Buffet 6" for Evil Angel'], ['anal', 1, 'Veronica Leal and Tina Kay in "Agents On Anal Mission" for Asshole Fever'], ['anal', 0], ['caucasian', 'poster'], ['da-tp', 1, 'Francys Belle in SZ1702 for LegalPorno'], ['da-tp', 2, 'Angel Smalls in GIO408 for LegalPorno'], ['da-tp', 3, 'Evelina Darling in GIO294'], ['da-tp', 4, 'Ninel Mojado aka Mira Cuckold in GIO063 for LegalPorno'], ['double-anal', 6, 'Sheena Shaw in "Ass Worship 14" for Jules Jordan'], ['double-anal', 5, 'Riley Reid in "The Gangbang of Riley Reid" for Jules Jordan'], ['double-anal', 'poster', 'Haley Reed in "Young Hot Ass" for Evil Angel'], ['double-anal', 0, 'Nicole Black doing double anal during a gangbang in GIO971 for LegalPorno'], ['double-anal', 1, 'Ria Sunn in SZ1801 for LegalPorno'], ['double-penetration', 0, 'Zoey Monroe in "Slut Puppies 7" for Jules Jordan'], ['double-penetration', 1, 'Jynx Maze in "Don\'t Make Me Beg 4" for Evil Angel'], ['double-vaginal', 0, 'Aaliyah Hadid in "Squirting From Double Penetration With Anal" for Bang Bros'], ['dv-tp', 1, 'Adriana Chechik in "Adriana\'s Triple Anal Penetration!"'], ['dv-tp', 0, 'Luna Rival in LegalPorno SZ1490'], ['facefucking', 2, 'Jynx Maze for Throated'], ['gangbang', 0, '"4 On 1 Gangbangs" for Doghouse Digital'], ['gangbang', 1, '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.'], ['gangbang', 2, 'Riley Reid\'s double anal in "The Gangbang of Riley Reid" for Jules Jordan'], ['gaping', 'poster', 'Paulina in "Anal Buffet 4" for Evil Angel'], ['gaping', 0, 'McKenzee Miles in "Anal Buffet 4" for Evil Angel'], ['mfm', 'poster', 'Vina Sky for Jules Jordan'], ['trainbang', 0, 'Nicole Black in GIO971 for LegalPorno'], ['triple-anal', 1, 'Natasha Teen in SZ2098 for LegalPorno'], ['triple-anal', 2, 'Kira Thorn in GIO1018 for LegalPorno'], ['oral-creampie', 'poster', 'Khloe Kapri'], ] .map(([slug, fileIndex, comment], index) => ({ tagSlug: slug, path: `tags/${slug}/${fileIndex}.jpeg`, thumbnail: `tags/${slug}/${fileIndex}_thumb.jpeg`, mime: 'image/jpeg', index, comment, })); const sfw = Object.entries({ kittens: [ ['fEK4jvgnApg', 'Kim Davies'], ['FCx5h0erwnA', 'Lorraine Steriopol'], ['RcGUiP9dphM', 'Kym Ellis'], ['gAPXLS1LRVE', 'Olya Kuzovkina'], ['JHf_O0inuHg', 'Prasad Panchakshari'], ['CKsDMYPDgCs', 'Jacalyn Beales'], ['mQquoOszMRM', 'Dimitri Houtteman'], ['MNju0A6EeE0', 'Amy Baugess'], ['emI7VUcvLi0', 'The Lucky Neko'], ['Aq4e2-v7UuQ', 'Mario Peter'], ['6vY_jbV12kQ', 'Kazuky Akayashi'], ['1BfCps2-XjQ', 'Ramiz Dedaković'], ['iNEXVlX-RLs', 'Lucija Ros'], ['b8g-ywrrl5Y', 'Leighann Blackwood'], ['Y3gjv5x38Wc', 'Agustin Fernandez'], ['TYXh7h4QxX0', 'Leighann Blackwood'], ['6EchiwVg7C4', 'Jesse Borovnica'], ['fGh_mgAcKYY', 'Šárka Jonášová'], ['V8o2n1GbMWc', 'Hunt Han'], ['TEnrxLKakgI', 'Diver Zhang'], ['XZuTLRfxwcU', 'Diana Parkhouse'], ['rpvS2T2Tl0c', 'Luiza Braun'], ['1S08ciB6Fy4', 'Екатерина Балабанова'], ['iuBVMDnwaho', 'Shaun Meintjes'], ['02kGh5lGsb8', 'Kym Ellis'], ['8ELEgu78IbU', 'Kristin Wilson'], ['TQ0XD_mGC8c', 'Kamal Bilal'], ['zgvb8Knw_AU', 'Zoë Gayah Jonker'], ['GGb-AyBZhjY', 'Brett Jordan'], ['DyD9hx5lvpg', 'James Pond'], ], architecture: [ ['jBanV-D3T-Q', 'Dimitry Anikin'], ['VoQ35NRfZro', 'Dabbas'], ['_u_wI4LaT7o', 'Alex Hudson'], ['oSmn4cbhl8w', 'Jorge Gardner'], ['c8GdokJMjWU', 'Mert Kahveci'], ['nfPguKj20Ac', 'Ilya Panasenko'], ['GGxUyCgfORg', 'photo_comments'], ['oLUPaceKme0', 'Jack Schwartz'], ['bo6oz4m4OXY', 'Vinicius Henrique'], ['7HYbCXD2GSA', 'Theme Inn'], ['6K4hh4VX3T0', 'SaiKrishna Saketh'], ['lTxOZBNZ9yM', '[2Ni]'], ['H3mL3kocOQ4', 'Artur Matosyan'], ['ijxxeMO3c8E', 'Larry Teo'], ['WMrd7-CjyF0', 'Anna Claire Schellenberg'], ['FJIFiUCOTfc', 'Kirsten Drew'], ['9daKXiWx5Eg', 'Anastasia Dulgier'], ['47QjuZBn5dQ', 'Murugavel Oli'], ['yjR2ne1gtAA', 'Marius'], ['y9vO3FWDZb0', 'bckfwd'], ['Ro6CB6x-VUg', 'Andreas NextVoyagePL'], ['2td44mctvmI', 'Cameron Venti'], ['M1uoNRrNrkE', 'Willian Justen de Vasconcellos'], ['L-2jRW74fPY', 'Daryan Shamkhali'], ['NrzNScsGgp8', 'Guy Basabose'], ['Qr5pi1_GlvY', 'Benno Klandt'], ['twruXW0M2Mw', 'sk'], ['B8vwUO2NM9Y', 'Stuart Frisby'], ['p9jBrqMSU6Q', 'Han Leentvaar'], ['4rGlazYAV3I', 'Dmitry Bayer'], ], flowers: [ ['4QLKuXKAy7k', 'BEAUFIGEAU CELINE'], ['DlYzHwAl32g', 'HISANARI KUNIMOTO'], ['3TXuFNun-5Q', 'Erik Andres Reynoso'], ['Rrhfeq9yeQ0', 'NeONBRAND'], ['YaQdJyulJdU', 'Natasha V'], ['wt4u1wNiT9I', 'Teo Zac'], ['HG5RcKEawLA', 'Varshesh Joshi'], ['VBtdWGCQ2yw', 'Vanessa Ochotorena'], ['a-lIQzpvbHs', 'Thomas AE'], ['D5RScffd8WU', 'NeONBRAND'], ['mXQyEcINwa8', 'Thought Catalog'], ['REczfcmwooE', 'Steve Harvey'], ['7pGehyH7o64', 'Leonardo Wong'], ['wvGQYtZ_c08', 'chuttersnap'], ['jjqZ0gvHLYc', 'Suresh Purohit'], ['9wQ-aGu0gBs', 'Joël de Vriend'], ['8ANiHTtHbAQ', 'Nick Karvounis'], ['Ehko8EbURbk', 'Chris Barbalis'], ['Rlxfn__azLQ', 'Annie Spratt'], ['q8I3Jeph4uU', 'Jake Dela Concepcion'], ['wQjjYp8_a0Y', 'Henry Lorenzatto'], ['GnwWHUXBfYI', 'Will Svec'], ['pwFNVBlj5XU', 'Danijela Froki'], ['RWz313DUECo', 'Laura Baker'], ['lffwXgsqChg', 'Nils Schirmer'], ['e1O6NCmhUt4', 'Brian McGowan'], ], food: [ ['XPSXhLx143g', 'Wouter Meijering'], ['VpxavZd4S-I', 'Mr Lemon'], ['9vHOhKoNlNw', 'Edrece Stansberry'], ['uScYRjZ2ol8', 'donald modeste'], ['fCE-pTmFrPI', 'Valeriu Bondarenco'], ['1ZTccDpF71k', 'Austin Paquette'], ['Au-LzDMd_Cw', 'Stephanie McCabe'], ['9cfHdC2Asak', 'cindy fernandez'], ['4-rmvQRL2nY', 'Annie Spratt'], ['8Yvwy4Kbd1g', 'Alex Kondratiev'], ['4PtChDuxsDI', 'Dronile Hiraldo'], ['Mi1SNlsyWAk', 'Louis Hansel @shotsoflouis'], ['nn0whk6nzv4', 'Yulia Chinato'], ['8JIIoSFtEbo', 'Massimo Virgilio'], ['44eKcVXzFoc', 'Alonso Romero'], ['JpbtAb-f3JA', 'Dollar Gill'], ['Hvrm3efPYIA', 'Delaney Van'], ['4E0dknSrQVU', 'Matteo Maretto'], ['krNP2ESq-54', 'Joshua Bedford'], ['DPNrBT1WCMs', 'Egor Lyfar'], ['Yy-dHQP-Ax0', 'Markus Spiske'], ['BKSntHf8oiU', 'Melissa Walker Horn'], ['asaGSZEyltQ', 'Noora AlHammadi'], ['U3hCd1S7FQ4', 'Louis Hansel @shotsoflouis'], ['VOpJTnP6S9g', 'Liana Mikah'], ['9TWavGempJc', 'Ashleigh Robertson'], ['I2tgHl69Dco', 'Louis Hansel @shotsoflouis'], ['fyQr1T3GE34', 'Petr Sevcovic'], ['pGe5mc4Eip8', 'Daniel Park'], ['gZsgKrNc8es', 'Dan Gold'], ], }) .map(([category, photos]) => photos.map(([photo, copyright], index) => ({ path: `sfw/${category}/${photo}.jpeg`, thumbnail: `sfw/${category}/thumbs/${photo}.jpeg`, mime: 'image/jpeg', sfw_media_id: null, group: category, index, copyright, comment: `Courtesy of ${copyright}`, }))) .flat(); /* eslint-disable max-len */ exports.seed = knex => Promise.resolve() .then(async () => { const { inserted } = await upsert('media', sfw, 'path'); const sfwMediaIds = inserted.map(mediaEntry => ({ media_id: mediaEntry.id })); await upsert('media_sfw', sfwMediaIds, 'media_id'); }) .then(async () => { 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', 'media_id'], knex), ]); });