const upsert = require('../src/utils/upsert'); const tagPosters = [ ['airtight', 1, 'Jynx Maze in "Pump My Ass Full of Cum 3" for Jules Jordan'], ['anal', 3, 'Dakota Skye for Brazzers'], ['anal-creampie', 0, 'Gina Valentina and Jane Wilde in "A Very Special Anniversary" for Tushy'], ['ass-eating', 0, 'Kendra Sunderland and Ana Foxxx in "Kendra\'s Obsession, Part 3" for Blacked'], ['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'], ['blonde', 0, 'Anikka Albrite and Lena Nicole or Cherie DeVille in the BTS of "New Zealand Holiday" for In The Crack'], ['blowbang', 'poster'], ['blowjob', 0, 'Adriana Chechik in "The Dinner Party" for Real Wife Stories (Brazzers)'], ['brunette', 0, 'Nicole Black in GIO971 for LegalPorno'], ['bukkake', 'poster'], ['caucasian', 0, 'Remy Lacroix for HardX'], ['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-blowjob', 0, 'Kira Noir and Kali Roses for Brazzers'], ['double-penetration', 'poster', 'Mia Malkova in "DP Me 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, 'Ana Foxxx in "Gangbang Me 3" for HardX'], ['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', 0, 'Abby Lee Brazil for Bang Bros'], ['lesbian', 0, 'Reena Sky and Sarah Banks for Brazzers'], ['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', 2, 'Gabbie Carter for Tushy Raw'], ['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], ['behind-the-scenes', 1, 'Madison Ivy in "Day With A Pornstar" for Brazzers'], ['caucasian', 1, 'Sheena Shaw for Brazzers'], ['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'], ], landscapes: [ ['FuaNmJPLAHg', 'MINSUN KIM'], ['8flZ753v87Q', 'Ken Schlabach'], ['6qdO_nFhYoI', 'Clay Banks'], ['357TZAnR11o', 'Anton Lammert'], ['VMmPxFmfwfQ', 'Xiaopeng Ma'], ['DAufF3R8B5Q', 'Sangga Rima Roman Selia'], ['5U9n9gip7VY', 'Annie Spratt'], ['Tot7FLHWotI', 'elCarito'], ['vph4L_OjhuI', 'Marek Piwnicki'], ['Nd8h38tRIlc', 'Kevin Horvat'], ['nACRxCEAut8', 'ALEKSEY KUPRIKOV'], ['PjyfZ-Ujut8', 'Denys Nevozhai'], ['X6utHocVX8w', 'Ian Williams'], ['cq6g1WssaJI', 'Tyler Casey'], ['U1ad7OjdHx8', 'Dave Herring'], ['si5673B4PIE', 'Annie Spratt'], ['shv8H0Dv5iE', 'Aditya Chinchure'], ['hjVrWFVyOqE', 'chuttersnap'], ['_skrrHIcsEk', 'Edward Ma'], ['GMNtcgo-KdA', 'Yoav Hornung'], ['313dueuxHls', 'Jamie Street'], ['SncOlKOY7NY', 'Ward Mercer'], ['7R11NCmOY6k', 'Ivan Bandura'], ['YFwOiSisSLM', 'Krzysztof Kotkowicz'], ['gbO7zCOUJIg', 'Brian Kyed'], ['5iwG4xlUgJ4', 'Jason Leung'], ['G_PSim-dsvU', 'Alexandra Jitariuc'], ['gVl6Hsi_pxo', 'Jean-Philippe Delberghe'], ['p8h0_0pyW9k', 'Bence Balla-Schottner'], ], wildlife: [ ['Tot7FLHWotI', 'elCarito'], ['-I0EgcZdV0E', 'Maarten van den Heuvel'], ['F21zt7_icpo', 'Tevin Trinh'], ['gMxgp-MwCyQ', 'James Wainscoat'], ['FFlb5Uj3vhc', 'Sigmund'], ['hglSMjdh83M', 'Srinivasan Venkataraman'], ['UgWcvfl4q5I', 'NOAA'], ['PZ1nEPFNBJQ', 'Third Idea'], ['f4yYs5P5GbA', 'rigel'], ['e94T5ag-9x0', 'Jayden Brand'], ['6Fcllk7ze_Q', 'Vivian Arcidiacono'], ['O7G3II8E2Eo', 'Erik-Jan Leusink'], ['-6UNL6Ghn_c', 'Silvio Kundt'], ['EyZMGYn1Uj4', 'AGL Fotos'], ['nxR7gvSokH8', 'Waldemar Brandt'], ['sAGXVK6bNFc', 'Amar Yashlaha'], ['8zLCXDWETEg', 'Clément ROY'], ['4nPFQ2sUhUE', 'Justin Porter'], ['mUNDTQrfnSk', 'Zahrin Lukman'], ['VXcX0Joa09k', 'Max Rovensky'], ['F_HycxA2lwc', 'Marthijn Brinks'], ['ss01halnU4I', 'Dušan Smetana'], ['lktWv61WoNI', 'Rory Lindholm'], ['myeQ2RH1PX0', 'Alexander Ross'], ['dhIAyAmfjz8', 'Third Idea'], ['AGprQpF4STo', 'Jeff Lemond'], ['P8pBJQVt4UA', 'Christer Gundersen'], ['nt8Ek7sRgdA', 'Mikell Darling'], ['YHv0BDThVOw', 'Nicholas Doherty'], ], interior: [ ['9wGKENQ-qTI', 'Kunj Parekh'], ['x3BCSWCAtrY', 'yann maignan'], ['EF6z_6R94zQ', 'Orlova Maria'], ['dC8NC2QBFyQ', 'Kari Shea'], ['A_AuirVquQY', 'Abbie Bernet'], ['IJf2v-StB4Y', 'yann maignan'], ['frsN89Tf-1Q', 'Joshua Eckstein'], ['s95oB2n9jng', 'Aaron Huber'], ['n_vdmdtNh6M', 'Tiplada Mekvisan'], ['GbiVL6t4T-o', 'gdtography'], ['xx0oSB1YxRE', 'Joseph Albanese'], ['McaNtoPEEcg', 'Brooke Cagle'], ['s65VlkIYSDw', 'Robert Bye'], ['pEaBEqXXk-M', 'Aw Creative'], ['GaX7QTgs8pg', 'Waldemar Brandt'], ['b75FBg97dU0', 'Bao Menglong'], ['5i0GnoTTjSE', 'Philipp Berndt'], ['buhmhprfo3g', 'Kara Eads'], ['L7EwHkq1B2s', 'Kara Eads'], ['gBdirnalxcQ', 'Nick Fewings'], ['ILgaxpiQu0', 'Matteo Maretto'], ['ydcMwcfY5E0', 'Clark Street Mercantile'], ['zLT3VqWEgOQ', 'Sidekix Media'], ['Yg0Rds6_TsY', 'Sergiu Cindea'], ['gbS_fhrFo10', 'Bekah Russom'], ['o3c-euNd_ZM', 'Alessandra Caretto'], ['IEkMMvdZFc0', 'Nick Hillier'], ['hnhE83RhAWg', 'Stefan Steinbauer'], ], technology: [ ['QpTCSHzhWuo', 'Joshua Hoehne'], ['0lMpQaXfOCg', 'Barrett Ward'], ['C3V88BOoRoM', 'Bench Accounting'], ['w33-zg-dNL4', 'Rami Al-zayat'], ['MC5WbGo_bZM', 'Tom Pumford'], ['iHJ7xouUyXs', 'Amith Nair'], ['E3I9thV98kQ', 'Tatiana Lapina'], ['JuUK7Er9nR4', 'Mohamed Boumaiza'], ['Dei5oAC_wJc', 'Kenny Luo'], ['ltwEbf_G9bs', 'Mario Caruso'], ['gWdlDR4WpV4', 'Zarak Khan'], ['0Um6Yr1cyx0', 'Antoine Beauvillain'], ['_8S9nEmCZK0', 'Oliur'], ['etFrnBJS1qc', 'NeONBRAND'], ['ZMVtx_KJtOk', 'Thought Catalog'], ['JNuKyKXLh8U', 'Noiseporn'], ['5gzr-RM-rZM', 'Kenny Luo'], ['eWaXmZsXKDs', 'Zane Lee'], ['4qGbMEZb56c', 'Thomas William'], ['hwqWxHoH2wk', 'Markus Spiske'], ['vZJdYl5JVXY', 'Kaitlyn Baker'], ['Lg8xTZjs6Lg', 'Marc Mueller'], ['lxH4ZeXXKMI', 'Hanson Lu'], ['M5HQPjXrjlQ', 'Matt Hoffman'], ['A-b37b-CrYE', 'Kenny Luo'], ['Kj2SaNHG-hg', 'Christopher Burns'], ['A1v0-iH3T5A', 'Patrick Hendry'], ['iFBIdX54BOk', 'Keagan Henman'], ], }) .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), ]); });