Fixed queries.
This commit is contained in:
parent
ce92d13327
commit
577c03f9b7
|
@ -6,7 +6,7 @@ function curateRelease(release) {
|
||||||
actors: release.actors.map(({ actor }) => ({
|
actors: release.actors.map(({ actor }) => ({
|
||||||
...actor,
|
...actor,
|
||||||
avatar: actor.avatar[0],
|
avatar: actor.avatar[0],
|
||||||
origin: {
|
origin: actor.originCountry && {
|
||||||
country: actor.originCountry,
|
country: actor.originCountry,
|
||||||
},
|
},
|
||||||
})),
|
})),
|
||||||
|
@ -31,7 +31,7 @@ function initReleasesActions(_store, _router) {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const { releases } = await graphql(`
|
const { releases } = await graphql(`
|
||||||
query Releases($limit:Int) {
|
query Releases($limit:Int!) {
|
||||||
releases(first:$limit, orderBy: DATE_DESC) {
|
releases(first:$limit, orderBy: DATE_DESC) {
|
||||||
id
|
id
|
||||||
title
|
title
|
||||||
|
@ -63,7 +63,7 @@ function initReleasesActions(_store, _router) {
|
||||||
thumbnail
|
thumbnail
|
||||||
}
|
}
|
||||||
tags: releasesTagsByTargetId {
|
tags: releasesTagsByTargetId {
|
||||||
tag {
|
tag: releaseTag {
|
||||||
name
|
name
|
||||||
priority
|
priority
|
||||||
slug
|
slug
|
||||||
|
@ -137,7 +137,7 @@ function initReleasesActions(_store, _router) {
|
||||||
thumbnail
|
thumbnail
|
||||||
}
|
}
|
||||||
tags: releasesTagsByTargetId {
|
tags: releasesTagsByTargetId {
|
||||||
tag {
|
tag: releaseTag {
|
||||||
name
|
name
|
||||||
priority
|
priority
|
||||||
slug
|
slug
|
||||||
|
|
|
@ -300,7 +300,7 @@ exports.up = knex => Promise.resolve()
|
||||||
COMMENT ON VIEW actors_media IS E'@foreignKey (target_id) references actors (id)|@fieldName actorMedia';
|
COMMENT ON VIEW actors_media IS E'@foreignKey (target_id) references actors (id)|@fieldName actorMedia';
|
||||||
COMMENT ON VIEW tags_media IS E'@foreignKey (target_id) references tags (id)|@fieldName tagMedia';
|
COMMENT ON VIEW tags_media IS E'@foreignKey (target_id) references tags (id)|@fieldName tagMedia';
|
||||||
|
|
||||||
COMMENT ON VIEW releases_tags IS E'@foreignKey (target_id) references releases (id)\n@foreignKey (tag_id) references tags (id)|@fieldName releaseTags';
|
COMMENT ON VIEW releases_tags IS E'@foreignKey (target_id) references releases (id)\n@foreignKey (tag_id) references tags (id)|@fieldName releaseTag';
|
||||||
`));
|
`));
|
||||||
|
|
||||||
exports.down = knex => Promise.resolve()
|
exports.down = knex => Promise.resolve()
|
||||||
|
|
1403
public/css/style.css
1403
public/css/style.css
File diff suppressed because it is too large
Load Diff
311
src/releases.js
311
src/releases.js
|
@ -49,223 +49,102 @@ function commonQuery(queryBuilder, {
|
||||||
.limit(limit);
|
.limit(limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function curateMovie(release, deep = true) {
|
|
||||||
const [scenes, actors, tags, media] = await Promise.all([
|
|
||||||
knex('releases')
|
|
||||||
.where('releases.parent_id', release.id)
|
|
||||||
.modify(commonQuery, {}),
|
|
||||||
knex('actors_associated')
|
|
||||||
.select(
|
|
||||||
'actors.id', 'actors.name', 'actors.gender', 'actors.slug', 'actors.birthdate',
|
|
||||||
'birth_countries.alpha2 as birth_country_alpha2', 'birth_countries.name as birth_country_name', 'birth_countries.alias as birth_country_alias',
|
|
||||||
'media.thumbnail as avatar',
|
|
||||||
)
|
|
||||||
.where({ release_id: release.id })
|
|
||||||
.leftJoin('actors', 'actors.id', 'actors_associated.actor_id')
|
|
||||||
.leftJoin('countries as birth_countries', 'actors.birth_country_alpha2', 'birth_countries.alpha2')
|
|
||||||
.leftJoin('media', (builder) => {
|
|
||||||
builder
|
|
||||||
.on('media.target_id', 'actors.id')
|
|
||||||
.andOnVal('media.domain', 'actors')
|
|
||||||
.andOnVal('media.index', '0');
|
|
||||||
})
|
|
||||||
.orderBy('actors.gender'),
|
|
||||||
knex('tags_associated')
|
|
||||||
.select('tags.name', 'tags.slug')
|
|
||||||
.where({
|
|
||||||
domain: 'releases',
|
|
||||||
target_id: release.id,
|
|
||||||
})
|
|
||||||
.leftJoin('tags', 'tags.id', 'tags_associated.tag_id')
|
|
||||||
.orderBy('tags.priority', 'desc'),
|
|
||||||
knex('media')
|
|
||||||
.where({
|
|
||||||
target_id: release.id,
|
|
||||||
domain: 'releases',
|
|
||||||
})
|
|
||||||
.orderBy(['role', 'index']),
|
|
||||||
]);
|
|
||||||
|
|
||||||
const curatedRelease = {
|
|
||||||
id: release.id,
|
|
||||||
type: release.type,
|
|
||||||
title: release.title,
|
|
||||||
date: release.date,
|
|
||||||
dateAdded: release.created_at,
|
|
||||||
description: release.description,
|
|
||||||
url: release.url,
|
|
||||||
shootId: release.shoot_id,
|
|
||||||
entryId: release.entry_id,
|
|
||||||
actors: actors.map(actor => ({
|
|
||||||
id: actor.id,
|
|
||||||
slug: actor.slug,
|
|
||||||
name: actor.name,
|
|
||||||
gender: actor.gender,
|
|
||||||
birthdate: actor.birthdate,
|
|
||||||
age: moment().diff(actor.birthdate, 'years'),
|
|
||||||
ageThen: moment(release.date).diff(actor.birthdate, 'years'),
|
|
||||||
avatar: actor.avatar,
|
|
||||||
origin: actor.birth_country_alpha2
|
|
||||||
? {
|
|
||||||
country: {
|
|
||||||
name: actor.birth_country_alias,
|
|
||||||
alpha2: actor.birth_country_alpha2,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
: null,
|
|
||||||
})),
|
|
||||||
director: release.director,
|
|
||||||
tags,
|
|
||||||
duration: release.duration,
|
|
||||||
photos: media.filter(item => item.role === 'photo'),
|
|
||||||
poster: media.filter(item => item.role === 'poster')[0],
|
|
||||||
covers: media.filter(item => item.role === 'cover'),
|
|
||||||
trailer: media.filter(item => item.role === 'trailer')[0],
|
|
||||||
site: {
|
|
||||||
id: release.site_id,
|
|
||||||
name: release.site_name,
|
|
||||||
independent: release.site_parameters
|
|
||||||
? (JSON.parse(release.site_parameters).independent || false)
|
|
||||||
: false,
|
|
||||||
slug: release.site_slug,
|
|
||||||
url: release.site_url,
|
|
||||||
},
|
|
||||||
studio: release.studio_id
|
|
||||||
? {
|
|
||||||
id: release.studio_id,
|
|
||||||
name: release.studio_name,
|
|
||||||
slug: release.studio_slug,
|
|
||||||
url: release.studio_url,
|
|
||||||
}
|
|
||||||
: null,
|
|
||||||
network: {
|
|
||||||
id: release.network_id,
|
|
||||||
name: release.network_name,
|
|
||||||
description: release.network_description,
|
|
||||||
slug: release.network_slug,
|
|
||||||
url: release.network_url,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
if (scenes && scenes.length > 0 && deep) {
|
|
||||||
curatedRelease.scenes = await Promise.map(scenes, scene => curateRelease(scene, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
return curatedRelease;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function curateScene(release, deep = true) {
|
|
||||||
const [movie, actors, tags, media] = await Promise.all([
|
|
||||||
knex('releases')
|
|
||||||
.where('releases.id', release.parent_id)
|
|
||||||
.modify(commonQuery, {})
|
|
||||||
.first(),
|
|
||||||
knex('actors_associated')
|
|
||||||
.select(
|
|
||||||
'actors.id', 'actors.name', 'actors.gender', 'actors.slug', 'actors.birthdate',
|
|
||||||
'birth_countries.alpha2 as birth_country_alpha2', 'birth_countries.name as birth_country_name', 'birth_countries.alias as birth_country_alias',
|
|
||||||
'media.thumbnail as avatar',
|
|
||||||
)
|
|
||||||
.where({ release_id: release.id })
|
|
||||||
.leftJoin('actors', 'actors.id', 'actors_associated.actor_id')
|
|
||||||
.leftJoin('countries as birth_countries', 'actors.birth_country_alpha2', 'birth_countries.alpha2')
|
|
||||||
.leftJoin('media', (builder) => {
|
|
||||||
builder
|
|
||||||
.on('media.target_id', 'actors.id')
|
|
||||||
.andOnVal('media.domain', 'actors')
|
|
||||||
.andOnVal('media.index', '0');
|
|
||||||
})
|
|
||||||
.orderBy('actors.gender'),
|
|
||||||
knex('tags_associated')
|
|
||||||
.select('tags.name', 'tags.slug')
|
|
||||||
.where({
|
|
||||||
domain: 'releases',
|
|
||||||
target_id: release.id,
|
|
||||||
})
|
|
||||||
.leftJoin('tags', 'tags.id', 'tags_associated.tag_id')
|
|
||||||
.orderBy('tags.priority', 'desc'),
|
|
||||||
knex('media')
|
|
||||||
.where({
|
|
||||||
target_id: release.id,
|
|
||||||
domain: 'releases',
|
|
||||||
})
|
|
||||||
.orderBy(['role', 'index']),
|
|
||||||
]);
|
|
||||||
|
|
||||||
const curatedRelease = {
|
|
||||||
id: release.id,
|
|
||||||
type: release.type,
|
|
||||||
title: release.title,
|
|
||||||
date: release.date,
|
|
||||||
dateAdded: release.created_at,
|
|
||||||
description: release.description,
|
|
||||||
url: release.url,
|
|
||||||
shootId: release.shoot_id,
|
|
||||||
entryId: release.entry_id,
|
|
||||||
actors: actors.map(actor => ({
|
|
||||||
id: actor.id,
|
|
||||||
slug: actor.slug,
|
|
||||||
name: actor.name,
|
|
||||||
gender: actor.gender,
|
|
||||||
birthdate: actor.birthdate,
|
|
||||||
age: moment().diff(actor.birthdate, 'years'),
|
|
||||||
ageThen: moment(release.date).diff(actor.birthdate, 'years'),
|
|
||||||
avatar: actor.avatar,
|
|
||||||
origin: actor.birth_country_alpha2
|
|
||||||
? {
|
|
||||||
country: {
|
|
||||||
name: actor.birth_country_alias,
|
|
||||||
alpha2: actor.birth_country_alpha2,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
: null,
|
|
||||||
})),
|
|
||||||
director: release.director,
|
|
||||||
tags,
|
|
||||||
duration: release.duration,
|
|
||||||
photos: media.filter(item => item.role === 'photo'),
|
|
||||||
poster: media.filter(item => item.role === 'poster')[0],
|
|
||||||
covers: media.filter(item => item.role === 'cover'),
|
|
||||||
trailer: media.filter(item => item.role === 'trailer')[0],
|
|
||||||
site: {
|
|
||||||
id: release.site_id,
|
|
||||||
name: release.site_name,
|
|
||||||
independent: release.site_parameters
|
|
||||||
? (JSON.parse(release.site_parameters).independent || false)
|
|
||||||
: false,
|
|
||||||
slug: release.site_slug,
|
|
||||||
url: release.site_url,
|
|
||||||
},
|
|
||||||
studio: release.studio_id
|
|
||||||
? {
|
|
||||||
id: release.studio_id,
|
|
||||||
name: release.studio_name,
|
|
||||||
slug: release.studio_slug,
|
|
||||||
url: release.studio_url,
|
|
||||||
}
|
|
||||||
: null,
|
|
||||||
network: {
|
|
||||||
id: release.network_id,
|
|
||||||
name: release.network_name,
|
|
||||||
description: release.network_description,
|
|
||||||
slug: release.network_slug,
|
|
||||||
url: release.network_url,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
if (movie && deep) {
|
|
||||||
curatedRelease.movie = await curateMovie(movie, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
return curatedRelease;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function curateRelease(release) {
|
async function curateRelease(release) {
|
||||||
if (release.type === 'movie') {
|
const [actors, tags, media] = await Promise.all([
|
||||||
return curateMovie(release);
|
knex('actors_associated')
|
||||||
}
|
.select(
|
||||||
|
'actors.id', 'actors.name', 'actors.gender', 'actors.slug', 'actors.birthdate',
|
||||||
|
'birth_countries.alpha2 as birth_country_alpha2', 'birth_countries.name as birth_country_name', 'birth_countries.alias as birth_country_alias',
|
||||||
|
'media.thumbnail as avatar',
|
||||||
|
)
|
||||||
|
.where({ release_id: release.id })
|
||||||
|
.leftJoin('actors', 'actors.id', 'actors_associated.actor_id')
|
||||||
|
.leftJoin('countries as birth_countries', 'actors.birth_country_alpha2', 'birth_countries.alpha2')
|
||||||
|
.leftJoin('media', (builder) => {
|
||||||
|
builder
|
||||||
|
.on('media.target_id', 'actors.id')
|
||||||
|
.andOnVal('media.domain', 'actors')
|
||||||
|
.andOnVal('media.index', '0');
|
||||||
|
})
|
||||||
|
.orderBy('actors.gender'),
|
||||||
|
knex('tags_associated')
|
||||||
|
.select('tags.name', 'tags.slug')
|
||||||
|
.where({
|
||||||
|
domain: 'releases',
|
||||||
|
target_id: release.id,
|
||||||
|
})
|
||||||
|
.leftJoin('tags', 'tags.id', 'tags_associated.tag_id')
|
||||||
|
.orderBy('tags.priority', 'desc'),
|
||||||
|
knex('media')
|
||||||
|
.where({
|
||||||
|
target_id: release.id,
|
||||||
|
domain: 'releases',
|
||||||
|
})
|
||||||
|
.orderBy(['role', 'index']),
|
||||||
|
]);
|
||||||
|
|
||||||
return curateScene(release);
|
const curatedRelease = {
|
||||||
|
id: release.id,
|
||||||
|
type: release.type,
|
||||||
|
title: release.title,
|
||||||
|
date: release.date,
|
||||||
|
dateAdded: release.created_at,
|
||||||
|
description: release.description,
|
||||||
|
url: release.url,
|
||||||
|
shootId: release.shoot_id,
|
||||||
|
entryId: release.entry_id,
|
||||||
|
actors: actors.map(actor => ({
|
||||||
|
id: actor.id,
|
||||||
|
slug: actor.slug,
|
||||||
|
name: actor.name,
|
||||||
|
gender: actor.gender,
|
||||||
|
birthdate: actor.birthdate,
|
||||||
|
age: moment().diff(actor.birthdate, 'years'),
|
||||||
|
ageThen: moment(release.date).diff(actor.birthdate, 'years'),
|
||||||
|
avatar: actor.avatar,
|
||||||
|
origin: actor.birth_country_alpha2
|
||||||
|
? {
|
||||||
|
country: {
|
||||||
|
name: actor.birth_country_alias,
|
||||||
|
alpha2: actor.birth_country_alpha2,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
: null,
|
||||||
|
})),
|
||||||
|
director: release.director,
|
||||||
|
tags,
|
||||||
|
duration: release.duration,
|
||||||
|
photos: media.filter(item => item.role === 'photo'),
|
||||||
|
poster: media.filter(item => item.role === 'poster')[0],
|
||||||
|
covers: media.filter(item => item.role === 'cover'),
|
||||||
|
trailer: media.filter(item => item.role === 'trailer')[0],
|
||||||
|
site: {
|
||||||
|
id: release.site_id,
|
||||||
|
name: release.site_name,
|
||||||
|
independent: release.site_parameters
|
||||||
|
? (JSON.parse(release.site_parameters).independent || false)
|
||||||
|
: false,
|
||||||
|
slug: release.site_slug,
|
||||||
|
url: release.site_url,
|
||||||
|
},
|
||||||
|
studio: release.studio_id
|
||||||
|
? {
|
||||||
|
id: release.studio_id,
|
||||||
|
name: release.studio_name,
|
||||||
|
slug: release.studio_slug,
|
||||||
|
url: release.studio_url,
|
||||||
|
}
|
||||||
|
: null,
|
||||||
|
network: {
|
||||||
|
id: release.network_id,
|
||||||
|
name: release.network_name,
|
||||||
|
description: release.network_description,
|
||||||
|
slug: release.network_slug,
|
||||||
|
url: release.network_url,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
return curatedRelease;
|
||||||
}
|
}
|
||||||
|
|
||||||
function curateReleases(releases) {
|
function curateReleases(releases) {
|
||||||
|
@ -274,7 +153,7 @@ function curateReleases(releases) {
|
||||||
|
|
||||||
async function attachChannelSite(release) {
|
async function attachChannelSite(release) {
|
||||||
if (!release.site.isFallback) {
|
if (!release.site.isFallback) {
|
||||||
return release.site;
|
return release;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!release.channel) {
|
if (!release.channel) {
|
||||||
|
|
Loading…
Reference in New Issue