Added actors page. Added site logos with overview on network page.
This commit is contained in:
40
src/actors.js
Normal file
40
src/actors.js
Normal file
@@ -0,0 +1,40 @@
|
||||
'use strict';
|
||||
|
||||
const knex = require('./knex');
|
||||
|
||||
async function curateActor(actor) {
|
||||
const aliases = await knex('actors')
|
||||
.where({ alias_for: actor.id });
|
||||
|
||||
return {
|
||||
id: actor.id,
|
||||
name: actor.name,
|
||||
description: actor.description,
|
||||
birthdate: actor.birthdate && new Date(actor.birthdate),
|
||||
country: actor.country_alpha2,
|
||||
city: actor.city,
|
||||
ethnicity: actor.ethnicity,
|
||||
height: actor.height,
|
||||
boobSize: actor.boobs_size,
|
||||
boobsNatural: actor.boobs_natural,
|
||||
aliases: aliases.map(({ name }) => name),
|
||||
slug: actor.slug,
|
||||
};
|
||||
}
|
||||
|
||||
function curateActors(releases) {
|
||||
return Promise.all(releases.map(async release => curateActor(release)));
|
||||
}
|
||||
|
||||
async function fetchActors(actorId, actorSlug) {
|
||||
const releases = await knex('actors')
|
||||
.where({ id: actorId })
|
||||
.orWhere({ slug: actorSlug })
|
||||
.limit(100);
|
||||
|
||||
return curateActors(releases);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
fetchActors,
|
||||
};
|
||||
63
src/networks.js
Normal file
63
src/networks.js
Normal file
@@ -0,0 +1,63 @@
|
||||
'use strict';
|
||||
|
||||
const knex = require('./knex');
|
||||
|
||||
async function curateNetwork(network) {
|
||||
const [sites, studios] = await Promise.all([
|
||||
knex('sites')
|
||||
.where({ network_id: network.id }),
|
||||
knex('studios')
|
||||
.where({ network_id: network.id }),
|
||||
]);
|
||||
|
||||
return {
|
||||
id: network.id,
|
||||
name: network.name,
|
||||
url: network.url,
|
||||
description: network.description,
|
||||
slug: network.slug,
|
||||
sites: sites.map(site => ({
|
||||
id: site.id,
|
||||
name: site.name,
|
||||
url: site.url,
|
||||
description: site.description,
|
||||
slug: site.slug,
|
||||
})),
|
||||
studios: studios.map(studio => ({
|
||||
id: studio.id,
|
||||
name: studio.name,
|
||||
url: studio.url,
|
||||
description: studio.description,
|
||||
slug: studio.slug,
|
||||
})),
|
||||
};
|
||||
}
|
||||
|
||||
function curateNetworks(releases) {
|
||||
return Promise.all(releases.map(async release => curateNetwork(release)));
|
||||
}
|
||||
|
||||
async function fetchNetworks(networkId, networkSlug) {
|
||||
const releases = await knex('networks')
|
||||
.where({ id: networkId })
|
||||
.orWhere({ slug: networkSlug })
|
||||
.limit(100);
|
||||
|
||||
return curateNetworks(releases);
|
||||
}
|
||||
|
||||
async function fetchNetworksFromReleases() {
|
||||
const releases = await knex('releases')
|
||||
.select('site_id', '')
|
||||
.leftJoin('sites', 'sites.id', 'releases.site_id')
|
||||
.leftJoin('networks', 'networks.id', 'sites.network_id')
|
||||
.groupBy('networks.id')
|
||||
.limit(100);
|
||||
|
||||
return curateNetworks(releases);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
fetchNetworks,
|
||||
fetchNetworksFromReleases,
|
||||
};
|
||||
@@ -69,7 +69,8 @@ async function fetchReleases(releaseId) {
|
||||
const releases = await knex('releases')
|
||||
.where(releaseId ? { 'releases.id': releaseId } : {})
|
||||
.select(
|
||||
'releases.*', 'sites.name as site_name', 'sites.slug as site_slug', 'sites.url as site_url', 'sites.network_id',
|
||||
'releases.*',
|
||||
'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',
|
||||
)
|
||||
@@ -87,7 +88,8 @@ async function fetchSiteReleases(siteId, siteSlug) {
|
||||
.where({ 'sites.id': siteId })
|
||||
.orWhere({ 'sites.slug': siteSlug })
|
||||
.select(
|
||||
'releases.*', 'sites.name as site_name', 'sites.slug as site_slug', 'sites.url as site_url', 'sites.network_id',
|
||||
'releases.*',
|
||||
'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',
|
||||
)
|
||||
@@ -105,7 +107,8 @@ async function fetchNetworkReleases(networkId, networkSlug) {
|
||||
.where({ 'networks.id': networkId })
|
||||
.orWhere({ 'networks.slug': networkSlug })
|
||||
.select(
|
||||
'releases.*', 'sites.name as site_name', 'sites.slug as site_slug', 'sites.url as site_url', 'sites.network_id',
|
||||
'releases.*',
|
||||
'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',
|
||||
)
|
||||
@@ -118,8 +121,31 @@ async function fetchNetworkReleases(networkId, networkSlug) {
|
||||
return curateReleases(releases);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
fetchReleases,
|
||||
fetchActorReleases,
|
||||
fetchSiteReleases,
|
||||
fetchNetworkReleases,
|
||||
};
|
||||
|
||||
50
src/sites.js
Normal file
50
src/sites.js
Normal file
@@ -0,0 +1,50 @@
|
||||
'use strict';
|
||||
|
||||
const knex = require('./knex');
|
||||
|
||||
async function curateSite(site) {
|
||||
const network = await knex('network').where({ id: site.network_id });
|
||||
|
||||
return {
|
||||
id: site.id,
|
||||
name: site.name,
|
||||
url: site.url,
|
||||
description: site.description,
|
||||
slug: site.slug,
|
||||
network: {
|
||||
id: network.id,
|
||||
name: network.name,
|
||||
url: network.url,
|
||||
description: network.description,
|
||||
slug: network.slug,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
function curateSites(releases) {
|
||||
return Promise.all(releases.map(async site => curateSite(site)));
|
||||
}
|
||||
|
||||
async function fetchSites(siteId, siteSlug) {
|
||||
const releases = await knex('sites')
|
||||
.where({ id: siteId })
|
||||
.orWhere({ slug: siteSlug })
|
||||
.limit(100);
|
||||
|
||||
return curateSites(releases);
|
||||
}
|
||||
|
||||
async function fetchSitesFromReleases() {
|
||||
const releases = await knex('releases')
|
||||
.select('site_id', '')
|
||||
.leftJoin('sites', 'sites.id', 'releases.site_id')
|
||||
.groupBy('sites.id')
|
||||
.limit(100);
|
||||
|
||||
return curateSites(releases);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
fetchSites,
|
||||
fetchSitesFromReleases,
|
||||
};
|
||||
16
src/web/actors.js
Normal file
16
src/web/actors.js
Normal file
@@ -0,0 +1,16 @@
|
||||
'use strict';
|
||||
|
||||
const { fetchActors } = require('../actors');
|
||||
|
||||
async function fetchActorsApi(req, res) {
|
||||
const actorId = typeof req.params.actorId === 'number' ? req.params.actorId : null;
|
||||
const actorSlug = typeof req.params.actorId === 'string' ? req.params.actorId : null;
|
||||
|
||||
const actors = await fetchActors(actorId, actorSlug);
|
||||
|
||||
res.send(actors);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
fetchActors: fetchActorsApi,
|
||||
};
|
||||
23
src/web/networks.js
Normal file
23
src/web/networks.js
Normal file
@@ -0,0 +1,23 @@
|
||||
'use strict';
|
||||
|
||||
const { fetchNetworks, fetchNetworksFromReleases } = require('../networks');
|
||||
|
||||
async function fetchNetworksApi(req, res) {
|
||||
const networkId = typeof req.params.networkId === 'number' ? req.params.networkId : null;
|
||||
const networkSlug = typeof req.params.networkId === 'string' ? req.params.networkId : null;
|
||||
|
||||
const networks = await fetchNetworks(networkId, networkSlug);
|
||||
|
||||
res.send(networks);
|
||||
}
|
||||
|
||||
async function fetchNetworksFromReleasesApi(req, res) {
|
||||
const networks = await fetchNetworksFromReleases();
|
||||
|
||||
res.send(networks);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
fetchNetworks: fetchNetworksApi,
|
||||
fetchNetworksFromReleases: fetchNetworksFromReleasesApi,
|
||||
};
|
||||
@@ -1,6 +1,11 @@
|
||||
'use strict';
|
||||
|
||||
const { fetchReleases, fetchNetworkReleases, fetchSiteReleases } = require('../releases');
|
||||
const {
|
||||
fetchReleases,
|
||||
fetchActorReleases,
|
||||
fetchNetworkReleases,
|
||||
fetchSiteReleases,
|
||||
} = require('../releases');
|
||||
|
||||
async function fetchReleasesApi(req, res) {
|
||||
const releases = await fetchReleases(req.params.releaseId);
|
||||
@@ -8,6 +13,15 @@ async function fetchReleasesApi(req, res) {
|
||||
res.send(releases);
|
||||
}
|
||||
|
||||
async function fetchActorReleasesApi(req, res) {
|
||||
const actorId = Number.isInteger(Number(req.params.actorId)) ? Number(req.params.actorId) : null;
|
||||
const actorSlug = typeof req.params.actorId === 'string' ? req.params.actorId : null;
|
||||
|
||||
const releases = await fetchActorReleases(actorId, actorSlug);
|
||||
|
||||
res.send(releases);
|
||||
}
|
||||
|
||||
async function fetchNetworkReleasesApi(req, res) {
|
||||
const networkId = typeof req.params.networkId === 'number' ? req.params.networkId : null;
|
||||
const networkSlug = typeof req.params.networkId === 'string' ? req.params.networkId : null;
|
||||
@@ -28,6 +42,7 @@ async function fetchSiteReleasesApi(req, res) {
|
||||
|
||||
module.exports = {
|
||||
fetchReleases: fetchReleasesApi,
|
||||
fetchActorReleases: fetchActorReleasesApi,
|
||||
fetchNetworkReleases: fetchNetworkReleasesApi,
|
||||
fetchSiteReleases: fetchSiteReleasesApi,
|
||||
};
|
||||
|
||||
@@ -6,8 +6,19 @@ const express = require('express');
|
||||
const Router = require('express-promise-router');
|
||||
const bodyParser = require('body-parser');
|
||||
|
||||
const { fetchReleases, fetchNetworkReleases, fetchSiteReleases } = require('./releases');
|
||||
const { fetchNetworks, fetchNetworksFromReleases } = require('./networks');
|
||||
const {
|
||||
fetchReleases,
|
||||
fetchActorReleases,
|
||||
fetchNetworkReleases,
|
||||
fetchSiteReleases,
|
||||
} = require('./releases');
|
||||
|
||||
const {
|
||||
fetchNetworks,
|
||||
fetchNetworksFromReleases,
|
||||
} = require('./networks');
|
||||
|
||||
const { fetchActors } = require('./actors');
|
||||
const { fetchSites } = require('./sites');
|
||||
|
||||
function initServer() {
|
||||
@@ -16,12 +27,21 @@ function initServer() {
|
||||
|
||||
router.use('/media', express.static(config.photoPath));
|
||||
router.use(express.static('public'));
|
||||
|
||||
router.use('/img', (req, res) => {
|
||||
res.status(404).send();
|
||||
});
|
||||
|
||||
router.use(bodyParser.json({ strict: false }));
|
||||
|
||||
router.get('/api/releases', fetchReleases);
|
||||
router.get('/api/releases/:releaseId', fetchReleases);
|
||||
router.get('/api/releases/networks', fetchNetworksFromReleases);
|
||||
|
||||
router.get('/api/actors', fetchActors);
|
||||
router.get('/api/actors/:actorId', fetchActors);
|
||||
router.get('/api/actors/:actorId/releases', fetchActorReleases);
|
||||
|
||||
router.get('/api/networks', fetchNetworks);
|
||||
router.get('/api/networks/:networkId', fetchNetworks);
|
||||
router.get('/api/networks/:networkId/releases', fetchNetworkReleases);
|
||||
|
||||
23
src/web/sites.js
Normal file
23
src/web/sites.js
Normal file
@@ -0,0 +1,23 @@
|
||||
'use strict';
|
||||
|
||||
const { fetchSites, fetchSitesFromReleases } = require('../networks');
|
||||
|
||||
async function fetchSitesApi(req, res) {
|
||||
const siteId = typeof req.params.siteId === 'number' ? req.params.siteId : null;
|
||||
const siteSlug = typeof req.params.siteId === 'string' ? req.params.siteId : null;
|
||||
|
||||
const sites = await fetchSites(siteId, siteSlug);
|
||||
|
||||
res.send(sites);
|
||||
}
|
||||
|
||||
async function fetchSitesFromReleasesApi(req, res) {
|
||||
const sites = await fetchSitesFromReleases();
|
||||
|
||||
res.send(sites);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
fetchSites: fetchSitesApi,
|
||||
fetchSitesFromReleases: fetchSitesFromReleasesApi,
|
||||
};
|
||||
Reference in New Issue
Block a user