traxxx/src/networks.js

71 lines
1.9 KiB
JavaScript
Raw Normal View History

'use strict';
const knex = require('./knex');
const whereOr = require('./utils/where-or');
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,
network: {
id: network.id,
name: network.name,
url: network.url,
description: network.description,
slug: network.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(queryObject) {
const releases = await knex('networks')
.where(builder => whereOr(queryObject, 'networks', builder))
.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,
};