Removed views in favor of PostGraphile filter and sort plugins. Updated site modules to GraphQL. Added tag posters.
|
@ -3,7 +3,7 @@
|
||||||
v-if="actor"
|
v-if="actor"
|
||||||
class="content actor"
|
class="content actor"
|
||||||
>
|
>
|
||||||
<FilterBar :fetch-releases="fetchReleases" />
|
<FilterBar :fetch-releases="fetchActor" />
|
||||||
|
|
||||||
<div class="actor-inner">
|
<div class="actor-inner">
|
||||||
<div class="profile">
|
<div class="profile">
|
||||||
|
@ -243,8 +243,8 @@ import Photos from './photos.vue';
|
||||||
import FilterBar from '../header/filter-bar.vue';
|
import FilterBar from '../header/filter-bar.vue';
|
||||||
import Releases from '../releases/releases.vue';
|
import Releases from '../releases/releases.vue';
|
||||||
|
|
||||||
async function fetchReleases() {
|
async function fetchActor() {
|
||||||
this.releases = await this.$store.dispatch('fetchActorReleases', this.$route.params.actorSlug);
|
this.actor = await this.$store.dispatch('fetchActors', { actorSlug: this.$route.params.actorSlug });
|
||||||
}
|
}
|
||||||
|
|
||||||
function scrollPhotos(event) {
|
function scrollPhotos(event) {
|
||||||
|
@ -252,7 +252,7 @@ function scrollPhotos(event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function mounted() {
|
async function mounted() {
|
||||||
this.actor = await this.$store.dispatch('fetchActors', { actorSlug: this.$route.params.actorSlug });
|
this.fetchActor();
|
||||||
|
|
||||||
if (this.actor) {
|
if (this.actor) {
|
||||||
this.pageTitle = this.actor.name;
|
this.pageTitle = this.actor.name;
|
||||||
|
@ -275,7 +275,7 @@ export default {
|
||||||
},
|
},
|
||||||
mounted,
|
mounted,
|
||||||
methods: {
|
methods: {
|
||||||
fetchReleases,
|
fetchActor,
|
||||||
scrollPhotos,
|
scrollPhotos,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
v-if="site"
|
v-if="site"
|
||||||
class="content site"
|
class="content site"
|
||||||
>
|
>
|
||||||
<FilterBar :fetch-releases="fetchReleases" />
|
<FilterBar :fetch-releases="fetchSite" />
|
||||||
|
|
||||||
<div class="content-inner">
|
<div class="content-inner">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
|
@ -59,15 +59,13 @@
|
||||||
import FilterBar from '../header/filter-bar.vue';
|
import FilterBar from '../header/filter-bar.vue';
|
||||||
import Releases from '../releases/releases.vue';
|
import Releases from '../releases/releases.vue';
|
||||||
|
|
||||||
async function fetchReleases() {
|
async function fetchSite() {
|
||||||
this.releases = await this.$store.dispatch('fetchSiteReleases', this.$route.params.siteSlug);
|
this.site = await this.$store.dispatch('fetchSites', { siteSlug: this.$route.params.siteSlug });
|
||||||
|
this.releases = this.site.releases;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function mounted() {
|
async function mounted() {
|
||||||
[[this.site]] = await Promise.all([
|
await this.fetchSite();
|
||||||
this.$store.dispatch('fetchSites', this.$route.params.siteSlug),
|
|
||||||
this.fetchReleases(),
|
|
||||||
]);
|
|
||||||
|
|
||||||
this.pageTitle = this.site.name;
|
this.pageTitle = this.site.name;
|
||||||
}
|
}
|
||||||
|
@ -86,7 +84,7 @@ export default {
|
||||||
},
|
},
|
||||||
mounted,
|
mounted,
|
||||||
methods: {
|
methods: {
|
||||||
fetchReleases,
|
fetchSite,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,5 +1,15 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="tags">
|
<div class="tags">
|
||||||
|
<h3>Oral Sex</h3>
|
||||||
|
|
||||||
|
<div class="tiles">
|
||||||
|
<Tag
|
||||||
|
v-for="tag in tags.oral"
|
||||||
|
:key="`tag-${tag.id}`"
|
||||||
|
:tag="tag"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<h3>Ethnicity</h3>
|
<h3>Ethnicity</h3>
|
||||||
|
|
||||||
<div class="tiles">
|
<div class="tiles">
|
||||||
|
@ -39,6 +49,16 @@
|
||||||
:tag="tag"
|
:tag="tag"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<h3>Misc</h3>
|
||||||
|
|
||||||
|
<div class="tiles">
|
||||||
|
<Tag
|
||||||
|
v-for="tag in tags.misc.concat(tags.body)"
|
||||||
|
:key="`tag-${tag.id}`"
|
||||||
|
:tag="tag"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -50,40 +70,52 @@ async function mounted() {
|
||||||
slugs: [
|
slugs: [
|
||||||
'airtight',
|
'airtight',
|
||||||
'anal',
|
'anal',
|
||||||
|
'anal-creampie',
|
||||||
|
'asian',
|
||||||
|
'ass-eating',
|
||||||
|
'ass-to-mouth',
|
||||||
|
'blowbang',
|
||||||
|
'blowjob',
|
||||||
|
'bukkake',
|
||||||
|
'caucasian',
|
||||||
|
'creampie',
|
||||||
|
'da-tp',
|
||||||
|
'deepthroat',
|
||||||
'double-anal',
|
'double-anal',
|
||||||
|
'double-blowjob',
|
||||||
'double-penetration',
|
'double-penetration',
|
||||||
'double-vaginal',
|
'double-vaginal',
|
||||||
'da-tp',
|
|
||||||
'dv-tp',
|
'dv-tp',
|
||||||
'triple-anal',
|
|
||||||
'blowbang',
|
|
||||||
'gangbang',
|
|
||||||
'mff',
|
|
||||||
'mfm',
|
|
||||||
'orgy',
|
|
||||||
'asian',
|
|
||||||
'caucasian',
|
|
||||||
'ebony',
|
'ebony',
|
||||||
|
'facefuck',
|
||||||
|
'facial',
|
||||||
|
'gangbang',
|
||||||
|
'gapes',
|
||||||
'interracial',
|
'interracial',
|
||||||
'latina',
|
'latina',
|
||||||
'anal-creampie',
|
'mff',
|
||||||
'bukkake',
|
'mfm',
|
||||||
'creampie',
|
|
||||||
'facial',
|
|
||||||
'oral-creampie',
|
'oral-creampie',
|
||||||
|
'orgy',
|
||||||
|
'pussy-eating',
|
||||||
'swallowing',
|
'swallowing',
|
||||||
|
'tattoo',
|
||||||
|
'trainbang',
|
||||||
|
'triple-anal',
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(tags);
|
|
||||||
|
|
||||||
this.tags = tags.reduce((acc, tag) => {
|
this.tags = tags.reduce((acc, tag) => {
|
||||||
|
if (!tag.group) {
|
||||||
|
return { ...acc, misc: [...acc.misc, tag] };
|
||||||
|
}
|
||||||
|
|
||||||
if (acc[tag.group.slug]) {
|
if (acc[tag.group.slug]) {
|
||||||
return { ...acc, [tag.group.slug]: [...acc[tag.group.slug], tag] };
|
return { ...acc, [tag.group.slug]: [...acc[tag.group.slug], tag] };
|
||||||
}
|
}
|
||||||
|
|
||||||
return { ...acc, [tag.group.slug]: [tag] };
|
return { ...acc, [tag.group.slug]: [tag] };
|
||||||
}, {});
|
}, { misc: [] });
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|
|
@ -4,14 +4,14 @@
|
||||||
:title="tag.name"
|
:title="tag.name"
|
||||||
class="tile"
|
class="tile"
|
||||||
>
|
>
|
||||||
<span class="title">{{ tag.name }}</span>
|
|
||||||
|
|
||||||
<img
|
<img
|
||||||
v-if="tag.poster"
|
v-if="tag.poster"
|
||||||
:src="`/img/${tag.poster.thumbnail}`"
|
:src="`/img/${tag.poster.thumbnail}`"
|
||||||
:alt="tag.name"
|
:alt="tag.name"
|
||||||
class="poster"
|
class="poster"
|
||||||
>
|
>
|
||||||
|
|
||||||
|
<span class="title">{{ tag.name }}</span>
|
||||||
</a>
|
</a>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -45,10 +45,15 @@ function curateActor(actor) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function initActorActions(store, _router) {
|
function initActorActions(store, _router) {
|
||||||
async function fetchActorBySlug(actorSlug) {
|
async function fetchActorBySlug(actorSlug, limit = 100) {
|
||||||
const { actor } = await graphql(`
|
const { actor } = await graphql(`
|
||||||
query Actor($actorSlug:String!) {
|
query Actor(
|
||||||
actor: actorBySlug(slug:$actorSlug) {
|
$actorSlug: String!
|
||||||
|
$limit:Int = 1000,
|
||||||
|
$after:Date = "1900-01-01",
|
||||||
|
$before:Date = "2100-01-01",
|
||||||
|
) {
|
||||||
|
actor: actorBySlug(slug: $actorSlug) {
|
||||||
id
|
id
|
||||||
name
|
name
|
||||||
slug
|
slug
|
||||||
|
@ -105,7 +110,18 @@ function initActorActions(store, _router) {
|
||||||
name
|
name
|
||||||
slug
|
slug
|
||||||
}
|
}
|
||||||
releases: releasesActors {
|
releases: releasesActors(
|
||||||
|
filter: {
|
||||||
|
release: {
|
||||||
|
date: {
|
||||||
|
lessThan: $before,
|
||||||
|
greaterThan: $after,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
first: $limit,
|
||||||
|
orderBy: RELEASE_BY_RELEASE_ID__DATE_DESC,
|
||||||
|
) {
|
||||||
release {
|
release {
|
||||||
id
|
id
|
||||||
url
|
url
|
||||||
|
@ -132,6 +148,9 @@ function initActorActions(store, _router) {
|
||||||
}
|
}
|
||||||
`, {
|
`, {
|
||||||
actorSlug,
|
actorSlug,
|
||||||
|
limit,
|
||||||
|
after: store.getters.after,
|
||||||
|
before: store.getters.before,
|
||||||
});
|
});
|
||||||
|
|
||||||
return curateActor(actor);
|
return curateActor(actor);
|
||||||
|
|
|
@ -29,7 +29,7 @@ const sitesFragment = `
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const releaseActorsFragment = `
|
const releaseActorsFragment = `
|
||||||
actors: releasesActorsSortables(orderBy: GENDER_ASC) {
|
actors: releasesActors(orderBy: ACTOR_BY_ACTOR_ID__GENDER_ASC) {
|
||||||
actor {
|
actor {
|
||||||
id
|
id
|
||||||
name
|
name
|
||||||
|
@ -51,7 +51,7 @@ const releaseActorsFragment = `
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const releaseTagsFragment = `
|
const releaseTagsFragment = `
|
||||||
tags: releasesTagsSortables(orderBy: PRIORITY_DESC) {
|
tags: releasesTags(orderBy: TAG_BY_TAG_ID__PRIORITY_DESC) {
|
||||||
tag {
|
tag {
|
||||||
name
|
name
|
||||||
priority
|
priority
|
||||||
|
|
|
@ -1,12 +1,69 @@
|
||||||
import { get } from '../api';
|
import { graphql } from '../api';
|
||||||
|
import { releasesFragment } from '../fragments';
|
||||||
|
import { curateSite } from '../curate';
|
||||||
|
|
||||||
function initSitesActions(store, _router) {
|
function initSitesActions(store, _router) {
|
||||||
async function fetchSites({ _commit }, siteId) {
|
async function fetchSiteBySlug(siteSlug, limit = 100) {
|
||||||
const sites = await get(`/sites/${siteId || ''}`);
|
const { site } = await graphql(`
|
||||||
|
query Site(
|
||||||
|
$siteSlug: String!,
|
||||||
|
$limit:Int = 100,
|
||||||
|
$after:Date = "1900-01-01",
|
||||||
|
$before:Date = "2100-01-01",
|
||||||
|
) {
|
||||||
|
site: siteBySlug(slug: $siteSlug) {
|
||||||
|
name
|
||||||
|
slug
|
||||||
|
url
|
||||||
|
network {
|
||||||
|
id
|
||||||
|
name
|
||||||
|
slug
|
||||||
|
url
|
||||||
|
}
|
||||||
|
${releasesFragment}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`, {
|
||||||
|
siteSlug,
|
||||||
|
limit,
|
||||||
|
after: store.getters.after,
|
||||||
|
before: store.getters.before,
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(site);
|
||||||
|
|
||||||
|
return curateSite(site);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function fetchSites({ _commit }, { siteSlug, limit = 100 }) {
|
||||||
|
if (siteSlug) {
|
||||||
|
return fetchSiteBySlug(siteSlug, limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
const { sites } = await graphql(`
|
||||||
|
query Sites(
|
||||||
|
$actorSlug: String!
|
||||||
|
$limit:Int = 100,
|
||||||
|
$after:Date = "1900-01-01",
|
||||||
|
$before:Date = "2100-01-01",
|
||||||
|
) {
|
||||||
|
site {
|
||||||
|
name
|
||||||
|
slug
|
||||||
|
url
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`, {
|
||||||
|
limit,
|
||||||
|
after: store.getters.after,
|
||||||
|
before: store.getters.before,
|
||||||
|
});
|
||||||
|
|
||||||
return sites;
|
return sites;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
async function fetchSiteReleases({ _commit }, siteId) {
|
async function fetchSiteReleases({ _commit }, siteId) {
|
||||||
const releases = await get(`/sites/${siteId}/releases`, {
|
const releases = await get(`/sites/${siteId}/releases`, {
|
||||||
filter: store.state.ui.filter,
|
filter: store.state.ui.filter,
|
||||||
|
@ -16,10 +73,11 @@ function initSitesActions(store, _router) {
|
||||||
|
|
||||||
return releases;
|
return releases;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
return {
|
return {
|
||||||
fetchSites,
|
fetchSites,
|
||||||
fetchSiteReleases,
|
// fetchSiteReleases,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -431,6 +431,10 @@ exports.up = knex => Promise.resolve()
|
||||||
table.unique(['tag_id', 'release_id']);
|
table.unique(['tag_id', 'release_id']);
|
||||||
}))
|
}))
|
||||||
.then(() => knex.raw(`
|
.then(() => knex.raw(`
|
||||||
|
COMMENT ON COLUMN actors.height IS E'@omit read,update,create,delete,all,many';
|
||||||
|
COMMENT ON COLUMN actors.weight IS E'@omit read,update,create,delete,all,many';
|
||||||
|
|
||||||
|
/*
|
||||||
CREATE VIEW releases_actors_sortable AS
|
CREATE VIEW releases_actors_sortable AS
|
||||||
SELECT releases_actors.*, actors.gender, actors.name, actors.birthdate FROM releases_actors
|
SELECT releases_actors.*, actors.gender, actors.name, actors.birthdate FROM releases_actors
|
||||||
JOIN actors ON releases_actors.actor_id = actors.id;
|
JOIN actors ON releases_actors.actor_id = actors.id;
|
||||||
|
@ -439,19 +443,22 @@ exports.up = knex => Promise.resolve()
|
||||||
SELECT releases_tags.*, tags.name, tags.priority FROM releases_tags
|
SELECT releases_tags.*, tags.name, tags.priority FROM releases_tags
|
||||||
JOIN tags ON releases_tags.tag_id = tags.id;
|
JOIN tags ON releases_tags.tag_id = tags.id;
|
||||||
|
|
||||||
|
CREATE VIEW actors_releases_sortable AS
|
||||||
|
SELECT releases_actors.*, releases.date FROM releases_actors
|
||||||
|
JOIN releases ON releases_actors.release_id = releases.id;
|
||||||
|
|
||||||
COMMENT ON VIEW releases_actors_sortable IS E'@foreignKey (release_id) references releases (id)\n@foreignKey (actor_id) references actors (id)';
|
COMMENT ON VIEW releases_actors_sortable IS E'@foreignKey (release_id) references releases (id)\n@foreignKey (actor_id) references actors (id)';
|
||||||
COMMENT ON VIEW releases_tags_sortable IS E'@foreignKey (release_id) references releases (id)\n@foreignKey (tag_id) references tags (id)';
|
COMMENT ON VIEW releases_tags_sortable IS E'@foreignKey (release_id) references releases (id)\n@foreignKey (tag_id) references tags (id)';
|
||||||
|
COMMENT ON VIEW actors_releases_sortable IS E'@foreignKey (release_id) references releases (id)\n@foreignKey (actor_id) references actors (id)';
|
||||||
|
|
||||||
/* allow conversion resolver to be added for height and weight */
|
/* allow conversion resolver to be added for height and weight */
|
||||||
COMMENT ON COLUMN actors.height IS E'@omit read,update,create,delete,all,many';
|
|
||||||
COMMENT ON COLUMN actors.weight IS E'@omit read,update,create,delete,all,many';
|
|
||||||
|
|
||||||
CREATE FUNCTION releases_by_tag_slugs(slugs text[]) RETURNS setof releases AS $$
|
CREATE FUNCTION releases_by_tag_slugs(slugs text[]) RETURNS setof releases AS $$
|
||||||
SELECT DISTINCT ON (releases.id) releases.* FROM releases
|
SELECT DISTINCT ON (releases.id) releases.* FROM releases
|
||||||
JOIN releases_tags ON (releases_tags.release_id = releases.id)
|
JOIN releases_tags ON (releases_tags.release_id = releases.id)
|
||||||
JOIN tags ON (releases_tags.tag_id = tags.id)
|
JOIN tags ON (releases_tags.tag_id = tags.id)
|
||||||
WHERE tags.slug = ANY($1);
|
WHERE tags.slug = ANY($1);
|
||||||
$$ LANGUAGE sql STABLE
|
$$ LANGUAGE sql STABLE
|
||||||
|
*/
|
||||||
`));
|
`));
|
||||||
|
|
||||||
exports.down = knex => knex.raw(`
|
exports.down = knex => knex.raw(`
|
||||||
|
|
|
@ -1421,6 +1421,11 @@
|
||||||
"to-fast-properties": "^2.0.0"
|
"to-fast-properties": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@graphile-contrib/pg-order-by-related": {
|
||||||
|
"version": "1.0.0-beta.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/@graphile-contrib/pg-order-by-related/-/pg-order-by-related-1.0.0-beta.6.tgz",
|
||||||
|
"integrity": "sha512-NDEDhkjpEmLzVMYsv9LqTNyaMXlL32yiFFk7Lj7WAloe1Dgn9/1zMQILMRC+Q9WmFE/edHtXjBRHrXs9NYr3GA=="
|
||||||
|
},
|
||||||
"@graphile-contrib/pg-simplify-inflector": {
|
"@graphile-contrib/pg-simplify-inflector": {
|
||||||
"version": "5.0.0-beta.1",
|
"version": "5.0.0-beta.1",
|
||||||
"resolved": "https://registry.npmjs.org/@graphile-contrib/pg-simplify-inflector/-/pg-simplify-inflector-5.0.0-beta.1.tgz",
|
"resolved": "https://registry.npmjs.org/@graphile-contrib/pg-simplify-inflector/-/pg-simplify-inflector-5.0.0-beta.1.tgz",
|
||||||
|
|
|
@ -66,6 +66,7 @@
|
||||||
"webpack-cli": "^3.3.10"
|
"webpack-cli": "^3.3.10"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@graphile-contrib/pg-order-by-related": "^1.0.0-beta.6",
|
||||||
"@graphile-contrib/pg-simplify-inflector": "^5.0.0-beta.1",
|
"@graphile-contrib/pg-simplify-inflector": "^5.0.0-beta.1",
|
||||||
"@tensorflow/tfjs-node": "^1.4.0",
|
"@tensorflow/tfjs-node": "^1.4.0",
|
||||||
"babel-polyfill": "^6.26.0",
|
"babel-polyfill": "^6.26.0",
|
||||||
|
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 124 KiB |
After Width: | Height: | Size: 4.1 MiB |
After Width: | Height: | Size: 99 KiB |
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 845 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 110 KiB |
After Width: | Height: | Size: 107 KiB |
After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 684 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 102 KiB |
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 800 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 107 KiB |
After Width: | Height: | Size: 494 KiB |
After Width: | Height: | Size: 107 KiB |
After Width: | Height: | Size: 2.1 MiB |
After Width: | Height: | Size: 100 KiB |
After Width: | Height: | Size: 3.2 MiB |
After Width: | Height: | Size: 99 KiB |
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 391 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 115 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 137 KiB |
After Width: | Height: | Size: 1.4 MiB |
After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 1.0 MiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 127 KiB |
After Width: | Height: | Size: 446 KiB |
After Width: | Height: | Size: 97 KiB |
After Width: | Height: | Size: 402 KiB |
After Width: | Height: | Size: 93 KiB |
After Width: | Height: | Size: 1.4 MiB |
After Width: | Height: | Size: 113 KiB |
|
@ -33,6 +33,10 @@ const groups = [
|
||||||
slug: 'location',
|
slug: 'location',
|
||||||
name: 'Location',
|
name: 'Location',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
slug: 'oral',
|
||||||
|
name: 'Oral',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
slug: 'orientation',
|
slug: 'orientation',
|
||||||
name: 'Orientation',
|
name: 'Orientation',
|
||||||
|
@ -136,16 +140,19 @@ function getTags(groupsMap) {
|
||||||
priority: 6,
|
priority: 6,
|
||||||
description: 'Sucking off a cock right after anal, giving your own or someone else`s asshole a second hand taste.',
|
description: 'Sucking off a cock right after anal, giving your own or someone else`s asshole a second hand taste.',
|
||||||
alias_for: null,
|
alias_for: null,
|
||||||
|
group_id: groupsMap.oral,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'ass eating',
|
name: 'ass eating',
|
||||||
slug: 'ass-eating',
|
slug: 'ass-eating',
|
||||||
alias_for: null,
|
alias_for: null,
|
||||||
|
group_id: groupsMap.oral,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'ball licking',
|
name: 'ball licking',
|
||||||
slug: 'ball-licking',
|
slug: 'ball-licking',
|
||||||
alias_for: null,
|
alias_for: null,
|
||||||
|
group_id: groupsMap.oral,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'ballerina',
|
name: 'ballerina',
|
||||||
|
@ -211,6 +218,7 @@ function getTags(groupsMap) {
|
||||||
slug: 'blowjob',
|
slug: 'blowjob',
|
||||||
priority: 7,
|
priority: 7,
|
||||||
alias_for: null,
|
alias_for: null,
|
||||||
|
group_id: groupsMap.oral,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'blowbang',
|
name: 'blowbang',
|
||||||
|
@ -319,6 +327,7 @@ function getTags(groupsMap) {
|
||||||
slug: 'deepthroat',
|
slug: 'deepthroat',
|
||||||
priority: 7,
|
priority: 7,
|
||||||
alias_for: null,
|
alias_for: null,
|
||||||
|
group_id: groupsMap.oral,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'double penetration',
|
name: 'double penetration',
|
||||||
|
@ -345,11 +354,13 @@ function getTags(groupsMap) {
|
||||||
name: 'double blowjob',
|
name: 'double blowjob',
|
||||||
slug: 'double-blowjob',
|
slug: 'double-blowjob',
|
||||||
alias_for: null,
|
alias_for: null,
|
||||||
|
group_id: groupsMap.oral,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'doggy style',
|
name: 'doggy style',
|
||||||
slug: 'doggy-style',
|
slug: 'doggy-style',
|
||||||
alias_for: null,
|
alias_for: null,
|
||||||
|
group_id: groupsMap.position,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'dress',
|
name: 'dress',
|
||||||
|
@ -379,7 +390,7 @@ function getTags(groupsMap) {
|
||||||
slug: 'facefuck',
|
slug: 'facefuck',
|
||||||
priority: 9,
|
priority: 9,
|
||||||
alias_for: null,
|
alias_for: null,
|
||||||
group_id: groupsMap.position,
|
group_id: groupsMap.oral,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'facesitting',
|
name: 'facesitting',
|
||||||
|
@ -645,6 +656,7 @@ function getTags(groupsMap) {
|
||||||
name: 'pussy eating',
|
name: 'pussy eating',
|
||||||
slug: 'pussy-eating',
|
slug: 'pussy-eating',
|
||||||
alias_for: null,
|
alias_for: null,
|
||||||
|
group_id: groupsMap.oral,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'redhead',
|
name: 'redhead',
|
||||||
|
|
|
@ -9,7 +9,17 @@ const tagPosters = [
|
||||||
{
|
{
|
||||||
path: 'tags/anal/poster.jpeg',
|
path: 'tags/anal/poster.jpeg',
|
||||||
tagSlug: 'anal',
|
tagSlug: 'anal',
|
||||||
comment: '',
|
comment: 'Jynx Maze in "Anal Buffet 6" for Evil Angel',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'tags/ass-to-mouth/poster.jpeg',
|
||||||
|
tagSlug: 'ass-to-mouth',
|
||||||
|
comment: 'Alysa Gap and Logan in "Anal Buffet 4" for Evil Angel',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'tags/gapes/poster.jpeg',
|
||||||
|
tagSlug: 'gapes',
|
||||||
|
comment: 'Paulina in "Anal Buffet 4" for Evil Angel',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'tags/da-tp/0.jpeg',
|
path: 'tags/da-tp/0.jpeg',
|
||||||
|
@ -24,7 +34,7 @@ const tagPosters = [
|
||||||
{
|
{
|
||||||
path: 'tags/double-anal/poster.jpeg',
|
path: 'tags/double-anal/poster.jpeg',
|
||||||
tagSlug: 'double-anal',
|
tagSlug: 'double-anal',
|
||||||
comment: '',
|
comment: 'Haley Reed in "Young Hot Ass" for Evil Angel',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'tags/double-vaginal/poster.jpeg',
|
path: 'tags/double-vaginal/poster.jpeg',
|
||||||
|
@ -54,7 +64,7 @@ const tagPosters = [
|
||||||
{
|
{
|
||||||
path: 'tags/gangbang/poster.jpeg',
|
path: 'tags/gangbang/poster.jpeg',
|
||||||
tagSlug: 'gangbang',
|
tagSlug: 'gangbang',
|
||||||
comment: '',
|
comment: 'Kristen Scott in "Interracial Gangbang!" for Jules Jordan',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'tags/mff/poster.jpeg',
|
path: 'tags/mff/poster.jpeg',
|
||||||
|
@ -74,7 +84,7 @@ const tagPosters = [
|
||||||
{
|
{
|
||||||
path: 'tags/asian/poster.jpeg',
|
path: 'tags/asian/poster.jpeg',
|
||||||
tagSlug: 'asian',
|
tagSlug: 'asian',
|
||||||
comment: '',
|
comment: 'Vina Sky in "Young and Glamorous 10" for Jules Jordan',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'tags/caucasian/poster.jpeg',
|
path: 'tags/caucasian/poster.jpeg',
|
||||||
|
@ -101,6 +111,11 @@ const tagPosters = [
|
||||||
tagSlug: 'facial',
|
tagSlug: 'facial',
|
||||||
comment: '',
|
comment: '',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'tags/trainbang/poster.jpeg',
|
||||||
|
tagSlug: 'trainbang',
|
||||||
|
comment: 'Nicole Black in GIO971 for LegalPorno',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: 'tags/bukkake/poster.jpeg',
|
path: 'tags/bukkake/poster.jpeg',
|
||||||
tagSlug: 'bukkake',
|
tagSlug: 'bukkake',
|
||||||
|
@ -135,6 +150,11 @@ const tagPosters = [
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const tagPhotos = [
|
const tagPhotos = [
|
||||||
|
{
|
||||||
|
path: 'tags/airtight/3.jpeg',
|
||||||
|
tagSlug: 'airtight',
|
||||||
|
comment: 'Anita Bellini in "Triple Dick Gangbang" for Hands On Hardcore (DDF Network)',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: 'tags/airtight/2.jpeg',
|
path: 'tags/airtight/2.jpeg',
|
||||||
tagSlug: 'airtight',
|
tagSlug: 'airtight',
|
||||||
|
@ -151,6 +171,21 @@ const tagPhotos = [
|
||||||
tagSlug: 'airtight',
|
tagSlug: 'airtight',
|
||||||
comment: 'Sheena Shaw in "Ass Worship 14" for Jules Jordan',
|
comment: 'Sheena Shaw in "Ass Worship 14" for Jules Jordan',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'tags/anal/0.jpeg',
|
||||||
|
tagSlug: 'anal',
|
||||||
|
comment: '',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'tags/double-anal/1.jpeg',
|
||||||
|
tagSlug: 'double-anal',
|
||||||
|
comment: 'Ria Sunn in SZ1801 for LegalPorno',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'tags/double-anal/0.jpeg',
|
||||||
|
tagSlug: 'double-anal',
|
||||||
|
comment: 'Nicole Black doing double anal during a gangbang in GIO971 for LegalPorno',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: 'tags/da-tp/3.jpeg',
|
path: 'tags/da-tp/3.jpeg',
|
||||||
tagSlug: 'da-tp',
|
tagSlug: 'da-tp',
|
||||||
|
@ -176,6 +211,11 @@ const tagPhotos = [
|
||||||
tagSlug: 'dv-tp',
|
tagSlug: 'dv-tp',
|
||||||
comment: 'Luna Rival in LegalPorno SZ1490',
|
comment: 'Luna Rival in LegalPorno SZ1490',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'tags/gapes/0.jpeg',
|
||||||
|
tagSlug: 'gapes',
|
||||||
|
comment: 'McKenzee Miles in "Anal Buffet 4" for Evil Angel',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: 'tags/triple-anal/1.jpeg',
|
path: 'tags/triple-anal/1.jpeg',
|
||||||
tagSlug: 'triple-anal',
|
tagSlug: 'triple-anal',
|
||||||
|
@ -191,6 +231,11 @@ const tagPhotos = [
|
||||||
tagSlug: 'gangbang',
|
tagSlug: 'gangbang',
|
||||||
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.',
|
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/0.jpeg',
|
||||||
|
tagSlug: 'gangbang',
|
||||||
|
comment: '"4 On 1 Gangbangs" for Doghouse Digital',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: 'tags/gangbang/2.jpeg',
|
path: 'tags/gangbang/2.jpeg',
|
||||||
tagSlug: 'gangbang',
|
tagSlug: 'gangbang',
|
||||||
|
|
|
@ -48,7 +48,6 @@ async function createThumbnail(buffer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function createMediaDirectory(domain, subpath) {
|
async function createMediaDirectory(domain, subpath) {
|
||||||
console.log(domain, subpath);
|
|
||||||
const filepath = path.join(config.media.path, domain, subpath);
|
const filepath = path.join(config.media.path, domain, subpath);
|
||||||
|
|
||||||
await fs.mkdir(filepath, { recursive: true });
|
await fs.mkdir(filepath, { recursive: true });
|
||||||
|
|
|
@ -7,8 +7,9 @@ const { postgraphile } = require('postgraphile');
|
||||||
const Router = require('express-promise-router');
|
const Router = require('express-promise-router');
|
||||||
const bodyParser = require('body-parser');
|
const bodyParser = require('body-parser');
|
||||||
|
|
||||||
const ConnectionFilterPlugin = require('postgraphile-plugin-connection-filter');
|
const PgConnectionFilterPlugin = require('postgraphile-plugin-connection-filter');
|
||||||
const PgSimplifyInflectorPlugin = require('@graphile-contrib/pg-simplify-inflector');
|
const PgSimplifyInflectorPlugin = require('@graphile-contrib/pg-simplify-inflector');
|
||||||
|
const PgOrderByRelatedPlugin = require('@graphile-contrib/pg-order-by-related');
|
||||||
|
|
||||||
const { ActorPlugins } = require('./plugins/plugins');
|
const { ActorPlugins } = require('./plugins/plugins');
|
||||||
|
|
||||||
|
@ -48,9 +49,12 @@ function initServer() {
|
||||||
simpleCollections: 'only',
|
simpleCollections: 'only',
|
||||||
graphileBuildOptions: {
|
graphileBuildOptions: {
|
||||||
pgOmitListSuffix: true,
|
pgOmitListSuffix: true,
|
||||||
|
connectionFilterRelations: true,
|
||||||
},
|
},
|
||||||
appendPlugins: [
|
appendPlugins: [
|
||||||
PgSimplifyInflectorPlugin, ConnectionFilterPlugin,
|
PgSimplifyInflectorPlugin,
|
||||||
|
PgConnectionFilterPlugin,
|
||||||
|
PgOrderByRelatedPlugin,
|
||||||
...ActorPlugins,
|
...ActorPlugins,
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|