From c88e58344ffc8adec9bb7c2e6a05691eac127d9a Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 25 Jul 2023 23:21:42 -0500 Subject: [PATCH] Improve tag history --- src/controllers/api/trends.ts | 25 +++++++++++++++++++------ src/trends.ts | 15 ++++++++++++--- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/controllers/api/trends.ts b/src/controllers/api/trends.ts index 2590d4c..cadfecf 100644 --- a/src/controllers/api/trends.ts +++ b/src/controllers/api/trends.ts @@ -20,14 +20,27 @@ const trendingTagsController: AppController = (c) => { limit, }); - return c.json(tags.map(({ name }) => ({ + return c.json(tags.map(({ name, uses, accounts }) => ({ name, url: Conf.local(`/tags/${name}`), - history: trends.getTagHistory(name, lastWeek, now).map((history) => ({ - day: String(Math.floor(history.day.getTime() / 1000)), - accounts: String(history.accounts), - uses: String(history.uses), - })), + history: [ + { + day: String(Math.floor(now.getTime() / 1000)), + accounts: String(accounts), + uses: String(uses), + }, + ...trends.getTagHistory({ + tag: name, + since: lastWeek, + until: now, + limit: 6, + offset: 1, + }).map((history) => ({ + day: String(Math.floor(history.day.getTime() / 1000)), + accounts: String(history.accounts), + uses: String(history.uses), + })), + ], }))); }; diff --git a/src/trends.ts b/src/trends.ts index 959d40a..9ae531b 100644 --- a/src/trends.ts +++ b/src/trends.ts @@ -9,6 +9,14 @@ interface GetTrendingTagsOpts { threshold?: number; } +interface GetTagHistoryOpts { + tag: string; + since: Date; + until: Date; + limit?: number; + offset?: number; +} + class TrendsDB { #db: Sqlite; @@ -54,7 +62,7 @@ class TrendsDB { })); } - getTagHistory(tag: string, since: Date, until: Date, limit = 7) { + getTagHistory({ tag, since, until, limit = 7, offset = 0 }: GetTagHistoryOpts) { return this.#db.query( ` SELECT inserted_at, COUNT(DISTINCT pubkey8), COUNT(*) @@ -62,9 +70,10 @@ class TrendsDB { WHERE tag = ? AND inserted_at >= ? AND inserted_at < ? GROUP BY date(inserted_at) ORDER BY date(inserted_at) DESC - LIMIT ?; + LIMIT ? + OFFSET ?; `, - [tag, since, until, limit], + [tag, since, until, limit, offset], ).map((row) => ({ day: new Date(row[0]), accounts: Number(row[1]),