const bulkInsert = require('../src/utils/bulk-insert'); const affiliates = { julesjordan_signup: { url: 'https://enter.julesjordan.com/track/Mzk3MS4yLjMuNi4wLjAuMC4wLjA', comment: '$30 per signup', }, manuelferrara_signup: { url: 'https://enter.manuelferrara.com/track/Mzk3MS4yLjcuMTYuMC4wLjAuMC4w', comment: '$30 per signup', }, spermswallowers_signup: { url: 'https://enter.spermswallowers.com/track/Mzk3MS4yLjUuMTMuMC4wLjAuMC4w', comment: '$30 per signup', }, theassfactory_signup: { url: 'https://enter.theassfactory.com/track/Mzk3MS4yLjEuMS4wLjAuMC4wLjA', comment: '$30 per signup', }, legalporno_new: { url: 'https://www.legalporno.com/new-videos?aff=BW90MHT1DP____', comment: 'default offer', }, pornworld_new: { url: 'https://pornworld.com/new-videos?aff=BW90MHT1DP____', comment: 'default offer', }, }; const banners = [ { id: 'julesjordan_728_90_jill_kassidy', width: 728, height: 90, network: 'julesjordan', tags: ['sex', 'blowjob', 'black-cock', 'brunette'], }, { id: 'julesjordan_728_90_angela_white', width: 728, height: 90, network: 'julesjordan', tags: ['sex', 'black-cock', 'brunette'], }, { id: 'julesjordan_728_90_adriana_chechik', width: 728, height: 90, network: 'julesjordan', tags: ['anal', 'black-cock', 'brunette'], }, { id: 'julesjordan_728_90_autumn_falls', width: 728, height: 90, network: 'julesjordan', tags: ['sex', 'big-boobs', 'brunette'], }, { id: 'julesjordan_728_90_gabbie_carter', width: 728, height: 90, network: 'julesjordan', tags: ['sex', 'blowjob', 'big-boobs', 'brunette'], }, { id: 'manuelferrara_728_90_asses', width: 728, height: 90, channel: 'manuelferrara', tags: ['big-butt'], }, { id: 'pornworld_600_120_1', width: 600, height: 120, network: 'pornworld', tags: ['anal', 'brunette'], }, { id: 'pornworld_600_120_2', width: 600, height: 120, network: 'pornworld', tags: ['mfm', 'sex', 'brunette'], }, ]; const links = [ { network: 'julesjordan', affiliate: 'julesjordan_signup', }, { network: 'julesjordan', affiliate: 'julesjordan_signup', banner: 'julesjordan_728_90_jill_kassidy', }, { network: 'julesjordan', affiliate: 'julesjordan_signup', banner: 'julesjordan_728_90_angela_white', }, { network: 'julesjordan', affiliate: 'julesjordan_signup', banner: 'julesjordan_728_90_adriana_chechik', }, { network: 'julesjordan', affiliate: 'julesjordan_signup', banner: 'julesjordan_728_90_autumn_falls', }, { network: 'julesjordan', affiliate: 'julesjordan_signup', banner: 'julesjordan_728_90_gabbie_carter', }, { channel: 'manuelferrara', affiliate: 'manuelferrara_signup', }, { channel: 'manuelferrara', affiliate: 'manuelferrara_signup', banner: 'manuelferrara_728_90_asses', }, { channel: 'spermswallowers', affiliate: 'spermswallowers_signup', }, { channel: 'theassfactory', affiliate: 'theassfactory_signup', }, { network: 'legalporno', affiliate: 'legalporno_new', }, { channel: 'legalporno', affiliate: 'legalporno_new', banner: 'pornworld_600_120_1', }, { channel: 'legalporno', affiliate: 'legalporno_new', banner: 'pornworld_600_120_2', }, { network: 'pornworld', affiliate: 'pornworld_new', }, { network: 'pornworld', affiliate: 'pornworld_new', banner: 'pornworld_600_120_1', }, { network: 'pornworld', affiliate: 'pornworld_new', banner: 'pornworld_600_120_2', }, ]; exports.seed = async knex => Promise.resolve() .then(async () => { await Promise.all([ knex('campaigns').delete(), knex('affiliates').delete(), knex('banners').delete(), ]); await bulkInsert('affiliates', Object.entries(affiliates).map(([key, value]) => ({ id: key, ...value })), false); const [networks, channels, tags] = await Promise.all([ knex('entities') .where('type', 'network') .whereIn('slug', links.concat(banners).map(link => link.network).filter(Boolean)), knex('entities') .where('type', 'channel') .whereIn('slug', links.concat(banners).map(link => link.channel).filter(Boolean)), knex('tags') .whereIn('slug', banners.flatMap(banner => banner.tags || [])), ]); const networksBySlug = networks.reduce((acc, network) => ({ ...acc, [network.slug]: network }), {}); const channelsBySlug = channels.reduce((acc, channel) => ({ ...acc, [channel.slug]: channel }), {}); const tagsBySlug = tags.reduce((acc, tag) => ({ ...acc, [tag.slug]: tag }), {}); const linksWithEntityIdAndAffiliateId = links.map(link => ({ entity_id: networksBySlug[link.network]?.id || channelsBySlug[link.channel]?.id, affiliate_id: link.affiliate, banner_id: link.banner, })).filter(link => link.entity_id && link.affiliate_id); const bannersWithEntityId = banners.map(banner => ({ id: banner.id, width: banner.width, height: banner.height, entity_id: networksBySlug[banner.network]?.id || channelsBySlug[banner.channel]?.id || null, })); const bannerTags = banners.flatMap(banner => banner.tags?.map(tag => ({ banner_id: banner.id, tag_id: tagsBySlug[tag].id, })) || []); await bulkInsert('banners', bannersWithEntityId, false); await bulkInsert('banners_tags', bannerTags, false); await bulkInsert('campaigns', linksWithEntityIdAndAffiliateId, false); });