Refactoring client to reflect database changes.
This commit is contained in:
parent
31aee71edb
commit
1c43884102
|
@ -75,6 +75,8 @@ async function mounted() {
|
|||
],
|
||||
});
|
||||
|
||||
console.log(tags);
|
||||
|
||||
this.tags = tags.reduce((acc, tag) => {
|
||||
if (acc[tag.group.slug]) {
|
||||
return { ...acc, [tag.group.slug]: [...acc[tag.group.slug], tag] };
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
function curateActor(actor) {
|
||||
const curatedActor = {
|
||||
...actor,
|
||||
avatar: actor.avatar[0],
|
||||
origin: actor.originCountry && {
|
||||
country: actor.originCountry,
|
||||
},
|
||||
};
|
||||
|
||||
if (actor.avatar) curatedActor.avatar = actor.avatar.media;
|
||||
|
||||
return curatedActor;
|
||||
}
|
||||
|
||||
|
@ -14,17 +15,31 @@ function curateRelease(release) {
|
|||
const curatedRelease = {
|
||||
...release,
|
||||
actors: release.actors.map(({ actor }) => curateActor(actor)),
|
||||
poster: release.poster[0],
|
||||
network: release.site.network,
|
||||
poster: release.poster && release.poster.media,
|
||||
tags: release.tags.map(({ tag }) => tag),
|
||||
network: release.site.network,
|
||||
};
|
||||
|
||||
if (release.trailer) [curatedRelease.trailer] = release.trailer;
|
||||
if (release.photos) curatedRelease.photos = release.photos.map(({ media }) => media);
|
||||
if (release.trailer) [curatedRelease.trailer] = release.trailer.media;
|
||||
|
||||
return curatedRelease;
|
||||
}
|
||||
|
||||
function curateTag(tag) {
|
||||
const curatedTag = {
|
||||
...tag,
|
||||
};
|
||||
|
||||
if (tag.releases) curatedTag.releases = tag.releases.map(({ release }) => curateRelease(release));
|
||||
if (tag.photos) curatedTag.photos = tag.photos.map(({ media }) => media);
|
||||
if (tag.poster) curatedTag.poster = tag.poster.media;
|
||||
|
||||
return curatedTag;
|
||||
}
|
||||
|
||||
export {
|
||||
curateActor,
|
||||
curateRelease,
|
||||
curateTag,
|
||||
};
|
||||
|
|
|
@ -14,8 +14,8 @@ const siteFragment = `
|
|||
`;
|
||||
|
||||
const releaseActorsFragment = `
|
||||
actors: releasesActors(orderBy: GENDER_ASC) {
|
||||
actor: releaseActor {
|
||||
actors: releasesActorsSortables(orderBy: GENDER_ASC) {
|
||||
actor {
|
||||
id
|
||||
name
|
||||
slug
|
||||
|
@ -26,16 +26,18 @@ const releaseActorsFragment = `
|
|||
name
|
||||
alias
|
||||
}
|
||||
avatar: actorsMediasByTargetId(condition: { role: "avatar" }) {
|
||||
avatar: actorsAvatarByActorId {
|
||||
media {
|
||||
thumbnail
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const releaseTagsFragment = `
|
||||
tags: releasesTagsByTargetId {
|
||||
tag: releaseTag {
|
||||
tags: releasesTags {
|
||||
tag {
|
||||
name
|
||||
priority
|
||||
slug
|
||||
|
@ -45,29 +47,35 @@ const releaseTagsFragment = `
|
|||
`;
|
||||
|
||||
const releasePosterFragment = `
|
||||
poster: releasesMediasByTargetId(condition: { role: "poster" }) {
|
||||
poster: releasesPosterByReleaseId {
|
||||
media {
|
||||
index
|
||||
path
|
||||
thumbnail
|
||||
comment
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const releasePhotosFragment = `
|
||||
photos: releasesMediasByTargetId(condition: { role: "photo" }) {
|
||||
photos: releasesPhotos {
|
||||
media {
|
||||
index
|
||||
path
|
||||
thumbnail
|
||||
comment
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const releaseTrailerFragment = `
|
||||
trailer: releasesMediasByTargetId(condition: { role: "trailer" }) {
|
||||
trailer: releasesTrailerByReleaseId {
|
||||
media {
|
||||
index
|
||||
path
|
||||
thumbnail
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const releasesFragment = `
|
||||
|
|
|
@ -5,18 +5,7 @@ import {
|
|||
releaseTagsFragment,
|
||||
siteFragment,
|
||||
} from '../fragments';
|
||||
import { curateRelease } from '../curate';
|
||||
|
||||
function curateTag(tag) {
|
||||
const curatedTag = {
|
||||
...tag,
|
||||
};
|
||||
|
||||
if (tag.releases) curatedTag.releases = tag.releases.map(({ tagRelease }) => curateRelease(tagRelease));
|
||||
if (tag.poster) [curatedTag.poster] = tag.poster;
|
||||
|
||||
return curatedTag;
|
||||
}
|
||||
import { curateTag } from '../curate';
|
||||
|
||||
function initTagsActions(store, _router) {
|
||||
async function fetchTagBySlug(tagSlug) {
|
||||
|
@ -31,20 +20,24 @@ function initTagsActions(store, _router) {
|
|||
name
|
||||
slug
|
||||
}
|
||||
poster: tagsMediasByTargetId(condition: { role: "poster" }) {
|
||||
poster: tagsPosterByTagId {
|
||||
media {
|
||||
id
|
||||
thumbnail
|
||||
path
|
||||
comment
|
||||
}
|
||||
photos: tagsMediasByTargetId(condition: { role: "photo" }) {
|
||||
}
|
||||
photos: tagsPhotos {
|
||||
media {
|
||||
id
|
||||
thumbnail
|
||||
path
|
||||
comment
|
||||
}
|
||||
}
|
||||
releases: releasesTags {
|
||||
tagRelease {
|
||||
release {
|
||||
id
|
||||
title
|
||||
date
|
||||
|
@ -82,9 +75,11 @@ function initTagsActions(store, _router) {
|
|||
id
|
||||
name
|
||||
slug
|
||||
poster: tagsMediasByTargetId(condition: { role: "poster" }) {
|
||||
poster: tagsPosterByTagId {
|
||||
media {
|
||||
thumbnail
|
||||
}
|
||||
}
|
||||
group {
|
||||
name
|
||||
slug
|
||||
|
|
|
@ -378,6 +378,19 @@ exports.up = knex => Promise.resolve()
|
|||
|
||||
table.unique('release_id');
|
||||
}))
|
||||
.then(() => knex.schema.createTable('releases_trailers', (table) => {
|
||||
table.integer('release_id', 16)
|
||||
.notNullable()
|
||||
.references('id')
|
||||
.inTable('releases');
|
||||
|
||||
table.integer('media_id', 16)
|
||||
.notNullable()
|
||||
.references('id')
|
||||
.inTable('media');
|
||||
|
||||
table.unique('release_id');
|
||||
}))
|
||||
.then(() => knex.schema.createTable('releases_photos', (table) => {
|
||||
table.integer('release_id', 16)
|
||||
.notNullable()
|
||||
|
@ -405,27 +418,34 @@ exports.up = knex => Promise.resolve()
|
|||
table.unique(['tag_id', 'release_id']);
|
||||
}))
|
||||
.then(() => knex.raw(`
|
||||
CREATE VIEW releases_actors_sortable AS
|
||||
SELECT releases_actors.*, actors.gender, actors.name, actors.birthdate FROM releases_actors
|
||||
JOIN actors ON releases_actors.actor_id = actors.id;
|
||||
|
||||
COMMENT ON VIEW releases_actors_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 */
|
||||
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 $$
|
||||
select distinct on (releases.id) releases.* from releases
|
||||
join releases_tags on (releases_tags.release_id = releases.id)
|
||||
join tags on (releases_tags.tag_id = tags.id)
|
||||
where tags.slug = ANY($1);
|
||||
$$ language sql stable
|
||||
*/
|
||||
CREATE FUNCTION releases_by_tag_slugs(slugs text[]) RETURNS setof releases AS $$
|
||||
SELECT DISTINCT ON (releases.id) releases.* FROM releases
|
||||
JOIN releases_tags ON (releases_tags.release_id = releases.id)
|
||||
JOIN tags ON (releases_tags.tag_id = tags.id)
|
||||
WHERE tags.slug = ANY($1);
|
||||
$$ LANGUAGE sql STABLE
|
||||
`));
|
||||
|
||||
exports.down = knex => knex.raw(`
|
||||
DROP FUNCTION IF EXISTS releases_by_tag_slugs;
|
||||
|
||||
DROP VIEW IF EXISTS releases_actors_view;
|
||||
|
||||
DROP TABLE IF EXISTS releases_actors CASCADE;
|
||||
DROP TABLE IF EXISTS releases_directors CASCADE;
|
||||
DROP TABLE IF EXISTS releases_posters CASCADE;
|
||||
DROP TABLE IF EXISTS releases_photos CASCADE;
|
||||
DROP TABLE IF EXISTS releases_trailers CASCADE;
|
||||
DROP TABLE IF EXISTS releases_tags CASCADE;
|
||||
DROP TABLE IF EXISTS actors_avatars CASCADE;
|
||||
DROP TABLE IF EXISTS actors_photos CASCADE;
|
||||
|
|
|
@ -1544,7 +1544,7 @@ function getTagAliases(tagsMap) {
|
|||
exports.seed = knex => Promise.resolve()
|
||||
.then(async () => upsert('tags_groups', groups, 'slug', knex))
|
||||
.then(async () => {
|
||||
const groupEntries = knex('tags').select('*');
|
||||
const groupEntries = await knex('tags_groups').select('*');
|
||||
const groupsMap = groupEntries.reduce((acc, { id, slug }) => ({ ...acc, [slug]: id }), {});
|
||||
|
||||
const tags = getTags(groupsMap);
|
||||
|
|
|
@ -11,6 +11,11 @@ const tagPosters = [
|
|||
tagSlug: 'anal',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/da-tp/0.jpeg',
|
||||
tagSlug: 'da-tp',
|
||||
comment: 'Natasha Teen in LegalPorno SZ2164',
|
||||
},
|
||||
{
|
||||
path: 'tags/double-penetration/poster.jpeg',
|
||||
tagSlug: 'double-penetration',
|
||||
|
@ -26,6 +31,11 @@ const tagPosters = [
|
|||
tagSlug: 'double-vaginal',
|
||||
comment: '',
|
||||
},
|
||||
{
|
||||
path: 'tags/dv-tp/poster.jpeg',
|
||||
tagSlug: 'dv-tp',
|
||||
comment: 'Juelz Ventura in "Gangbanged 5" for Elegant Angel',
|
||||
},
|
||||
{
|
||||
path: 'tags/tattoo/poster.jpeg',
|
||||
tagSlug: 'tattoo',
|
||||
|
@ -141,11 +151,6 @@ const tagPhotos = [
|
|||
tagSlug: 'airtight',
|
||||
comment: 'Sheena Shaw in "Ass Worship 14" for Jules Jordan',
|
||||
},
|
||||
{
|
||||
path: 'tags/da-tp/0.jpeg',
|
||||
tagSlug: 'da-tp',
|
||||
comment: 'Natasha Teen in LegalPorno SZ2164',
|
||||
},
|
||||
{
|
||||
path: 'tags/da-tp/3.jpeg',
|
||||
tagSlug: 'da-tp',
|
||||
|
@ -166,11 +171,6 @@ const tagPhotos = [
|
|||
tagSlug: 'da-tp',
|
||||
comment: 'Ninel Mojado aka Mira Cuckold in GIO063 for LegalPorno',
|
||||
},
|
||||
{
|
||||
path: 'tags/dv-tp/poster.jpeg',
|
||||
tagSlug: 'dv-tp',
|
||||
comment: 'Juelz Ventura in "Gangbanged 5" for Elegant Angel',
|
||||
},
|
||||
{
|
||||
path: 'tags/dv-tp/0.jpeg',
|
||||
tagSlug: 'dv-tp',
|
||||
|
|
|
@ -399,7 +399,7 @@ async function scrapeBasicActors() {
|
|||
async function associateActors(mappedActors, releases) {
|
||||
const [existingActorEntries, existingAssociationEntries] = await Promise.all([
|
||||
knex('actors').whereIn('name', Object.keys(mappedActors)),
|
||||
knex('actors_associated').whereIn('release_id', releases.map(release => release.id)),
|
||||
knex('releases_actors').whereIn('release_id', releases.map(release => release.id)),
|
||||
]);
|
||||
|
||||
const associations = await Promise.map(Object.entries(mappedActors), async ([actorName, releaseIds]) => {
|
||||
|
@ -418,7 +418,7 @@ async function associateActors(mappedActors, releases) {
|
|||
});
|
||||
|
||||
await Promise.all([
|
||||
knex('actors_associated').insert(associations.flat()),
|
||||
knex('releases_actors').insert(associations.flat()),
|
||||
scrapeBasicActors(),
|
||||
]);
|
||||
}
|
||||
|
|
12
src/tags.js
12
src/tags.js
|
@ -66,20 +66,16 @@ async function associateTags(release, releaseId) {
|
|||
? await matchTags(release.tags) // scraper returned raw tags
|
||||
: release.tags; // tags already matched by (outdated) scraper
|
||||
|
||||
const associationEntries = await knex('tags_associated')
|
||||
.where({
|
||||
domain: 'releases',
|
||||
target_id: releaseId,
|
||||
})
|
||||
const associationEntries = await knex('releases_tags')
|
||||
.where('release_id', releaseId)
|
||||
.whereIn('tag_id', tags);
|
||||
|
||||
const existingAssociations = new Set(associationEntries.map(association => association.tag_id));
|
||||
const newAssociations = tags.filter(tagId => !existingAssociations.has(tagId));
|
||||
|
||||
await knex('tags_associated').insert(newAssociations.map(tagId => ({
|
||||
await knex('releases_tags').insert(newAssociations.map(tagId => ({
|
||||
tag_id: tagId,
|
||||
domain: 'releases',
|
||||
target_id: releaseId,
|
||||
release_id: releaseId,
|
||||
})));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue