@dreamy harbor import { unstable_cache } from "next/cache";
import { errorResponse, successResponse } from "@/server/helpers/api";
import { query } from "@/server/database";
import { getNameEffects } from "@/server/utils/get-name-effects";
import { RankingUser } from "@/types";
interface RankingUserRow {
id: number;
username: string;
link: string;
premium: number;
nameColor: string;
nameEffect: string;
name: string;
totalViews: number;
}
export const dynamic = "force-dynamic";
export const revalidate = 3600;
export async function GET(request: Request) {
try {
const topUsers = await query(
WITH recent_views AS ( SELECT b.user_id, COUNT(*) AS totalViews FROM user_views v JOIN biolinks b ON v.biolink_id = b.id WHERE v.created_at >= CURDATE() - INTERVAL 1 DAY AND v.created_at < CURDATE() GROUP BY b.user_id ORDER BY totalViews DESC ) SELECT u.id, u.username, b.link, b.premium, b.name_color AS nameColor, b.name_effect AS nameEffect, COALESCE(b.name, u.username) AS name, recent_views.totalViews FROM recent_views JOIN users u ON recent_views.user_id = u.id JOIN biolinks b ON u.id = b.user_id ORDER BY recent_views.totalViews DESC LIMIT ? OFFSET ? ,
[10, 0]
);
return successResponse({
message: "Successfully fetched trending users.",
data: topUsers.map((row: RankingUserRow, idx: number) =>
format(row, idx, 0)
),
});
} catch (e) {
console.error;
return errorResponse({
message: "Failed to fetch trending users.",
status: 500,
});
}
}
how use unstable_cache here