diff --git a/api/resolvers/growth.js b/api/resolvers/growth.js
index 70681c92..0bdd4adf 100644
--- a/api/resolvers/growth.js
+++ b/api/resolvers/growth.js
@@ -121,6 +121,39 @@ export default {
FROM ${viewGroup(range, 'stacking_growth')}
GROUP BY time
ORDER BY time ASC`, ...range)
+ },
+ itemGrowthSubs: async (parent, { when, to, from, sub }, { models }) => {
+ const range = whenRange(when, from, to)
+
+ const subExists = await models.sub.findUnique({ where: { name: sub } })
+ if (!subExists) throw new Error('Sub not found')
+
+ return await models.$queryRawUnsafe(`
+ SELECT date_trunc('${timeUnitForRange(range)}', t) at time zone 'America/Chicago' as time, json_build_array(
+ json_build_object('name', 'posts', 'value', coalesce(sum(posts),0)),
+ json_build_object('name', 'comments', 'value', coalesce(sum(comments),0))
+ ) AS data
+ FROM ${viewGroup(range, 'sub_stats')}
+ WHERE sub_name = $3
+ GROUP BY time
+ ORDER BY time ASC`, ...range, sub)
+ },
+ revenueGrowthSubs: async (parent, { when, to, from, sub }, { models }) => {
+ const range = whenRange(when, from, to)
+
+ const subExists = await models.sub.findUnique({ where: { name: sub } })
+ if (!subExists) throw new Error('Sub not found')
+
+ return await models.$queryRawUnsafe(`
+ SELECT date_trunc('${timeUnitForRange(range)}', t) at time zone 'America/Chicago' as time, json_build_array(
+ json_build_object('name', 'revenue', 'value', coalesce(sum(msats_revenue/1000),0)),
+ json_build_object('name', 'stacking', 'value', coalesce(sum(msats_stacked/1000),0)),
+ json_build_object('name', 'spending', 'value', coalesce(sum(msats_spent/1000),0))
+ ) AS data
+ FROM ${viewGroup(range, 'sub_stats')}
+ WHERE sub_name = $3
+ GROUP BY time
+ ORDER BY time ASC`, ...range, sub)
}
}
}
diff --git a/api/typeDefs/growth.js b/api/typeDefs/growth.js
index f37dd414..66e35f7c 100644
--- a/api/typeDefs/growth.js
+++ b/api/typeDefs/growth.js
@@ -13,6 +13,8 @@ export default gql`
spenderGrowth(when: String, from: String, to: String): [TimeData!]!
stackingGrowth(when: String, from: String, to: String): [TimeData!]!
stackerGrowth(when: String, from: String, to: String): [TimeData!]!
+ itemGrowthSubs(when: String, from: String, to: String, sub: String): [TimeData!]!
+ revenueGrowthSubs(when: String, from: String, to: String, sub: String): [TimeData!]!
}
type TimeData {
diff --git a/components/footer.js b/components/footer.js
index beeda22c..bcd48da1 100644
--- a/components/footer.js
+++ b/components/footer.js
@@ -173,7 +173,7 @@ export default function Footer ({ links = true }) {