'use strict'; const knex = require('./knex'); const whereOr = require('./utils/where-or'); async function curateSite(site) { const parameters = JSON.parse(site.parameters); return { id: site.id, name: site.name, url: site.url, description: site.description, slug: site.slug, independent: !!parameters && parameters.independent, network: { id: site.network_id, name: site.network_name, description: site.network_description, slug: site.network_slug, url: site.network_url, }, }; } function curateSites(sites) { return Promise.all(sites.map(async site => curateSite(site))); } async function fetchSites(queryObject) { const sites = await knex('sites') .where(builder => whereOr(queryObject, 'sites', builder)) .select( 'sites.*', 'networks.name as network_name', 'networks.slug as network_slug', 'networks.url as network_url', 'networks.description as networks_description', ) .leftJoin('networks', 'sites.network_id', 'networks.id') .limit(100); return curateSites(sites); } async function fetchSitesFromReleases() { const sites = await knex('releases') .select('site_id', '') .leftJoin('sites', 'sites.id', 'releases.site_id') .groupBy('sites.id') .limit(100); return curateSites(sites); } module.exports = { fetchSites, fetchSitesFromReleases, };