import { GraphQLError } from 'graphql' import { timeUnitForRange, whenRange } from '@/lib/time' import { viewGroup } from './growth' export default { Query: { referrals: async (parent, { when, from, to }, { models, me }) => { if (!me) { throw new GraphQLError('you must be logged in', { extensions: { code: 'UNAUTHENTICATED' } }) } const range = whenRange(when, from, to) return await models.$queryRawUnsafe(` SELECT date_trunc('${timeUnitForRange(range)}', t) at time zone 'America/Chicago' as time, json_build_array( json_build_object('name', 'referrals', 'value', COALESCE(SUM(referrals), 0)), json_build_object('name', 'one day referrals', 'value', COALESCE(SUM(one_day_referrals), 0)), json_build_object('name', 'referral sats', 'value', FLOOR(COALESCE(SUM(msats_referrals), 0) / 1000.0)), json_build_object('name', 'one day referral sats', 'value', FLOOR(COALESCE(SUM(msats_one_day_referrals), 0) / 1000.0)) ) AS data FROM ${viewGroup(range, 'user_stats')} WHERE id = ${me.id} GROUP BY time ORDER BY time ASC`, ...range) } } }