2019-11-06 01:47:10 +00:00
const upsert = require ( '../src/utils/upsert' ) ;
2020-02-13 02:44:04 +00:00
const slugify = require ( '../src/utils/slugify' ) ;
2019-11-06 01:47:10 +00:00
const groups = [
2020-05-18 02:28:38 +00:00
{
slug : 'age' ,
name : 'Age' ,
} ,
{
slug : 'body' ,
name : 'Body' ,
} ,
{
slug : 'clothing' ,
name : 'Clothing' ,
} ,
{
slug : 'ethnicity' ,
name : 'Ethnicity' ,
} ,
{
slug : 'finish' ,
name : 'Finish' ,
} ,
{
slug : 'group' ,
name : 'Group sex' ,
} ,
{
slug : 'hair' ,
name : 'Hair' ,
} ,
{
slug : 'location' ,
name : 'Location' ,
} ,
{
slug : 'oral' ,
name : 'Oral' ,
} ,
{
slug : 'orientation' ,
name : 'Orientation' ,
} ,
{
slug : 'penetration' ,
name : 'Penetration' ,
} ,
{
slug : 'position' ,
name : 'Position' ,
} ,
{
slug : 'roleplay' ,
name : 'Roleplay' ,
} ,
2019-11-06 01:47:10 +00:00
] ;
2020-02-13 02:44:04 +00:00
const tags = [
2020-08-20 02:57:38 +00:00
{
name : '3d' ,
slug : '3d' ,
description : 'Available in 3D.' ,
} ,
2020-05-18 02:28:38 +00:00
{
name : '4K' ,
slug : '4k' ,
description : 'Available in high quality 4K resolution.' ,
} ,
2020-07-14 02:36:14 +00:00
{
name : '5K' ,
slug : '5k' ,
description : 'Available in very high quality 5K resolution.' ,
} ,
2020-05-18 02:28:38 +00:00
{
name : '69' ,
slug : '69' ,
group : 'position' ,
} ,
{
name : 'airtight' ,
slug : 'airtight' ,
2020-07-02 02:04:28 +00:00
description : 'Stuffing one cock in her ass, one in her pussy, and one in her mouth, filling all of her penetrable holes and sealing her airtight like a figurative balloon. In other words, simultaneously getting [double penetrated](/tag/dp), and giving a [blowjob](/tag/blowjob) or getting [facefucked](/tag/facefuck). Being airtight implies being [gangbanged](/tag/gangbang).' , /* eslint-disable-line max-len */
2020-05-18 02:28:38 +00:00
priority : 9 ,
group : 'penetration' ,
} ,
{
name : 'amateur' ,
slug : 'amateur' ,
} ,
{
name : 'anal creampie' ,
slug : 'anal-creampie' ,
priority : 7 ,
description : 'Ejaculating into the asshole.' ,
group : 'finish' ,
} ,
{
name : 'anal' ,
slug : 'anal' ,
description : 'Getting fucked in the asshole.' ,
priority : 9 ,
group : 'penetration' ,
} ,
{
name : 'ass fingering' ,
slug : 'ass-fingering' ,
description : 'Inserting one or multiple fingers into the asshole.' ,
} ,
{
name : 'anal fisting' ,
slug : 'anal-fisting' ,
description : 'Shoving an entire hand into the asshole.' ,
} ,
{
name : 'anal prolapse' ,
slug : 'anal-prolapse' ,
} ,
{
name : 'anal toys' ,
slug : 'anal-toys' ,
description : 'Stuffing a toy, such as a dildo or buttplug, into the ass' ,
2020-07-02 23:28:22 +00:00
priority : 7 ,
2020-05-18 02:28:38 +00:00
} ,
{
name : 'animated' ,
slug : 'animated' ,
} ,
{
name : 'asian' ,
slug : 'asian' ,
priority : 5 ,
group : 'ethnicity' ,
} ,
{
name : 'athletic' ,
slug : 'athletic' ,
group : 'body' ,
} ,
{
name : 'ass to mouth' ,
2020-05-26 02:11:29 +00:00
slug : 'atm' ,
2020-05-18 02:28:38 +00:00
priority : 6 ,
2020-05-24 03:13:50 +00:00
description : 'Sucking off a cock right after it fucked your ass. If it has been in someone else\'s ass, it may be called [ATOGM](/tag/atogm).' ,
group : 'oral' ,
} ,
{
name : 'ass to other girl\'s mouth' ,
slug : 'atogm' ,
priority : 6 ,
2020-05-26 02:11:29 +00:00
description : '[Ass to mouth](/tag/atm) with a cock that has been in someone else\'s ass. ATOGM may also be the gay variation "ass to other guy\'s mouth".' ,
2020-05-18 02:28:38 +00:00
group : 'oral' ,
} ,
{
name : 'ass eating' ,
slug : 'ass-eating' ,
group : 'oral' ,
priority : 6 ,
} ,
{
name : 'ball licking' ,
slug : 'ball-licking' ,
group : 'oral' ,
} ,
{
name : 'ballerina' ,
slug : 'ballerina' ,
group : 'roleplay' ,
} ,
{
name : 'bathroom' ,
slug : 'bathroom' ,
group : 'location' ,
} ,
{
name : 'BDSM' ,
slug : 'bdsm' ,
priority : 8 ,
} ,
{
name : 'BBC' ,
slug : 'bbc' ,
group : 'body' ,
} ,
{
name : 'behind the scenes' ,
slug : 'behind-the-scenes' ,
2020-07-15 03:12:29 +00:00
priority : 6 ,
2020-05-18 02:28:38 +00:00
} ,
{
name : 'big dick' ,
slug : 'big-dick' ,
group : 'body' ,
} ,
{
name : 'big butt' ,
slug : 'big-butt' ,
group : 'body' ,
} ,
{
name : 'big boobs' ,
slug : 'big-boobs' ,
group : 'body' ,
} ,
{
name : 'bisexual' ,
slug : 'bisexual' ,
priority : 10 ,
} ,
{
name : 'black hair' ,
slug : 'black-hair' ,
group : 'hair' ,
} ,
{
name : 'blonde' ,
slug : 'blonde' ,
group : 'hair' ,
} ,
{
name : 'blowjob' ,
slug : 'blowjob' ,
priority : 5 ,
group : 'oral' ,
} ,
{
name : 'blowbang' ,
slug : 'blowbang' ,
priority : 9 ,
description : 'Pleasuring a gang of three or more cocks by sucking and jerking off as many cocks as they can, often getting [facefucked](/tag/facefuck), groped and rubbed out, and followed by a [bukkake](/tag/bukkake). If they are getting fucked, it is a [gangbang](/tag/gangbang).' ,
group : 'group' ,
} ,
{
name : 'bondage' ,
slug : 'bondage' ,
} ,
2020-07-23 02:29:46 +00:00
{
name : 'braces' ,
slug : 'braces' ,
} ,
2020-05-18 02:28:38 +00:00
{
name : 'brunette' ,
slug : 'brunette' ,
group : 'hair' ,
} ,
{
name : 'bukkake' ,
slug : 'bukkake' ,
priority : 8 ,
description : 'Getting ejaculated on the face by a group of three or more men, often following a [blowbang](/tag/blowbang) or [gangbang](/tag/gangbang).' ,
group : 'finish' ,
} ,
{
name : 'casting' ,
slug : 'casting' ,
} ,
{
name : 'cheerleader' ,
slug : 'cheerleader' ,
group : 'roleplay' ,
} ,
{
name : 'choking' ,
slug : 'choking' ,
} ,
{
name : 'corporal punishment' ,
slug : 'corporal-punishment' ,
} ,
{
name : 'couples' ,
slug : 'couples' ,
} ,
{
name : 'cowgirl' ,
slug : 'cowgirl' ,
} ,
{
name : 'creampie' ,
slug : 'creampie' ,
priority : 8 ,
description : 'Ejaculalating into her pussy, often shown visibly dripping out afterwards.' ,
group : 'finish' ,
} ,
{
name : 'cuckold' ,
slug : 'cuckold' ,
} ,
{
name : 'cum licking' ,
slug : 'cum-licking' ,
} ,
{
name : 'cum on butt' ,
slug : 'cum-on-butt' ,
} ,
{
name : 'cum on boobs' ,
slug : 'cum-on-boobs' ,
} ,
{
name : 'cum swapping' ,
slug : 'cum-swapping' ,
} ,
{
name : 'cumshot' ,
slug : 'cumshot' ,
} ,
{
name : 'curvy' ,
slug : 'curvy' ,
} ,
{
name : 'double anal' ,
2020-07-02 02:04:28 +00:00
slug : 'dap' ,
2020-05-18 02:28:38 +00:00
description : 'Two cocks in the ass at the same time. If there\'s a third cock in her pussy, it is [double anal TP](/tag/da-tp).' ,
priority : 8 ,
group : 'penetration' ,
} ,
{
name : 'double dildo' ,
slug : 'double-dildo' ,
description : 'Two girls fucking eachother using either end of a double-sided dildo.' ,
priority : 4 ,
} ,
{
name : 'double dildo anal' ,
slug : 'double-dildo-anal' ,
description : 'Two people ass-fucking eachother with either end of a [double-sided dildo](/tag/double-dildo), "ass to ass".' ,
priority : 4 ,
} ,
{
name : 'double dildo DP' ,
slug : 'double-dildo-dp' ,
description : 'A girl using a [double-sided dildo](/tag/double-dildo) on both her ass and pussy.' ,
priority : 4 ,
} ,
{
name : 'double dildo blowjob' ,
slug : 'double-dildo-blowjob' ,
description : 'Two people sucking and gagging on either end of a [double-sided dildo](/tag/double-dildo). They may deepthroat the dildo for a [double dildo kiss](/tag/double-dildo-kiss).' ,
priority : 4 ,
} ,
{
name : 'double dildo kiss' ,
slug : 'double-dildo-kiss' ,
description : 'Two people deepthroating a [double-sided dildo](/tag/double-dildo) from either end during a [double dildo blowjob](/tag/double-dildo-blowjob), all the way until they can kiss eachother\'s lips.' ,
priority : 4 ,
} ,
{
name : 'triple anal' ,
2020-07-02 02:04:28 +00:00
slug : 'tap' ,
2020-05-18 02:28:38 +00:00
description : 'Getting fucked in the ass by not one, two, but *three* cocks at the same time.' ,
priority : 7 ,
group : 'penetration' ,
} ,
{
name : 'deepthroat' ,
slug : 'deepthroat' ,
priority : 6 ,
group : 'oral' ,
} ,
{
name : 'double penetration' ,
2020-07-02 02:04:28 +00:00
slug : 'dp' ,
2020-05-18 02:28:38 +00:00
priority : 9 ,
description : 'Fucking two cocks at once, with one in her ass, and one in her pussy. If she has another cock in her mouth, she is [airtight](/tag/airtight).' ,
group : 'penetration' ,
} ,
{
name : 'dungeon' ,
slug : 'dungeon' ,
} ,
{
name : 'double vaginal' ,
2020-07-02 02:04:28 +00:00
slug : 'dvp' ,
2020-05-18 02:28:38 +00:00
description : 'Fucking her pussy with two cocks at the same time. If there\'s a third cock in her asshole, it is [double vaginal TP](/tag/dv-tp).' ,
priority : 8 ,
group : 'penetration' ,
} ,
{
name : 'double blowjob' ,
slug : 'double-blowjob' ,
group : 'oral' ,
} ,
{
name : 'doggy style' ,
slug : 'doggy-style' ,
group : 'position' ,
} ,
{
name : 'dress' ,
slug : 'dress' ,
group : 'clothing' ,
} ,
{
name : 'ebony' ,
slug : 'ebony' ,
priority : 5 ,
group : 'ethnicity' ,
} ,
{
name : 'electric shock' ,
slug : 'electric-shock' ,
} ,
{
name : 'fake boobs' ,
slug : 'fake-boobs' ,
} ,
{
name : 'facefucking' ,
slug : 'facefucking' ,
2020-07-02 23:28:22 +00:00
priority : 7 ,
2020-05-18 02:28:38 +00:00
group : 'oral' ,
} ,
{
name : 'facesitting' ,
slug : 'facesitting' ,
group : 'position' ,
} ,
{
name : 'facial' ,
slug : 'facial' ,
group : 'finish' ,
} ,
{
name : 'family taboo' ,
slug : 'family' ,
2020-07-02 23:28:22 +00:00
priority : 7 ,
2020-05-18 02:28:38 +00:00
} ,
{
name : 'feet' ,
slug : 'feet' ,
} ,
{
name : 'femdom' ,
slug : 'femdom' ,
} ,
{
name : 'fingering' ,
slug : 'fingering' ,
} ,
{
name : 'fisting' ,
slug : 'fisting' ,
} ,
{
name : 'MFF threesome' ,
slug : 'mff' ,
priority : 9 ,
description : 'A threesome with two women and one guy, in which the women have sex with eachother.' ,
group : 'group' ,
} ,
{
name : 'gag' ,
slug : 'gag' ,
} ,
{
name : 'gangbang' ,
slug : 'gangbang' ,
2020-07-02 02:04:28 +00:00
description : 'A group of three or more guys fucking a woman, at least two at the same time, often but not necessarily involving a [blowbang](/tag/blowbang), [spitroast](/tag/mfm), [double penetration](/tag/dp) and [airtight](/tag/airtight). If she only gets fucked by one guy at a time, it might be considered a [trainbang](/tag/trainbang) instead. In a reverse gangbang, multiple women fuck one man.' , /* eslint-disable-line max-len */
2020-05-18 02:28:38 +00:00
priority : 9 ,
group : 'group' ,
} ,
2020-07-13 01:51:17 +00:00
{
name : 'glamcore' ,
slug : 'glamcore' ,
} ,
2020-05-18 02:28:38 +00:00
{
name : 'glasses' ,
slug : 'glasses' ,
group : 'clothing' ,
} ,
{
name : 'fake cum' ,
slug : 'fake-cum' ,
group : 'finish' ,
} ,
{
name : 'trainbang' ,
slug : 'trainbang' ,
description : 'A group of three or more guys fucking a woman as in a [gangbang](/tag/gangbang), but one after the other, and never at the same time.' ,
priority : 7 ,
group : 'group' ,
} ,
{
name : 'gaping' ,
slug : 'gaping' ,
priority : 6 ,
} ,
{
name : 'gay' ,
slug : 'gay' ,
priority : 10 ,
} ,
{
name : 'gloryhole' ,
slug : 'gloryhole' ,
} ,
{
name : 'gonzo' ,
slug : 'gonzo' ,
} ,
{
name : 'hairy' ,
slug : 'hairy' ,
group : 'body' ,
} ,
{
name : 'handjob' ,
slug : 'handjob' ,
} ,
{
name : 'hardcore' ,
slug : 'hardcore' ,
} ,
{
name : 'high heels' ,
slug : 'high-heels' ,
group : 'clothing' ,
} ,
{
name : 'humiliation' ,
slug : 'humiliation' ,
} ,
2020-07-17 01:39:13 +00:00
{
name : 'indian' ,
slug : 'indian' ,
} ,
2020-05-18 02:28:38 +00:00
{
name : 'innie pussy' ,
slug : 'innie-pussy' ,
} ,
{
name : 'interracial' ,
slug : 'interracial' ,
priority : 7 ,
group : 'ethnicity' ,
} ,
{
name : 'kissing' ,
slug : 'kissing' ,
} ,
{
name : 'latex' ,
slug : 'latex' ,
} ,
{
name : 'Latina' ,
slug : 'latina' ,
priority : 5 ,
group : 'ethnicity' ,
} ,
{
name : 'leather' ,
slug : 'leather' ,
} ,
{
name : 'lesbian' ,
slug : 'lesbian' ,
priority : 9 ,
} ,
{
name : 'machine dildo' ,
slug : 'machine-dildo' ,
} ,
{
name : 'lingerie' ,
slug : 'lingerie' ,
group : 'clothing' ,
} ,
{
name : 'live' ,
slug : 'live' ,
} ,
{
name : 'maid' ,
slug : 'maid' ,
group : 'roleplay' ,
} ,
{
name : 'massage' ,
slug : 'massage' ,
} ,
{
name : 'male focus' ,
slug : 'male-focus' ,
priority : 7 ,
description : 'Straight porn highlighting the male talent.' ,
} ,
{
name : 'masturbation' ,
slug : 'masturbation' ,
} ,
{
name : 'MILF' ,
slug : 'milf' ,
priority : 7 ,
group : 'age' ,
} ,
{
name : 'MFM threesome' ,
slug : 'mfm' ,
priority : 9 ,
description : 'Two men fucking one woman, but not eachother. Typically involves a \'spitroast\', where one guy gets a blowjob and the other fucks her pussy.' ,
group : 'group' ,
} ,
{
name : 'miniskirt' ,
slug : 'miniskirt' ,
group : 'clothing' ,
} ,
{
name : 'missionary' ,
slug : 'missionary' ,
group : 'position' ,
} ,
{
name : 'natural boobs' ,
slug : 'natural-boobs' ,
group : 'body' ,
} ,
{
name : 'nipple clamps' ,
slug : 'nipple-clamps' ,
} ,
{
name : 'oil' ,
slug : 'oil' ,
} ,
{
name : 'nurse' ,
slug : 'nurse' ,
group : 'roleplay' ,
} ,
{
name : 'cum in mouth' ,
slug : 'cum-in-mouth' ,
priority : 7 ,
2020-05-24 03:13:50 +00:00
description : 'A guy ejaculating in someone\'s mouth. If they keep their lips wrapped around his cock, it is an [oral creampie](/tag/oral-creampie). They may not be able to resist [swallowing](/tag/swallowing) the cum.' ,
group : 'finish' ,
} ,
{
name : 'oral creampie' ,
slug : 'oral-creampie' ,
priority : 7 ,
description : 'A guy pumping his semen in someone\'s *closed* [mouth](/tag/cum-in-mouth), a variation of [cum in mouth](/tag/cum-in-mouth). His cock can be [deepthroated](/tag/deepthroat) for a [throatpie](/tag/throatpie)' ,
2020-05-18 02:28:38 +00:00
group : 'finish' ,
} ,
{
name : 'orgy' ,
slug : 'orgy' ,
priority : 9 ,
description : 'A group of (at least four) people having sex with eachother. If only one person is getting fucked, it is probably a [gangbang](/tag/gangbang).' ,
group : 'group' ,
} ,
{
name : 'outdoors' ,
slug : 'outdoors' ,
group : 'location' ,
} ,
{
name : 'outie pussy' ,
slug : 'outie-pussy' ,
} ,
{
name : 'pain' ,
slug : 'pain' ,
} ,
{
name : 'parody' ,
slug : 'parody' ,
} ,
{
name : 'pegging' ,
slug : 'pegging' ,
} ,
{
name : 'petite' ,
slug : 'petite' ,
} ,
{
name : 'piercings' ,
slug : 'piercings' ,
} ,
2020-07-02 23:28:22 +00:00
{
name : 'piss drinking' ,
slug : 'piss-drinking' ,
priority : 6 ,
} ,
{
name : 'pissing' ,
slug : 'pissing' ,
priority : 6 ,
} ,
2020-05-18 02:28:38 +00:00
{
name : 'POV' ,
slug : 'pov' ,
} ,
{
name : 'pussy eating' ,
slug : 'pussy-eating' ,
group : 'oral' ,
} ,
2020-07-02 02:04:28 +00:00
{
name : 'pyjamas' ,
slug : 'pyjamas' ,
group : 'clothing' ,
} ,
2020-05-18 02:28:38 +00:00
{
name : 'redhead' ,
slug : 'redhead' ,
group : 'hair' ,
} ,
{
name : 'reverse cowgirl' ,
slug : 'reverse-cowgirl' ,
} ,
{
name : 'roleplay' ,
slug : 'roleplay' ,
} ,
{
name : 'rough' ,
slug : 'rough' ,
2020-07-13 01:51:17 +00:00
priority : 6 ,
2020-05-18 02:28:38 +00:00
} ,
{
name : 'saliva' ,
slug : 'saliva' ,
} ,
{
name : 'schoolgirl' ,
slug : 'schoolgirl' ,
group : 'roleplay' ,
} ,
{
name : 'shaved' ,
slug : 'shaved' ,
} ,
{
name : 'shoes on' ,
slug : 'shoes-on' ,
group : 'clothing' ,
} ,
{
name : 'short hair' ,
slug : 'short-hair' ,
group : 'hair' ,
} ,
{
name : 'skirt' ,
slug : 'skirt' ,
group : 'clothing' ,
} ,
{
name : 'slapping' ,
slug : 'slapping' ,
} ,
{
name : 'sloppy blowjob' ,
slug : 'sloppy-blowjob' ,
} ,
{
name : 'socks' ,
slug : 'socks' ,
group : 'clothing' ,
} ,
{
name : 'solo' ,
slug : 'solo' ,
} ,
{
name : 'spanking' ,
slug : 'spanking' ,
} ,
{
name : 'spooning' ,
slug : 'spooning' ,
group : 'position' ,
} ,
{
name : 'strapon' ,
slug : 'strapon' ,
} ,
{
name : 'small boobs' ,
slug : 'small-boobs' ,
} ,
{
name : 'small butt' ,
slug : 'small-butt' ,
} ,
{
name : 'speculum' ,
slug : 'speculum' ,
} ,
{
name : 'squirting' ,
slug : 'squirting' ,
} ,
{
name : 'standing doggy style' ,
slug : 'standing-doggy-style' ,
} ,
{
name : 'stockings' ,
slug : 'stockings' ,
group : 'clothing' ,
} ,
{
name : 'strap-on dildo' ,
slug : 'strap-on-dildo' ,
} ,
{
name : 'suspension' ,
slug : 'suspension' ,
} ,
{
name : 'swallowing' ,
slug : 'swallowing' ,
group : 'finish' ,
priority : 6 ,
} ,
{
2020-05-20 01:00:46 +00:00
name : 'tattoos' ,
slug : 'tattoos' ,
2020-05-18 02:28:38 +00:00
group : 'body' ,
} ,
{
name : 'teacher' ,
slug : 'teacher' ,
group : 'roleplay' ,
} ,
{
name : 'threesome' ,
slug : 'threesome' ,
2020-05-26 02:11:29 +00:00
priority : 8 ,
2020-05-18 02:28:38 +00:00
group : 'group' ,
} ,
2020-05-24 03:13:50 +00:00
{
name : 'throatpie' ,
slug : 'throatpie' ,
priority : 6 ,
description : 'An [oral creampie](/tag/oral-creampie) with his cock shoved all the way down the throat.' ,
group : 'finish' ,
} ,
2020-05-18 02:28:38 +00:00
{
name : 'teen' ,
slug : 'teen' ,
group : 'age' ,
} ,
{
name : 'titty fuck' ,
slug : 'titty-fuck' ,
} ,
{
name : 'toys' ,
slug : 'toys' ,
2020-07-02 23:28:22 +00:00
priority : 7 ,
2020-05-18 02:28:38 +00:00
} ,
{
name : 'transsexual' ,
slug : 'transsexual' ,
priority : 10 ,
} ,
{
name : 'DA triple penetration' ,
slug : 'da-tp' ,
priority : 7 ,
description : 'Triple penetration with two cocks in the ass, and one in the pussy. Also see [double vaginal TP](/tag/dv-tp).' ,
group : 'penetration' ,
} ,
{
name : 'DV triple penetration' ,
slug : 'dv-tp' ,
priority : 7 ,
description : 'Triple penetration with two cocks in the pussy, and one in the ass. Also see [double anal TP](/tag/da-tp).' ,
group : 'penetration' ,
} ,
{
name : 'triple penetration' ,
slug : 'triple-penetration' ,
priority : 7 ,
description : 'Three cocks fucking her from behind at the same time. This can be either [double anal TP](/tag/da-tp), or [double vaginal TP](/tag/dv-tp).' ,
} ,
{
name : 'trimmed' ,
slug : 'trimmed' ,
} ,
{
name : 'uniform' ,
slug : 'uniform' ,
} ,
2020-07-13 01:51:17 +00:00
{
name : 'van' ,
slug : 'van' ,
group : 'location' ,
} ,
2020-05-18 02:28:38 +00:00
{
name : 'vibrator' ,
slug : 'vibrator' ,
} ,
{
name : 'voyeur' ,
slug : 'voyeur' ,
} ,
{
name : 'virtual reality' ,
slug : 'virtual-reality' ,
} ,
2020-07-23 02:29:46 +00:00
{
name : 'quarantine' ,
slug : 'quarantine' ,
description : 'The 2019 Coronavirus outbreak (COVID-19) forced sensible people to quarantine at home, spawning a new porn theme featuring self-isolation and masks.' ,
} ,
2020-07-07 02:37:12 +00:00
{
name : 'Russian' ,
slug : 'russian' ,
priority : 4 ,
group : 'ethnicity' ,
} ,
2020-05-18 02:28:38 +00:00
{
name : 'wet' ,
slug : 'wet' ,
} ,
{
name : 'caucasian' ,
slug : 'caucasian' ,
priority : 7 ,
group : 'ethnicity' ,
} ,
{
name : 'wife' ,
slug : 'wife' ,
} ,
{
name : 'office' ,
slug : 'office' ,
group : 'location' ,
} ,
2020-02-13 02:44:04 +00:00
] ;
2019-11-06 01:47:10 +00:00
2020-02-13 02:44:04 +00:00
const aliases = [
2020-05-18 02:28:38 +00:00
{
name : '2on1' ,
for : 'threesome' ,
} ,
{
name : '2-on-1' ,
for : 'threesome' ,
} ,
{
name : '2 on 1' ,
for : 'threesome' ,
} ,
{
name : '3+ on 1' ,
for : 'gangbang' ,
} ,
{
name : 'anal sex' ,
for : 'anal' ,
} ,
{
name : 'anal gape' ,
for : 'gaping' ,
} ,
{
name : 'anilingus' ,
for : 'ass-eating' ,
} ,
{
name : 'analingus' ,
for : 'ass-eating' ,
} ,
{
name : 'analingus male' ,
for : 'ass-eating' ,
} ,
{
name : 'asians' ,
for : 'asian' ,
} ,
{
name : 'asian female' ,
for : 'asian' ,
} ,
{
name : 'anal fingering' ,
for : 'ass-fingering' ,
} ,
{
name : 'ass licking' ,
for : 'ass-eating' ,
} ,
{
name : 'asslicking' ,
for : 'ass-eating' ,
} ,
{
name : 'ass fucking' ,
for : 'anal' ,
} ,
2020-05-24 03:13:50 +00:00
{
name : 'ass to other girl\'s mouth' ,
for : 'atogm' ,
} ,
{
name : 'ass to other girls mouth' ,
for : 'atogm' ,
} ,
{
name : 'ass to other mouth' ,
for : 'atogm' ,
} ,
{
name : 'ass to other mouth' ,
for : 'atom' ,
} ,
2020-08-12 01:30:20 +00:00
{
name : 'atm' ,
for : 'atm' ,
secondary : true ,
} ,
2020-05-18 02:28:38 +00:00
{
name : 'a2m' ,
2020-05-26 02:11:29 +00:00
for : 'atm' ,
2020-05-18 02:28:38 +00:00
secondary : true ,
} ,
{
name : 'bald pussy' ,
for : 'shaved' ,
} ,
{
name : 'ball gag' ,
for : 'gag' ,
} ,
{
name : 'ball lick' ,
for : 'ball-licking' ,
} ,
{
name : 'ball suck' ,
for : 'ball-licking' ,
} ,
{
name : 'ball sucking' ,
for : 'ball-licking' ,
} ,
{
name : 'boob fucking' ,
for : 'titty-fuck' ,
} ,
{
name : 'bts' ,
for : 'behind-the-scenes' ,
secondary : true ,
} ,
{
name : 'mfm' ,
for : 'mmf' ,
} ,
{
name : 'fmf' ,
for : 'mff' ,
} ,
{
name : 'mff' ,
for : 'mff' ,
} ,
{
name : 'ffm' ,
for : 'mff' ,
} ,
{
name : 'bgb' ,
for : 'mfm' ,
} ,
{
name : 'big ass' ,
for : 'big-butt' ,
} ,
{
name : 'big black cock' ,
for : 'bbc' ,
} ,
{
name : 'big black cocks' ,
for : 'bbc' ,
} ,
{
name : 'big cocks' ,
for : 'big-dick' ,
} ,
{
name : 'big cock' ,
for : 'big-dick' ,
} ,
{
name : 'big booty' ,
for : 'big-butt' ,
} ,
{
name : 'big butts' ,
for : 'big-butt' ,
} ,
{
name : 'big tits' ,
for : 'big-boobs' ,
} ,
{
name : 'busty - big boobs' ,
for : 'big-boobs' ,
} ,
{
name : 'busty: big beautiful breast' ,
for : 'big-boobs' ,
} ,
{
name : 'bi' ,
for : 'bisexual' ,
} ,
{
name : 'black' ,
for : 'ebony' ,
} ,
{
name : 'blonde hair' ,
for : 'blonde' ,
} ,
{
name : 'blonde female' ,
for : 'blonde' ,
} ,
{
name : 'blondes' ,
for : 'blonde' ,
} ,
{
name : 'blow job' ,
for : 'blowjob' ,
} ,
{
name : 'blowjobs' ,
for : 'blowjob' ,
} ,
{
name : 'blowjob pov' ,
for : 'blowjob' ,
} ,
{
name : 'blowjob (double)' ,
for : 'double-blowjob' ,
} ,
{
name : 'blowjob - double' ,
for : 'double-blowjob' ,
} ,
{
name : 'blowjob (pov)' ,
for : 'blowjob' ,
} ,
{
name : 'blowjob - pov' ,
for : 'blowjob' ,
} ,
{
name : 'boob job' ,
for : 'fake-boobs' ,
} ,
{
name : 'boobjob' ,
for : 'fake-boobs' ,
} ,
{
name : 'brown hair' ,
for : 'brunette' ,
} ,
{
name : 'brunettes' ,
for : 'brunette' ,
} ,
{
name : 'buttplug' ,
for : 'anal-toys' ,
secondary : true ,
} ,
{
name : 'butt plug' ,
for : 'anal-toys' ,
} ,
2020-07-02 23:28:22 +00:00
{
name : 'butt plugs' ,
for : 'anal-toys' ,
} ,
2020-05-18 02:28:38 +00:00
{
name : 'caning' ,
for : 'corporal-punishment' ,
} ,
{
name : 'cattle prod' ,
for : 'electric-shock' ,
} ,
{
name : 'cheer leader' ,
for : 'cheerleader' ,
} ,
{
name : 'clover clamps' ,
for : 'nipple-clamps' ,
} ,
{
name : 'couples fantasies' ,
for : 'couples' ,
} ,
{
name : 'creampies' ,
for : 'creampie' ,
} ,
{
name : 'creampie - anal' ,
for : 'anal-creampie' ,
} ,
{
name : 'crop' , // a type of whip, not [sic] short for corporal
for : 'corporal-punishment' ,
} ,
{
name : 'cum cleaning' ,
for : 'cum-licking' ,
} ,
{
name : 'cuck' ,
for : 'cuckold' ,
} ,
{
name : 'oral creampie' ,
for : 'cum-in-mouth' ,
secondary : true ,
} ,
{
name : 'cum on ass' ,
for : 'cum-on-butt' ,
} ,
{
name : 'cum on tits' ,
for : 'cum-on-boobs' ,
} ,
{
name : 'cum swallowing' ,
for : 'swallowing' ,
} ,
{
name : 'cum shot' ,
for : 'cumshot' ,
} ,
{
name : 'cunnilingus' ,
for : 'pussy-eating' ,
} ,
{
name : 'pussy licking' ,
for : 'pussy-eating' ,
} ,
{
name : 'deep throat' ,
for : 'deepthroat' ,
secondary : true ,
} ,
{
name : 'deepthroating' ,
for : 'deepthroat' ,
} ,
{
name : 'dildo' ,
for : 'toys' ,
} ,
{
name : 'doggystyle' ,
for : 'doggy-style' ,
secondary : true ,
} ,
{
name : 'doggy style - pov' ,
for : 'doggy-style' ,
} ,
{
name : 'doggie style' ,
for : 'doggy-style' ,
} ,
{
name : 'doggystyle (standing)' ,
for : 'standing-doggy-style' ,
} ,
{
name : 'doggystyle - standing' ,
for : 'standing-doggy-style' ,
} ,
{
name : 'doggystyle regular' ,
for : 'doggy-style' ,
} ,
{
name : 'dom' ,
for : 'bdsm' ,
} ,
{
name : 'domination' ,
for : 'bdsm' ,
} ,
{
name : 'dominatrix' ,
for : 'femdom' ,
secondary : true ,
} ,
2020-07-17 21:27:59 +00:00
{
name : 'dp' ,
for : 'dp' ,
} ,
2020-05-18 02:28:38 +00:00
{
name : 'double penetration (dp)' ,
2020-07-02 02:04:28 +00:00
for : 'dp' ,
2020-05-18 02:28:38 +00:00
} ,
{
name : 'double penetration - dp' ,
2020-07-02 02:04:28 +00:00
for : 'dp' ,
2020-05-18 02:28:38 +00:00
} ,
{
name : 'double anal (dap)' ,
2020-07-02 02:04:28 +00:00
for : 'dap' ,
2020-05-18 02:28:38 +00:00
} ,
{
name : 'double anal penetration (dap)' ,
2020-07-02 02:04:28 +00:00
for : 'dap' ,
2020-05-18 02:28:38 +00:00
} ,
{
name : 'dpp' ,
2020-07-02 02:04:28 +00:00
for : 'dvp' ,
2020-05-18 02:28:38 +00:00
secondary : true ,
} ,
{
name : 'double vaginal (dvp)' ,
2020-07-02 02:04:28 +00:00
for : 'dvp' ,
2020-05-18 02:28:38 +00:00
} ,
{
name : 'double vaginal penetration (dvp)' ,
2020-07-02 02:04:28 +00:00
for : 'dvp' ,
2020-05-18 02:28:38 +00:00
} ,
{
name : 'double vaginal (dpp)' ,
2020-07-02 02:04:28 +00:00
for : 'dvp' ,
2020-05-18 02:28:38 +00:00
} ,
{
name : 'double pussy penetration' ,
2020-07-02 02:04:28 +00:00
for : 'dvp' ,
2020-05-18 02:28:38 +00:00
} ,
{
name : 'double pussy penetration (dpp)' ,
2020-07-02 02:04:28 +00:00
for : 'dvp' ,
2020-05-18 02:28:38 +00:00
} ,
{
name : 'drool' ,
for : 'saliva' ,
} ,
{
name : 'enhanced' ,
for : 'fake-boobs' ,
} ,
{
name : 'enhanced tits' ,
for : 'fake-boobs' ,
} ,
2020-07-13 01:51:17 +00:00
{
name : 'enhanced boobs' ,
for : 'fake-boobs' ,
secondary : true ,
} ,
2020-05-18 02:28:38 +00:00
{
name : 'facefuck' ,
for : 'facefucking' ,
} ,
{
name : 'face fuck' ,
for : 'facefucking' ,
} ,
{
name : 'face fucking' ,
for : 'facefucking' ,
} ,
{
name : 'face sitting' ,
for : 'facesitting' ,
} ,
{
name : 'facial cumshot' ,
for : 'facial' ,
} ,
{
name : 'facials' ,
for : 'facial' ,
} ,
{
name : 'facial - multiple' ,
for : 'facial' ,
} ,
{
name : 'fake tits' ,
for : 'fake-boobs' ,
secondary : true ,
} ,
{
2020-07-13 01:51:17 +00:00
name : 'flagellation' ,
for : 'corporal-punishment' ,
2020-05-18 02:28:38 +00:00
} ,
{
name : 'flogging' ,
for : 'corporal-punishment' ,
} ,
{
name : 'foot fetish' ,
for : 'feet' ,
} ,
{
name : 'french kissing' ,
for : 'kissing' ,
} ,
{
name : 'gape' ,
for : 'gaping' ,
secondary : true ,
} ,
{
name : 'gapes' ,
for : 'gaping' ,
secondary : true ,
} ,
{
name : 'gapes (gaping asshole)' ,
for : 'gaping' ,
} ,
2020-07-13 01:51:17 +00:00
{
name : 'glam' ,
for : 'glamcore' ,
} ,
2020-05-18 02:28:38 +00:00
{
name : 'glory hole' ,
for : 'gloryhole' ,
} ,
{
name : 'group sex' ,
for : 'orgy' ,
} ,
{
name : 'huge tits' ,
for : 'big-boobs' ,
} ,
{
name : 'huge toys' ,
for : 'toys' ,
} ,
{
name : 'incest' ,
for : 'family' ,
secondary : true ,
} ,
{
name : 'incest fantasy' ,
for : 'family' ,
} ,
{
name : 'innie' ,
for : 'innie-pussy' ,
} ,
{
name : 'lashing' ,
for : 'corporal-punishment' ,
} ,
{
name : 'lezdom' ,
for : 'lesbian' ,
} ,
{
name : 'mini-skirt' ,
for : 'miniskirt' ,
} ,
{
name : 'mmf' ,
for : 'mfm' ,
} ,
{
name : 'mature & milf' ,
for : 'milf' ,
} ,
2020-05-26 02:11:29 +00:00
{
name : 'milfs' ,
for : 'milf' ,
} ,
2020-05-18 02:28:38 +00:00
{
name : 'natural' ,
for : 'natural-boobs' ,
} ,
{
name : 'natural tits' ,
for : 'natural-boobs' ,
} ,
2020-08-12 01:30:20 +00:00
{
name : 'oiled' ,
for : 'oil' ,
} ,
2020-05-18 02:28:38 +00:00
{
name : 'oral' ,
for : 'blowjob' ,
} ,
{
name : 'outie' ,
for : 'outie-pussy' ,
} ,
{
name : 'piercing' ,
for : 'piercings' ,
} ,
{
name : 'pierced' ,
for : 'piercings' ,
} ,
2020-07-02 23:28:22 +00:00
{
name : 'piss' ,
for : 'pissing' ,
} ,
{
name : 'pee' ,
for : 'pissing' ,
} ,
{
name : 'peeing' ,
for : 'pissing' ,
} ,
2020-05-18 02:28:38 +00:00
{
name : 'prolapse' ,
for : 'anal-prolapse' ,
} ,
{
name : 'prolapsing' ,
for : 'anal-prolapse' ,
} ,
{
name : 'raven' ,
for : 'black-hair' ,
} ,
{
name : 'raven hair' ,
for : 'black-hair' ,
} ,
{
name : 'red hair' ,
for : 'redhead' ,
} ,
{
name : 'red head' ,
for : 'redhead' ,
} ,
2020-07-19 01:52:36 +00:00
{
name : 'ginger' ,
for : 'redhead' ,
} ,
2020-05-18 02:28:38 +00:00
{
name : 'redhead babes' ,
for : 'redhead' ,
} ,
{
name : 'rimming' ,
for : 'ass-eating' ,
secondary : true ,
} ,
{
name : 'rimjob' ,
for : 'ass-eating' ,
secondary : true ,
} ,
{
name : 'role play' ,
for : 'roleplay' ,
} ,
{
name : 'rope bondage' ,
for : 'bondage' ,
} ,
{
name : 'rough sex' ,
for : 'rough' ,
} ,
2020-07-13 01:51:17 +00:00
{
name : 'russian pornstar' ,
for : 'russian' ,
} ,
2020-05-18 02:28:38 +00:00
{
name : 'school girl' ,
for : 'schoolgirl' ,
} ,
{
name : 'sadomasochism' ,
for : 'bdsm' ,
} ,
{
name : 'sadism' ,
for : 'bdsm' ,
} ,
{
name : 'scissoring' ,
for : 'lesbian' ,
} ,
{
name : 'sex toys' ,
for : 'toys' ,
} ,
{
name : 'shaved pussy' ,
for : 'shaved' ,
} ,
{
name : 'shoes' ,
for : 'shoes-on' ,
} ,
{
name : 'slave' ,
for : 'bdsm' ,
} ,
{
name : 'small ass' ,
for : 'small-butt' ,
} ,
{
name : 'small tits' ,
for : 'small-boobs' ,
} ,
{
name : 'spit' ,
for : 'saliva' ,
} ,
{
name : 'spitroast' ,
for : 'mfm' ,
secondary : true ,
} ,
{
name : 'sex toy' ,
for : 'toys' ,
} ,
{
name : 'standing doggystyle' ,
for : 'standing-doggy-style' ,
} ,
{
name : 'swallow' ,
for : 'swallowing' ,
} ,
{
name : 'strap-on' ,
for : 'strap-on-dildo' ,
} ,
{
name : 'strap on' ,
for : 'strap-on-dildo' ,
} ,
{
name : 'strap on dildo' ,
for : 'strap-on-dildo' ,
} ,
{
name : 'sub' ,
for : 'bdsm' ,
} ,
{
name : 'submission' ,
for : 'bdsm' ,
} ,
2020-07-02 02:04:28 +00:00
{
name : 'squirt' ,
for : 'squirting' ,
} ,
2020-05-18 02:28:38 +00:00
{
2020-05-20 01:00:46 +00:00
name : 'tattoo' ,
for : 'tattoos' ,
2020-05-18 02:28:38 +00:00
secondary : true ,
} ,
{
name : 'teens' ,
for : 'teen' ,
} ,
{
name : 'throat fucking' ,
for : 'facefucking' ,
} ,
{
name : 'tiny boobs' ,
for : 'small-boobs' ,
} ,
{
name : 'tiny tits' ,
for : 'small-boobs' ,
} ,
{
name : 'tittyfuck' ,
for : 'titty-fuck' ,
secondary : true ,
} ,
{
name : 'tp' ,
for : 'triple-penetration' ,
} ,
{
name : 'trans' ,
for : 'transsexual' ,
} ,
{
name : 'transgender' ,
for : 'transsexual' ,
secondary : true ,
} ,
{
name : 'trimmed pussy' ,
for : 'trimmed' ,
} ,
{
name : 'ts' ,
for : 'transsexual' ,
} ,
{
name : 'vr' ,
for : 'virtual reality' ,
} ,
{
name : 'whipping' ,
for : 'corporal-punishment' ,
} ,
{
name : 'white' ,
for : 'caucasian' ,
} ,
{
name : 'work' ,
for : 'office' ,
} ,
{
name : 'workplace' ,
for : 'office' ,
} ,
{
name : 'zapper' ,
for : 'electric-shock' ,
} ,
2020-02-13 02:44:04 +00:00
] ;
2019-11-06 01:47:10 +00:00
exports . seed = knex => Promise . resolve ( )
2020-05-18 02:28:38 +00:00
. then ( async ( ) => upsert ( 'tags_groups' , groups , 'slug' , knex ) )
. then ( async ( ) => {
const groupEntries = await knex ( 'tags_groups' ) . select ( '*' ) ;
const groupsMap = groupEntries . reduce ( ( acc , { id , slug } ) => ( { ... acc , [ slug ] : id } ) , { } ) ;
2019-09-08 01:53:09 +00:00
2020-05-18 02:28:38 +00:00
const tagsWithGroups = tags . map ( tag => ( {
name : tag . name ,
slug : tag . slug || slugify ( tag . name ) ,
description : tag . description ,
priority : tag . priority || 0 ,
group _id : tag . group ? groupsMap [ tag . group ] : null ,
alias _for : null ,
} ) ) ;
2019-11-06 01:47:10 +00:00
2020-05-18 02:28:38 +00:00
return upsert ( 'tags' , tagsWithGroups , 'slug' ) ;
} )
. then ( async ( ) => {
const tagEntries = await knex ( 'tags' ) . select ( '*' ) . where ( { alias _for : null } ) ;
const tagsMap = tagEntries . reduce ( ( acc , { id , slug } ) => ( { ... acc , [ slug ] : id } ) , { } ) ;
2019-09-08 01:53:09 +00:00
2020-05-18 02:28:38 +00:00
const tagAliases = aliases . map ( alias => ( {
name : alias . name ,
alias _for : tagsMap [ alias . for ] ,
secondary : ! ! alias . secondary ,
} ) ) ;
2019-11-06 01:47:10 +00:00
2020-05-18 02:28:38 +00:00
return upsert ( 'tags' , tagAliases , 'name' ) ;
} ) ;