'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, };