# 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 认证: ```http Authorization: Bearer ``` ### 1.3 通用响应格式 **成功响应** ```json { "data": { ... }, "meta": { "timestamp": "2024-01-15T10:30:00Z" } } ``` **错误响应** ```json { "statusCode": 400, "message": "错误描述", "error": "Bad Request" } ``` --- ## 2. 健康检查 API ### 2.1 存活检查 检查服务是否运行。 **请求** ```http GET /health ``` **响应** ```json { "status": "ok" } ``` ### 2.2 就绪检查 检查服务及其依赖是否就绪。 **请求** ```http GET /health/ready ``` **响应** ```json { "status": "ok", "details": { "database": "up", "redis": "up", "kafka": "up" } } ``` --- ## 3. 排行榜 API ### 3.1 获取日榜 获取当日排行榜数据。 **请求** ```http GET /leaderboard/daily ``` **查询参数** | 参数 | 类型 | 必填 | 默认值 | 描述 | |------|------|------|--------|------| | limit | number | 否 | 30 | 返回数量限制 (1-100) | | includeVirtual | boolean | 否 | true | 是否包含虚拟排名 | **响应** ```json { "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 获取周榜 获取当周排行榜数据。 **请求** ```http GET /leaderboard/weekly ``` **查询参数** 同日榜。 **响应** ```json { "type": "WEEKLY", "period": { "key": "2024-W03", "startAt": "2024-01-15T00:00:00Z", "endAt": "2024-01-21T23:59:59Z" }, "rankings": [ ... ] } ``` ### 3.3 获取月榜 获取当月排行榜数据。 **请求** ```http GET /leaderboard/monthly ``` **查询参数** 同日榜。 **响应** ```json { "type": "MONTHLY", "period": { "key": "2024-01", "startAt": "2024-01-01T00:00:00Z", "endAt": "2024-01-31T23:59:59Z" }, "rankings": [ ... ] } ``` ### 3.4 获取我的排名 获取当前登录用户的排名信息。 **请求** ```http GET /leaderboard/my-rank Authorization: Bearer ``` **查询参数** | 参数 | 类型 | 必填 | 默认值 | 描述 | |------|------|------|--------|------| | type | string | 否 | DAILY | 榜单类型 (DAILY/WEEKLY/MONTHLY) | **响应** ```json { "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 获取指定用户排名 获取指定用户的排名信息(管理员)。 **请求** ```http GET /leaderboard/user/:userId Authorization: Bearer ``` **路径参数** | 参数 | 类型 | 描述 | |------|------|------| | userId | string | 用户ID | **响应** 同 "获取我的排名"。 --- ## 4. 配置管理 API > 以下接口需要管理员权限 ### 4.1 获取配置 获取排行榜全局配置。 **请求** ```http GET /leaderboard/config Authorization: Bearer ``` **响应** ```json { "configKey": "GLOBAL", "dailyEnabled": true, "weeklyEnabled": true, "monthlyEnabled": true, "virtualRankingEnabled": true, "virtualAccountCount": 30, "displayLimit": 30, "refreshIntervalMinutes": 5, "updatedAt": "2024-01-15T10:00:00Z" } ``` ### 4.2 更新榜单开关 启用或禁用指定类型的排行榜。 **请求** ```http POST /leaderboard/config/switch Authorization: Bearer Content-Type: application/json { "type": "daily", "enabled": false } ``` **请求体** | 字段 | 类型 | 必填 | 描述 | |------|------|------|------| | type | string | 是 | 榜单类型 (daily/weekly/monthly) | | enabled | boolean | 是 | 是否启用 | **响应** ```json { "success": true, "message": "日榜已禁用", "config": { ... } } ``` ### 4.3 更新虚拟排名设置 配置虚拟排名功能。 **请求** ```http POST /leaderboard/config/virtual-ranking Authorization: Bearer Content-Type: application/json { "enabled": true, "count": 30 } ``` **请求体** | 字段 | 类型 | 必填 | 描述 | |------|------|------|------| | enabled | boolean | 是 | 是否启用虚拟排名 | | count | number | 是 | 虚拟账户数量 (0-100) | **响应** ```json { "success": true, "message": "虚拟排名设置已更新", "config": { ... } } ``` ### 4.4 更新显示数量 设置前端显示的排名数量。 **请求** ```http POST /leaderboard/config/display-limit Authorization: Bearer Content-Type: application/json { "limit": 50 } ``` **请求体** | 字段 | 类型 | 必填 | 描述 | |------|------|------|------| | limit | number | 是 | 显示数量 (1-100) | **响应** ```json { "success": true, "message": "显示数量已更新为 50", "config": { ... } } ``` ### 4.5 更新刷新间隔 设置排行榜自动刷新间隔。 **请求** ```http POST /leaderboard/config/refresh-interval Authorization: Bearer Content-Type: application/json { "minutes": 10 } ``` **请求体** | 字段 | 类型 | 必填 | 描述 | |------|------|------|------| | minutes | number | 是 | 刷新间隔(分钟,1-60)| **响应** ```json { "success": true, "message": "刷新间隔已更新为 10 分钟", "config": { ... } } ``` ### 4.6 手动刷新排行榜 立即触发排行榜刷新。 **请求** ```http POST /leaderboard/config/refresh Authorization: Bearer Content-Type: application/json { "type": "DAILY" } ``` **请求体** | 字段 | 类型 | 必填 | 描述 | |------|------|------|------| | type | string | 否 | 榜单类型,为空则刷新全部 | **响应** ```json { "success": true, "message": "排行榜刷新已触发", "refreshedTypes": ["DAILY"], "startedAt": "2024-01-15T10:30:00Z" } ``` --- ## 5. 虚拟账户 API > 以下接口需要管理员权限 ### 5.1 获取虚拟账户列表 **请求** ```http GET /virtual-accounts Authorization: Bearer ``` **查询参数** | 参数 | 类型 | 必填 | 默认值 | 描述 | |------|------|------|--------|------| | page | number | 否 | 1 | 页码 | | limit | number | 否 | 20 | 每页数量 | | type | string | 否 | - | 账户类型过滤 | | isActive | boolean | 否 | - | 激活状态过滤 | **响应** ```json { "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 创建虚拟账户 **请求** ```http POST /virtual-accounts Authorization: Bearer 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 | 否 | 城市代码(市公司用)| **响应** ```json { "id": "31", "accountType": "RANKING_VIRTUAL", "displayName": "新虚拟用户", "isActive": true, "createdAt": "2024-01-15T10:30:00Z" } ``` ### 5.3 更新虚拟账户 **请求** ```http PUT /virtual-accounts/:id Authorization: Bearer Content-Type: application/json { "displayName": "更新后的名称", "isActive": false } ``` **响应** ```json { "id": "31", "displayName": "更新后的名称", "isActive": false, "updatedAt": "2024-01-15T10:35:00Z" } ``` ### 5.4 删除虚拟账户 **请求** ```http DELETE /virtual-accounts/:id Authorization: Bearer ``` **响应** ```json { "success": true, "message": "虚拟账户已删除" } ``` ### 5.5 批量创建虚拟账户 **请求** ```http POST /virtual-accounts/batch Authorization: Bearer Content-Type: application/json { "count": 10, "accountType": "RANKING_VIRTUAL", "minScore": 100, "maxScore": 1000 } ``` **请求体** | 字段 | 类型 | 必填 | 描述 | |------|------|------|------| | count | number | 是 | 创建数量 (1-100) | | accountType | string | 是 | 账户类型 | | minScore | number | 否 | 最小分值 | | maxScore | number | 否 | 最大分值 | **响应** ```json { "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 | 服务不可用 | **错误响应示例** ```json { "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