rwadurian/backend/services/leaderboard-service/docs/API.md

12 KiB
Raw Blame History

Leaderboard Service API 文档

1. 概述

本文档描述 Leaderboard Service 的 RESTful API 接口规范。

1.1 基础信息

属性
Base URL http://localhost:3000
API 版本 v1
数据格式 JSON
字符编码 UTF-8

1.2 认证方式

使用 JWT Bearer Token 认证:

Authorization: Bearer <token>

1.3 通用响应格式

成功响应

{
  "data": { ... },
  "meta": {
    "timestamp": "2024-01-15T10:30:00Z"
  }
}

错误响应

{
  "statusCode": 400,
  "message": "错误描述",
  "error": "Bad Request"
}

2. 健康检查 API

2.1 存活检查

检查服务是否运行。

请求

GET /health

响应

{
  "status": "ok"
}

2.2 就绪检查

检查服务及其依赖是否就绪。

请求

GET /health/ready

响应

{
  "status": "ok",
  "details": {
    "database": "up",
    "redis": "up",
    "kafka": "up"
  }
}

3. 排行榜 API

3.1 获取日榜

获取当日排行榜数据。

请求

GET /leaderboard/daily

查询参数

参数 类型 必填 默认值 描述
limit number 30 返回数量限制 (1-100)
includeVirtual boolean true 是否包含虚拟排名

响应

{
  "type": "DAILY",
  "period": {
    "key": "2024-01-15",
    "startAt": "2024-01-15T00:00:00Z",
    "endAt": "2024-01-15T23:59:59Z"
  },
  "rankings": [
    {
      "displayPosition": 1,
      "userId": "123456789",
      "nickname": "用户A",
      "avatar": "https://...",
      "effectiveScore": 1500,
      "totalTeamPlanting": 2000,
      "maxDirectTeamPlanting": 500,
      "previousRank": 2,
      "rankChange": 1,
      "isVirtual": false
    },
    {
      "displayPosition": 2,
      "userId": null,
      "nickname": "虚拟用户B",
      "avatar": "https://...",
      "effectiveScore": 1400,
      "isVirtual": true
    }
  ],
  "totalCount": 100,
  "lastRefreshedAt": "2024-01-15T10:25:00Z"
}

3.2 获取周榜

获取当周排行榜数据。

请求

GET /leaderboard/weekly

查询参数

同日榜。

响应

{
  "type": "WEEKLY",
  "period": {
    "key": "2024-W03",
    "startAt": "2024-01-15T00:00:00Z",
    "endAt": "2024-01-21T23:59:59Z"
  },
  "rankings": [ ... ]
}

3.3 获取月榜

获取当月排行榜数据。

请求

GET /leaderboard/monthly

查询参数

同日榜。

响应

{
  "type": "MONTHLY",
  "period": {
    "key": "2024-01",
    "startAt": "2024-01-01T00:00:00Z",
    "endAt": "2024-01-31T23:59:59Z"
  },
  "rankings": [ ... ]
}

3.4 获取我的排名

获取当前登录用户的排名信息。

请求

GET /leaderboard/my-rank
Authorization: Bearer <token>

查询参数

参数 类型 必填 默认值 描述
type string DAILY 榜单类型 (DAILY/WEEKLY/MONTHLY)

响应

{
  "userId": "123456789",
  "daily": {
    "rankPosition": 5,
    "displayPosition": 7,
    "effectiveScore": 1200,
    "totalTeamPlanting": 1500,
    "maxDirectTeamPlanting": 300,
    "previousRank": 8,
    "rankChange": 3
  },
  "weekly": {
    "rankPosition": 10,
    "displayPosition": 12,
    "effectiveScore": 8500,
    "previousRank": 15,
    "rankChange": 5
  },
  "monthly": {
    "rankPosition": 25,
    "displayPosition": 30,
    "effectiveScore": 35000,
    "previousRank": null,
    "rankChange": 0
  }
}

3.5 获取指定用户排名

获取指定用户的排名信息(管理员)。

请求

GET /leaderboard/user/:userId
Authorization: Bearer <token>

路径参数

参数 类型 描述
userId string 用户ID

响应

同 "获取我的排名"。


4. 配置管理 API

以下接口需要管理员权限

4.1 获取配置

获取排行榜全局配置。

请求

GET /leaderboard/config
Authorization: Bearer <token>

响应

{
  "configKey": "GLOBAL",
  "dailyEnabled": true,
  "weeklyEnabled": true,
  "monthlyEnabled": true,
  "virtualRankingEnabled": true,
  "virtualAccountCount": 30,
  "displayLimit": 30,
  "refreshIntervalMinutes": 5,
  "updatedAt": "2024-01-15T10:00:00Z"
}

4.2 更新榜单开关

启用或禁用指定类型的排行榜。

请求

POST /leaderboard/config/switch
Authorization: Bearer <token>
Content-Type: application/json

{
  "type": "daily",
  "enabled": false
}

请求体

字段 类型 必填 描述
type string 榜单类型 (daily/weekly/monthly)
enabled boolean 是否启用

响应

{
  "success": true,
  "message": "日榜已禁用",
  "config": { ... }
}

4.3 更新虚拟排名设置

配置虚拟排名功能。

请求

POST /leaderboard/config/virtual-ranking
Authorization: Bearer <token>
Content-Type: application/json

{
  "enabled": true,
  "count": 30
}

请求体

字段 类型 必填 描述
enabled boolean 是否启用虚拟排名
count number 虚拟账户数量 (0-100)

响应

{
  "success": true,
  "message": "虚拟排名设置已更新",
  "config": { ... }
}

4.4 更新显示数量

设置前端显示的排名数量。

请求

POST /leaderboard/config/display-limit
Authorization: Bearer <token>
Content-Type: application/json

{
  "limit": 50
}

请求体

字段 类型 必填 描述
limit number 显示数量 (1-100)

响应

{
  "success": true,
  "message": "显示数量已更新为 50",
  "config": { ... }
}

4.5 更新刷新间隔

设置排行榜自动刷新间隔。

请求

POST /leaderboard/config/refresh-interval
Authorization: Bearer <token>
Content-Type: application/json

{
  "minutes": 10
}

请求体

字段 类型 必填 描述
minutes number 刷新间隔分钟1-60

响应

{
  "success": true,
  "message": "刷新间隔已更新为 10 分钟",
  "config": { ... }
}

4.6 手动刷新排行榜

立即触发排行榜刷新。

请求

POST /leaderboard/config/refresh
Authorization: Bearer <token>
Content-Type: application/json

{
  "type": "DAILY"
}

请求体

字段 类型 必填 描述
type string 榜单类型,为空则刷新全部

响应

{
  "success": true,
  "message": "排行榜刷新已触发",
  "refreshedTypes": ["DAILY"],
  "startedAt": "2024-01-15T10:30:00Z"
}

5. 虚拟账户 API

以下接口需要管理员权限

5.1 获取虚拟账户列表

请求

GET /virtual-accounts
Authorization: Bearer <token>

查询参数

参数 类型 必填 默认值 描述
page number 1 页码
limit number 20 每页数量
type string - 账户类型过滤
isActive boolean - 激活状态过滤

响应

{
  "data": [
    {
      "id": "1",
      "accountType": "RANKING_VIRTUAL",
      "displayName": "虚拟用户A",
      "avatar": "https://...",
      "minScore": 100,
      "maxScore": 500,
      "currentScore": 350,
      "isActive": true,
      "createdAt": "2024-01-01T00:00:00Z",
      "updatedAt": "2024-01-15T10:00:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 30,
    "totalPages": 2
  }
}

5.2 创建虚拟账户

请求

POST /virtual-accounts
Authorization: Bearer <token>
Content-Type: application/json

{
  "accountType": "RANKING_VIRTUAL",
  "displayName": "新虚拟用户",
  "avatar": "https://...",
  "minScore": 100,
  "maxScore": 500
}

请求体

字段 类型 必填 描述
accountType string 账户类型
displayName string 显示名称 (1-100字符)
avatar string 头像URL
minScore number 最小分值
maxScore number 最大分值
provinceCode string 省份代码(省公司用)
cityCode string 城市代码(市公司用)

响应

{
  "id": "31",
  "accountType": "RANKING_VIRTUAL",
  "displayName": "新虚拟用户",
  "isActive": true,
  "createdAt": "2024-01-15T10:30:00Z"
}

5.3 更新虚拟账户

请求

PUT /virtual-accounts/:id
Authorization: Bearer <token>
Content-Type: application/json

{
  "displayName": "更新后的名称",
  "isActive": false
}

响应

{
  "id": "31",
  "displayName": "更新后的名称",
  "isActive": false,
  "updatedAt": "2024-01-15T10:35:00Z"
}

5.4 删除虚拟账户

请求

DELETE /virtual-accounts/:id
Authorization: Bearer <token>

响应

{
  "success": true,
  "message": "虚拟账户已删除"
}

5.5 批量创建虚拟账户

请求

POST /virtual-accounts/batch
Authorization: Bearer <token>
Content-Type: application/json

{
  "count": 10,
  "accountType": "RANKING_VIRTUAL",
  "minScore": 100,
  "maxScore": 1000
}

请求体

字段 类型 必填 描述
count number 创建数量 (1-100)
accountType string 账户类型
minScore number 最小分值
maxScore number 最大分值

响应

{
  "success": true,
  "createdCount": 10,
  "accounts": [ ... ]
}

6. 错误码

状态码 错误码 描述
400 BAD_REQUEST 请求参数错误
401 UNAUTHORIZED 未授权访问
403 FORBIDDEN 无权限访问
404 NOT_FOUND 资源不存在
409 CONFLICT 资源冲突
422 VALIDATION_ERROR 数据验证失败
500 INTERNAL_ERROR 服务器内部错误
503 SERVICE_UNAVAILABLE 服务不可用

错误响应示例

{
  "statusCode": 400,
  "message": "显示数量必须大于0",
  "error": "Bad Request",
  "timestamp": "2024-01-15T10:30:00Z",
  "path": "/leaderboard/config/display-limit"
}

7. Swagger 文档

服务提供在线 API 文档:

URL 描述
/api-docs Swagger UI 界面
/api-docs-json OpenAPI JSON 规范

8. 速率限制

端点类型 限制
公开端点 100 req/min
认证端点 300 req/min
管理端点 60 req/min

超出限制返回 429 Too Many Requests


9. 变更日志

v1.0.0 (2024-01-15)

  • 初始版本发布
  • 支持日榜/周榜/月榜查询
  • 支持虚拟排名功能
  • 支持配置管理
  • 支持虚拟账户 CRUD