route.ts

route.ts

基本信息

  • 类型: API 路由
  • 路径: ./src/app/api/leaderboard/route.ts
  • 路由: /api/leaderboard

概述

用户排行榜接口。根据 Prompt 获得的投票数统计用户排名,支持不同时间周期筛选。

HTTP 方法

  • GET: 获取排行榜数据

Query 参数

参数类型必填说明
periodstring时间周期: 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"
}

排行榜算法

  1. 根据时间周期筛选投票记录
  2. 按 Prompt 作者聚合投票数
  3. 获取投票数前 50 的用户
  4. 如果少于 10 个用户,补充 Prompt 数量最多的用户

时间周期

  • all: 所有时间
  • week: 过去 7 天
  • month: 过去 30 天

依赖

  • next/server - Next.js 服务器组件
  • next/cache - 缓存
  • @/lib/db - Prisma 数据库客户端

权限

  • 公开访问

注意事项

  1. 只统计公开且未删除的 Prompt
  2. 缓存每小时更新一次
  3. 最少返回 10 个用户(如果数据足够)
← 返回目录