Trends: add some useful comments for later
This commit is contained in:
parent
bc3a96eeed
commit
c251b51803
|
@ -15,6 +15,7 @@ const trendingTagsController: AppController = (c) => {
|
||||||
const yesterday = new Date(now.getTime() - Time.days(1));
|
const yesterday = new Date(now.getTime() - Time.days(1));
|
||||||
const lastWeek = new Date(now.getTime() - Time.days(7));
|
const lastWeek = new Date(now.getTime() - Time.days(7));
|
||||||
|
|
||||||
|
/** Most used hashtags within the past 24h. */
|
||||||
const tags = trends.getTrendingTags({
|
const tags = trends.getTrendingTags({
|
||||||
since: yesterday,
|
since: yesterday,
|
||||||
until: now,
|
until: now,
|
||||||
|
@ -25,6 +26,8 @@ const trendingTagsController: AppController = (c) => {
|
||||||
name,
|
name,
|
||||||
url: Conf.local(`/tags/${name}`),
|
url: Conf.local(`/tags/${name}`),
|
||||||
history: [
|
history: [
|
||||||
|
// Use the full 24h query for the current day. Then use `offset: 1` to adjust for this below.
|
||||||
|
// This result is more accurate than what Mastodon returns.
|
||||||
{
|
{
|
||||||
day: String(Math.floor(stripTime(now).getTime() / 1000)),
|
day: String(Math.floor(stripTime(now).getTime() / 1000)),
|
||||||
accounts: String(accounts),
|
accounts: String(accounts),
|
||||||
|
@ -37,6 +40,7 @@ const trendingTagsController: AppController = (c) => {
|
||||||
limit: 6,
|
limit: 6,
|
||||||
offset: 1,
|
offset: 1,
|
||||||
}).map((history) => ({
|
}).map((history) => ({
|
||||||
|
// For some reason, Mastodon wants these to be strings... oh well.
|
||||||
day: String(Math.floor(history.day.getTime() / 1000)),
|
day: String(Math.floor(history.day.getTime() / 1000)),
|
||||||
accounts: String(history.accounts),
|
accounts: String(history.accounts),
|
||||||
uses: String(history.uses),
|
uses: String(history.uses),
|
||||||
|
|
|
@ -44,6 +44,7 @@ class TrendsDB {
|
||||||
cleanup();
|
cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Gets the most used hashtags between the date range. */
|
||||||
getTrendingTags({ since, until, limit = 10, threshold = 3 }: GetTrendingTagsOpts) {
|
getTrendingTags({ since, until, limit = 10, threshold = 3 }: GetTrendingTagsOpts) {
|
||||||
return this.#db.query<string[]>(
|
return this.#db.query<string[]>(
|
||||||
`
|
`
|
||||||
|
@ -63,6 +64,10 @@ class TrendsDB {
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the tag usage count for a specific tag.
|
||||||
|
* It returns an array with counts for each date between the range.
|
||||||
|
*/
|
||||||
getTagHistory({ tag, since, until, limit = 7, offset = 0 }: GetTagHistoryOpts) {
|
getTagHistory({ tag, since, until, limit = 7, offset = 0 }: GetTagHistoryOpts) {
|
||||||
const result = this.#db.query<string[]>(
|
const result = this.#db.query<string[]>(
|
||||||
`
|
`
|
||||||
|
@ -81,11 +86,13 @@ class TrendsDB {
|
||||||
uses: Number(row[2]),
|
uses: Number(row[2]),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
/** Full date range between `since` and `until`. */
|
||||||
const dateRange = generateDateRange(
|
const dateRange = generateDateRange(
|
||||||
new Date(since.getTime() + Time.days(1)),
|
new Date(since.getTime() + Time.days(1)),
|
||||||
new Date(until.getTime() - Time.days(offset)),
|
new Date(until.getTime() - Time.days(offset)),
|
||||||
).reverse();
|
).reverse();
|
||||||
|
|
||||||
|
// Fill in missing dates with 0 usages.
|
||||||
return dateRange.map((day) => {
|
return dateRange.map((day) => {
|
||||||
const data = result.find((item) => item.day.getTime() === day.getTime());
|
const data = result.find((item) => item.day.getTime() === day.getTime());
|
||||||
return data || { day, accounts: 0, uses: 0 };
|
return data || { day, accounts: 0, uses: 0 };
|
||||||
|
|
Loading…
Reference in New Issue