29 lines
1.1 KiB
JavaScript
29 lines
1.1 KiB
JavaScript
import { timeUnitForRange, whenRange } from '@/lib/time'
|
|
import { viewGroup } from './growth'
|
|
import { GqlAuthenticationError } from '@/lib/error'
|
|
|
|
export default {
|
|
Query: {
|
|
referrals: async (parent, { when, from, to }, { models, me }) => {
|
|
if (!me) {
|
|
throw new GqlAuthenticationError()
|
|
}
|
|
|
|
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)
|
|
}
|
|
}
|
|
}
|