PR #24

Merged
pinks merged 11 commits from nameless/eris:pr-main into main 2023-11-17 18:00:14 +00:00
1 changed files with 33 additions and 1 deletions
Showing only changes of commit 602a63f2c9 - Show all commits

View File

@ -2,6 +2,8 @@ import { JsonSchema, jsonType } from "t_rest/server";
import { kvMemoize } from "./kvMemoize.ts";
import { db } from "./db.ts";
import { generationStore } from "./generationStore.ts";
import { hoursToMilliseconds, isSameDay, minutesToMilliseconds } from "date-fns";
import { UTCDateMini } from "date-fns/utc";
export const userDailyStatsSchema = {
type: "object",
@ -19,6 +21,36 @@ export const getUserDailyStats = kvMemoize(
db,
["userDailyStats"],
async (userId: number, year: number, month: number, day: number): Promise<UserDailyStats> => {
throw new Error("Not implemented");
let imageCount = 0;
let pixelCount = 0;
for await (
const generation of generationStore.listBy("fromId", {
before: new Date(new Date(year, month - 1, day).getTime() + 24 * 60 * 60 * 1000),
nameless marked this conversation as resolved Outdated
Outdated
Review

You need to use Date.UTC or UTCDateMini here. Otherwise it will return midnight but in local timezone.

For example:

    after: new Date(Date.UTC(year, month - 1, day)),
    before: new Date(Date.UTC(year, month - 1, day + 1)), // days will overflow into months
You need to use `Date.UTC` or `UTCDateMini` here. Otherwise it will return midnight but in local timezone. For example: ```js after: new Date(Date.UTC(year, month - 1, day)), before: new Date(Date.UTC(year, month - 1, day + 1)), // days will overflow into months ```
after: new Date(year, month - 1, day),
value: userId,
})
) {
imageCount++;
pixelCount += (generation.value.info?.width ?? 0) * (generation.value.info?.height ?? 0);
}
return {
imageCount,
pixelCount,
timestamp: Date.now(),
};
},
{
// expire in 1 minute if was calculated on the same day, otherwise 7-14 days.
expireIn: (result, year, month, day) => {
const requestDate = new UTCDateMini(year, month - 1, day);
const calculatedDate = new UTCDateMini(result.timestamp);
return isSameDay(requestDate, calculatedDate)
? minutesToMilliseconds(1)
: hoursToMilliseconds(24 * 7 + Math.random() * 24 * 7);
},
// should cache if the stats are non-zero
shouldCache: (result) => result.imageCount > 0 || result.pixelCount > 0,
},
);