Added network page and sites back-end. Split release tiles into own component.
This commit is contained in:
@@ -41,18 +41,21 @@ async function curateRelease(release) {
|
||||
site: {
|
||||
id: release.site_id,
|
||||
name: release.site_name,
|
||||
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,
|
||||
slug: release.network_slug,
|
||||
url: release.network_url,
|
||||
},
|
||||
};
|
||||
@@ -63,14 +66,48 @@ function curateReleases(releases) {
|
||||
}
|
||||
|
||||
async function fetchReleases(releaseId) {
|
||||
// const thumbnails = await fs.readdir(path.join(config.thumbnailPath, release.site.id.toString(), release.id.toString()));
|
||||
|
||||
const releases = await knex('releases')
|
||||
.where(releaseId ? { 'releases.id': releaseId } : {})
|
||||
.select(
|
||||
'releases.*', 'sites.name as site_name', 'sites.url as site_url', 'sites.network_id',
|
||||
'studios.name as studio_name', 'studios.url as studio_url',
|
||||
'networks.name as network_name', 'networks.url as network_url',
|
||||
'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',
|
||||
)
|
||||
.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(
|
||||
'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',
|
||||
)
|
||||
.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(
|
||||
'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',
|
||||
)
|
||||
.leftJoin('sites', 'releases.site_id', 'sites.id')
|
||||
.leftJoin('studios', 'releases.studio_id', 'studios.id')
|
||||
@@ -83,4 +120,6 @@ async function fetchReleases(releaseId) {
|
||||
|
||||
module.exports = {
|
||||
fetchReleases,
|
||||
fetchSiteReleases,
|
||||
fetchNetworkReleases,
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
'use strict';
|
||||
|
||||
const { fetchReleases } = require('../releases');
|
||||
const { fetchReleases, fetchNetworkReleases, fetchSiteReleases } = require('../releases');
|
||||
|
||||
async function fetchReleasesApi(req, res) {
|
||||
const releases = await fetchReleases(req.params.releaseId);
|
||||
@@ -8,6 +8,26 @@ async function fetchReleasesApi(req, res) {
|
||||
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;
|
||||
|
||||
const releases = await fetchNetworkReleases(networkId, networkSlug);
|
||||
|
||||
res.send(releases);
|
||||
}
|
||||
|
||||
async function fetchSiteReleasesApi(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 releases = await fetchSiteReleases(siteId, siteSlug);
|
||||
|
||||
res.send(releases);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
fetchReleases: fetchReleasesApi,
|
||||
fetchNetworkReleases: fetchNetworkReleasesApi,
|
||||
fetchSiteReleases: fetchSiteReleasesApi,
|
||||
};
|
||||
|
||||
@@ -6,7 +6,9 @@ const express = require('express');
|
||||
const Router = require('express-promise-router');
|
||||
const bodyParser = require('body-parser');
|
||||
|
||||
const { fetchReleases } = require('./releases');
|
||||
const { fetchReleases, fetchNetworkReleases, fetchSiteReleases } = require('./releases');
|
||||
const { fetchNetworks, fetchNetworksFromReleases } = require('./networks');
|
||||
const { fetchSites } = require('./sites');
|
||||
|
||||
function initServer() {
|
||||
const app = express();
|
||||
@@ -18,6 +20,15 @@ function initServer() {
|
||||
|
||||
router.get('/api/releases', fetchReleases);
|
||||
router.get('/api/releases/:releaseId', fetchReleases);
|
||||
router.get('/api/releases/networks', fetchNetworksFromReleases);
|
||||
|
||||
router.get('/api/networks', fetchNetworks);
|
||||
router.get('/api/networks/:networkId', fetchNetworks);
|
||||
router.get('/api/networks/:networkId/releases', fetchNetworkReleases);
|
||||
|
||||
router.get('/api/sites', fetchSites);
|
||||
router.get('/api/sites/:siteId', fetchSites);
|
||||
router.get('/api/sites/:siteId/releases', fetchSiteReleases);
|
||||
|
||||
router.get('*', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, '../../public/index.html'));
|
||||
|
||||
Reference in New Issue
Block a user