route.ts
基本信息
- 类型: API 路由
- 路径:
./src/app/api/leaderboard/route.ts - 路由:
/api/leaderboard
概述
用户排行榜接口。根据 Prompt 获得的投票数统计用户排名,支持不同时间周期筛选。
HTTP 方法
- GET: 获取排行榜数据
Query 参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| period | string | 否 | 时间周期: all, month, week,默认 all |
缓存策略
使用 Next.js unstable_cache 缓存:
- 缓存标签:
leaderboard - 缓存时间: 1 小时 (3600 秒)
响应
成功 (200)
{
"period": "week",
"leaderboard": [
{
"id": "user_id",
"name": "用户名称",
"username": "username",
"avatar": "https://...",
"totalUpvotes": 150,
"promptCount": 10
}
]
}
错误 (500)
{
"error": "server_error",
"message": "Something went wrong"
}
排行榜算法
- 根据时间周期筛选投票记录
- 按 Prompt 作者聚合投票数
- 获取投票数前 50 的用户
- 如果少于 10 个用户,补充 Prompt 数量最多的用户
时间周期
- all: 所有时间
- week: 过去 7 天
- month: 过去 30 天
依赖
next/server- Next.js 服务器组件next/cache- 缓存@/lib/db- Prisma 数据库客户端
权限
- 公开访问
注意事项
- 只统计公开且未删除的 Prompt
- 缓存每小时更新一次
- 最少返回 10 个用户(如果数据足够)