Removed views in favor of PostGraphile filter and sort plugins. Updated site modules to GraphQL. Added tag posters.

This commit is contained in:
ThePendulum 2020-01-04 02:51:58 +01:00
parent 70e27a6cd9
commit 72b175e9e2
46 changed files with 232 additions and 52 deletions

View File

@ -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,
}, },
}; };

View File

@ -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>

View File

@ -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 {

View File

@ -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>

View File

@ -45,9 +45,14 @@ 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(
$actorSlug: String!
$limit:Int = 1000,
$after:Date = "1900-01-01",
$before:Date = "2100-01-01",
) {
actor: actorBySlug(slug: $actorSlug) { actor: actorBySlug(slug: $actorSlug) {
id id
name name
@ -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);

View File

@ -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

View File

@ -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,
}; };
} }

View File

@ -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(`

5
package-lock.json generated
View File

@ -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",

View File

@ -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",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 845 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 110 KiB

BIN
public/img/tags/anal/0.jpeg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

BIN
public/img/tags/anal/0_thumb.jpeg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
public/img/tags/anal/poster.jpeg Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 684 KiB

BIN
public/img/tags/anal/poster_thumb.jpeg Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 800 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 494 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 391 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 137 KiB

BIN
public/img/tags/gangbang/0.jpeg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

BIN
public/img/tags/gangbang/poster.jpeg Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 1.0 MiB

BIN
public/img/tags/gangbang/poster_thumb.jpeg Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

View File

@ -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',

View File

@ -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',

View File

@ -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 });

View File

@ -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,
], ],
}, },