From 75ac874a2d02e308d6a63f4925e3f9b2c3377b8d Mon Sep 17 00:00:00 2001 From: "IceHe.xyz" Date: Mon, 13 Jun 2022 16:18:16 +0800 Subject: [PATCH] feat(core): dau curve contains 0 count points (#1105) --- packages/core/src/routes/dashboard.test.ts | 48 ++++++++++++++++------ packages/core/src/routes/dashboard.ts | 17 +++++--- 2 files changed, 47 insertions(+), 18 deletions(-) diff --git a/packages/core/src/routes/dashboard.test.ts b/packages/core/src/routes/dashboard.test.ts index 607926674..1583dec55 100644 --- a/packages/core/src/routes/dashboard.test.ts +++ b/packages/core/src/routes/dashboard.test.ts @@ -188,19 +188,41 @@ describe('dashboardRoutes', () => { const response = await logRequest.get('/dashboard/users/active'); expect(response.status).toEqual(200); expect(response.body).toEqual({ - dauCurve: mockDailyActiveUserCounts, - dau: { - count: 530, - delta: 1, - }, - wau: { - count: 1000, - delta: 0, - }, - mau: { - count: 1000, - delta: 0, - }, + dauCurve: [ + { date: '2022-05-01', count: 501 }, + { date: '2022-05-02', count: 0 }, + { date: '2022-05-03', count: 0 }, + { date: '2022-05-04', count: 0 }, + { date: '2022-05-05', count: 0 }, + { date: '2022-05-06', count: 0 }, + { date: '2022-05-07', count: 0 }, + { date: '2022-05-08', count: 0 }, + { date: '2022-05-09', count: 0 }, + { date: '2022-05-10', count: 0 }, + { date: '2022-05-11', count: 0 }, + { date: '2022-05-12', count: 0 }, + { date: '2022-05-13', count: 0 }, + { date: '2022-05-14', count: 0 }, + { date: '2022-05-15', count: 0 }, + { date: '2022-05-16', count: 0 }, + { date: '2022-05-17', count: 0 }, + { date: '2022-05-18', count: 0 }, + { date: '2022-05-19', count: 0 }, + { date: '2022-05-20', count: 0 }, + { date: '2022-05-21', count: 0 }, + { date: '2022-05-22', count: 0 }, + { date: '2022-05-23', count: 523 }, + { date: '2022-05-24', count: 0 }, + { date: '2022-05-25', count: 0 }, + { date: '2022-05-26', count: 0 }, + { date: '2022-05-27', count: 0 }, + { date: '2022-05-28', count: 0 }, + { date: '2022-05-29', count: 529 }, + { date: '2022-05-30', count: 530 }, + ], + dau: { count: 530, delta: 1 }, + wau: { count: 1000, delta: 0 }, + mau: { count: 1000, delta: 0 }, }); }); }); diff --git a/packages/core/src/routes/dashboard.ts b/packages/core/src/routes/dashboard.ts index 3330c2dfc..abe66e64a 100644 --- a/packages/core/src/routes/dashboard.ts +++ b/packages/core/src/routes/dashboard.ts @@ -14,9 +14,9 @@ import { AuthedRouter } from './types'; const getDateString = (day: Dayjs) => day.format('YYYY-MM-DD'); -const lastTimestampOfDay = (day: Dayjs) => day.endOf('day').valueOf(); +const indices = (length: number) => [...Array.from({ length }).keys()]; -const indicesFrom0To6 = [...Array.from({ length: 7 }).keys()]; +const lastTimestampOfDay = (day: Dayjs) => day.endOf('day').valueOf(); export default function dashboardRoutes(router: T) { router.get('/dashboard/users/total', async (ctx, next) => { @@ -43,10 +43,10 @@ export default function dashboardRoutes(router: T) { const yesterdayNewUserCount = last14DaysNewUserCounts.get(getDateString(yesterday)) ?? 0; const todayDelta = todayNewUserCount - yesterdayNewUserCount; - const last7DaysNewUserCount = indicesFrom0To6 + const last7DaysNewUserCount = indices(7) .map((index) => getDateString(today.subtract(index, 'day'))) .reduce((sum, date) => sum + (last14DaysNewUserCounts.get(date) ?? 0), 0); - const newUserCountFrom13DaysAgoTo7DaysAgo = indicesFrom0To6 + const newUserCountFrom13DaysAgoTo7DaysAgo = indices(7) .map((index) => getDateString(today.subtract(7 + index, 'day'))) .reduce((sum, date) => sum + (last14DaysNewUserCounts.get(date) ?? 0), 0); const last7DaysDelta = last7DaysNewUserCount - newUserCountFrom13DaysAgoTo7DaysAgo; @@ -119,8 +119,15 @@ export default function dashboardRoutes(router: T) { const previousDAU = last30DauCounts.find(({ date }) => date === previousDate)?.count ?? 0; const dau = last30DauCounts.find(({ date }) => date === targetDate)?.count ?? 0; + const dauCurve = indices(30).map((index) => { + const dateString = getDateString(targetDay.subtract(29 - index, 'day')); + const count = last30DauCounts.find(({ date }) => date === dateString)?.count ?? 0; + + return { date: dateString, count }; + }); + ctx.body = { - dauCurve: last30DauCounts, + dauCurve, dau: { count: dau, delta: dau - previousDAU,