2019-05-06 00:01:57 +00:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
const knex = require('./knex');
|
|
|
|
|
|
|
|
async function curateRelease(release) {
|
2019-09-10 14:48:04 +00:00
|
|
|
const [actors, tags, media] = await Promise.all([
|
|
|
|
knex('actors_associated')
|
|
|
|
.select('actors.id', 'actors.name', 'actors.gender', 'actors.slug')
|
|
|
|
.where({ release_id: release.id })
|
|
|
|
.leftJoin('actors', 'actors.id', 'actors_associated.actor_id'),
|
|
|
|
knex('tags_associated')
|
2019-10-27 23:58:54 +00:00
|
|
|
.select('tags.name', 'tags.slug')
|
2019-09-10 14:48:04 +00:00
|
|
|
.where({ release_id: release.id })
|
|
|
|
.leftJoin('tags', 'tags.id', 'tags_associated.tag_id'),
|
|
|
|
knex('media')
|
|
|
|
.where({ target_id: release.id })
|
|
|
|
.orderBy('role'),
|
|
|
|
]);
|
2019-05-06 21:41:38 +00:00
|
|
|
|
2019-05-06 00:01:57 +00:00
|
|
|
return {
|
|
|
|
id: release.id,
|
|
|
|
title: release.title,
|
|
|
|
date: release.date,
|
2019-11-04 04:47:37 +00:00
|
|
|
dateAdded: release.created_at,
|
2019-05-06 00:01:57 +00:00
|
|
|
description: release.description,
|
|
|
|
url: release.url,
|
|
|
|
shootId: release.shoot_id,
|
|
|
|
entryId: release.entry_id,
|
|
|
|
actors,
|
|
|
|
director: release.director,
|
2019-05-06 21:41:38 +00:00
|
|
|
tags,
|
2019-11-09 00:22:50 +00:00
|
|
|
duration: release.duration,
|
2019-09-25 02:52:58 +00:00
|
|
|
photos: media.filter(item => item.role === 'photo'),
|
|
|
|
poster: media.filter(item => item.role === 'poster')[0],
|
|
|
|
trailer: media.filter(item => item.role === 'trailer')[0],
|
2019-05-06 00:01:57 +00:00
|
|
|
rating: {
|
|
|
|
likes: release.likes,
|
|
|
|
dislikes: release.dislikes,
|
|
|
|
stars: release.stars,
|
|
|
|
},
|
|
|
|
site: {
|
|
|
|
id: release.site_id,
|
|
|
|
name: release.site_name,
|
2019-11-09 03:43:58 +00:00
|
|
|
slug: release.site_slug,
|
2019-05-18 23:34:08 +00:00
|
|
|
url: release.site_url,
|
2019-05-08 03:50:13 +00:00
|
|
|
},
|
2019-10-30 03:45:42 +00:00
|
|
|
studio: release.studio_id
|
|
|
|
? {
|
|
|
|
id: release.studio_id,
|
|
|
|
name: release.studio_name,
|
2019-11-09 03:43:58 +00:00
|
|
|
slug: release.studio_slug,
|
2019-10-30 03:45:42 +00:00
|
|
|
url: release.studio_url,
|
|
|
|
}
|
|
|
|
: null,
|
2019-05-08 03:50:13 +00:00
|
|
|
network: {
|
|
|
|
id: release.network_id,
|
|
|
|
name: release.network_name,
|
2019-11-09 03:43:58 +00:00
|
|
|
slug: release.network_slug,
|
2019-05-08 03:50:13 +00:00
|
|
|
url: release.network_url,
|
2019-05-06 00:01:57 +00:00
|
|
|
},
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
function curateReleases(releases) {
|
|
|
|
return Promise.all(releases.map(async release => curateRelease(release)));
|
|
|
|
}
|
|
|
|
|
2019-05-18 23:34:08 +00:00
|
|
|
async function fetchReleases(releaseId) {
|
2019-05-06 00:01:57 +00:00
|
|
|
const releases = await knex('releases')
|
2019-05-18 23:34:08 +00:00
|
|
|
.where(releaseId ? { 'releases.id': releaseId } : {})
|
2019-10-30 03:45:42 +00:00
|
|
|
.select(
|
2019-11-10 03:20:22 +00:00
|
|
|
'releases.*',
|
|
|
|
'sites.name as site_name', 'sites.slug as site_slug', 'sites.url as site_url', 'sites.network_id',
|
2019-11-09 03:43:58 +00:00
|
|
|
'studios.name as studio_name', 'sites.slug as site_slug', 'studios.url as studio_url',
|
|
|
|
'networks.name as network_name', 'networks.slug as network_slug', 'networks.url as network_url',
|
|
|
|
)
|
|
|
|
.leftJoin('sites', 'releases.site_id', 'sites.id')
|
|
|
|
.leftJoin('studios', 'releases.studio_id', 'studios.id')
|
|
|
|
.leftJoin('networks', 'sites.network_id', 'networks.id')
|
|
|
|
.orderBy([{ column: 'date', order: 'desc' }, { column: 'created_at', order: 'desc' }])
|
|
|
|
.limit(100);
|
|
|
|
|
|
|
|
return curateReleases(releases);
|
|
|
|
}
|
|
|
|
|
|
|
|
async function fetchSiteReleases(siteId, siteSlug) {
|
|
|
|
const releases = await knex('releases')
|
|
|
|
.where({ 'sites.id': siteId })
|
|
|
|
.orWhere({ 'sites.slug': siteSlug })
|
|
|
|
.select(
|
2019-11-10 03:20:22 +00:00
|
|
|
'releases.*',
|
|
|
|
'sites.name as site_name', 'sites.slug as site_slug', 'sites.url as site_url', 'sites.network_id',
|
2019-11-09 03:43:58 +00:00
|
|
|
'studios.name as studio_name', 'sites.slug as site_slug', 'studios.url as studio_url',
|
|
|
|
'networks.name as network_name', 'networks.slug as network_slug', 'networks.url as network_url',
|
|
|
|
)
|
|
|
|
.leftJoin('sites', 'releases.site_id', 'sites.id')
|
|
|
|
.leftJoin('studios', 'releases.studio_id', 'studios.id')
|
|
|
|
.leftJoin('networks', 'sites.network_id', 'networks.id')
|
|
|
|
.orderBy([{ column: 'date', order: 'desc' }, { column: 'created_at', order: 'desc' }])
|
|
|
|
.limit(100);
|
|
|
|
|
|
|
|
return curateReleases(releases);
|
|
|
|
}
|
|
|
|
|
|
|
|
async function fetchNetworkReleases(networkId, networkSlug) {
|
|
|
|
const releases = await knex('releases')
|
|
|
|
.where({ 'networks.id': networkId })
|
|
|
|
.orWhere({ 'networks.slug': networkSlug })
|
|
|
|
.select(
|
2019-11-10 03:20:22 +00:00
|
|
|
'releases.*',
|
|
|
|
'sites.name as site_name', 'sites.slug as site_slug', 'sites.url as site_url', 'sites.network_id',
|
2019-11-09 03:43:58 +00:00
|
|
|
'studios.name as studio_name', 'sites.slug as site_slug', 'studios.url as studio_url',
|
|
|
|
'networks.name as network_name', 'networks.slug as network_slug', 'networks.url as network_url',
|
2019-10-30 03:45:42 +00:00
|
|
|
)
|
2019-05-06 00:01:57 +00:00
|
|
|
.leftJoin('sites', 'releases.site_id', 'sites.id')
|
2019-10-30 03:45:42 +00:00
|
|
|
.leftJoin('studios', 'releases.studio_id', 'studios.id')
|
2019-05-08 03:50:13 +00:00
|
|
|
.leftJoin('networks', 'sites.network_id', 'networks.id')
|
2019-11-04 04:47:37 +00:00
|
|
|
.orderBy([{ column: 'date', order: 'desc' }, { column: 'created_at', order: 'desc' }])
|
2019-05-06 00:01:57 +00:00
|
|
|
.limit(100);
|
|
|
|
|
|
|
|
return curateReleases(releases);
|
|
|
|
}
|
|
|
|
|
2019-11-10 03:20:22 +00:00
|
|
|
async function fetchActorReleases(actorId, actorSlug) {
|
|
|
|
const releases = await knex('actors_associated')
|
|
|
|
.where({ 'actors.id': actorId })
|
|
|
|
.orWhere({ 'actors.slug': actorSlug })
|
|
|
|
.select(
|
|
|
|
'releases.*',
|
|
|
|
'actors.name as actor_name',
|
|
|
|
'sites.name as site_name', 'sites.slug as site_slug', 'sites.url as site_url', 'sites.network_id',
|
|
|
|
'studios.name as studio_name', 'sites.slug as site_slug', 'studios.url as studio_url',
|
|
|
|
'networks.name as network_name', 'networks.slug as network_slug', 'networks.url as network_url',
|
|
|
|
)
|
|
|
|
.leftJoin('releases', 'actors_associated.release_id', 'releases.id')
|
|
|
|
.leftJoin('actors', 'actors_associated.actor_id', 'actors.id')
|
|
|
|
.leftJoin('sites', 'releases.site_id', 'sites.id')
|
|
|
|
.leftJoin('studios', 'releases.studio_id', 'studios.id')
|
|
|
|
.leftJoin('networks', 'sites.network_id', 'networks.id')
|
|
|
|
.orderBy([{ column: 'releases.date', order: 'desc' }, { column: 'releases.created_at', order: 'desc' }])
|
|
|
|
.limit(100);
|
|
|
|
|
|
|
|
return curateReleases(releases);
|
|
|
|
}
|
|
|
|
|
2019-11-11 04:18:28 +00:00
|
|
|
async function fetchTagReleases(tagId, tagSlug) {
|
|
|
|
const releases = await knex('tags_associated')
|
|
|
|
.where({ 'tags.id': tagId })
|
|
|
|
.orWhere({ 'tags.slug': tagSlug })
|
|
|
|
.select(
|
|
|
|
'releases.*',
|
|
|
|
'tags.name as tag_name',
|
|
|
|
'sites.name as site_name', 'sites.slug as site_slug', 'sites.url as site_url', 'sites.network_id',
|
|
|
|
'studios.name as studio_name', 'sites.slug as site_slug', 'studios.url as studio_url',
|
|
|
|
'networks.name as network_name', 'networks.slug as network_slug', 'networks.url as network_url',
|
|
|
|
)
|
|
|
|
.leftJoin('releases', 'tags_associated.release_id', 'releases.id')
|
|
|
|
.leftJoin('tags', 'tags_associated.tag_id', 'tags.id')
|
|
|
|
.leftJoin('sites', 'releases.site_id', 'sites.id')
|
|
|
|
.leftJoin('studios', 'releases.studio_id', 'studios.id')
|
|
|
|
.leftJoin('networks', 'sites.network_id', 'networks.id')
|
|
|
|
.orderBy([{ column: 'releases.date', order: 'desc' }, { column: 'releases.created_at', order: 'desc' }])
|
|
|
|
.limit(100);
|
|
|
|
|
|
|
|
return curateReleases(releases);
|
|
|
|
}
|
|
|
|
|
2019-05-06 00:01:57 +00:00
|
|
|
module.exports = {
|
|
|
|
fetchReleases,
|
2019-11-10 03:20:22 +00:00
|
|
|
fetchActorReleases,
|
2019-11-09 03:43:58 +00:00
|
|
|
fetchSiteReleases,
|
|
|
|
fetchNetworkReleases,
|
2019-11-11 04:18:28 +00:00
|
|
|
fetchTagReleases,
|
2019-05-06 00:01:57 +00:00
|
|
|
};
|