1
mirror of https://github.com/jakejarvis/jarv.is.git synced 2025-11-15 22:10:50 -05:00

fix /api/hits edge caching

This commit is contained in:
2025-03-27 11:43:44 -04:00
parent 0080c4925b
commit 558934284e
2 changed files with 16 additions and 7 deletions

View File

@@ -1,7 +1,8 @@
import { NextResponse } from "next/server";
import redis from "../../../lib/helpers/redis";
export const revalidate = 900; // 15 mins
export const dynamic = "force-static";
export const revalidate = 1800; // 30 mins
export const GET = async (): Promise<
NextResponse<{
@@ -14,12 +15,15 @@ export const GET = async (): Promise<
}>;
}>
> => {
// get all keys (aka slugs)
const slugs = await redis.scan(0, {
count: 50,
type: "string",
// set an arbitrary yet generous upper limit, just in case...
count: 99,
});
// fetch all rows from db sorted by most hits
const data = await Promise.all(
// get the value (number of hits) for each key (the slug of the page) and pair them together
const pages = await Promise.all(
slugs[1].map(async (slug) => {
const hits = (await redis.get(slug)) as number;
return {
@@ -30,14 +34,14 @@ export const GET = async (): Promise<
);
// sort by hits
data.sort((a, b) => b.hits - a.hits);
pages.sort((a, b) => b.hits - a.hits);
// calculate total hits
const total = { hits: 0 };
data.forEach((page) => {
pages.forEach((page) => {
// add these hits to running tally
total.hits += page.hits;
});
return NextResponse.json({ total, pages: data });
return NextResponse.json({ total, pages });
};