# Apifox 指南:课程资源分享 - 积分与排行榜 更新时间:2025-11-04 - baseURL: `http://localhost:8080` - 鉴权:`Authorization: Bearer `(登录接口获取) ## 环境准备 1. 登录获取 token - POST `/login` - Body: `{ "username":"admin", "password":"admin123" }` - 断言:`code == 200` 且 `data.token` 不为空;保存为环境变量 `token` 2. 预置条件(如需): - 已存在专业与课程(可调用相关管理接口创建或导入 book-mis.sql 示例数据) - 测试账号具备上传权限:`manage:courseResource:add|edit|offline|online` 等 ## 用例 1:门户用户积分排行榜(全站) - GET `/portal/score/rank?pageNum=1&pageSize=10` - Headers:`Authorization: Bearer {{token}}` - 断言: - `code == 200` - `rows` 为数组;每项包含 `userId/username/totalScore` ## 用例 2:门户用户积分排行榜(按专业) - GET `/portal/score/rank?majorId=4&pageNum=1&pageSize=10` - 断言: - `code == 200` - 所有 `rows[*].majorId == 4` ## 用例 2.1:代表作Top5 验证(前端行为) - 说明:代表作来自 `/portal/resource/list?uploaderId=[&majorId=]`,前端按 `downloadCount` 降序取前5 - 步骤: 1) 调用 `GET /portal/score/rank?majorId=4&pageNum=1&pageSize=1` 取第一名用户 `userId` 2) 调用 `GET /portal/resource/list?uploaderId=&majorId=4&pageNum=1&pageSize=200` 3) 本地按 `downloadCount desc` 排序并取前5,记录名称与下载数 4) 人工比对前端页面显示的代表作标签是否一致(名称与下载数) ## 用例 2.2:代表作抽屉筛选/排序 - 前置:打开前端,点击用户名弹出抽屉 - 步骤: - 关键词:输入名称片段,断言列表只包含匹配项 - 课程:选择某课程,断言列表仅该课程资源 - 类型:选择“文件”或“外链”,断言 `resourceType` 匹配 - 仅最佳:开启,断言 `isBest==1` - 排序:切换“按时间”,断言列表按 `publishTime desc` ## 用例 3:审核通过首次加分(+5) 1) 以普通用户上传资源(待审) - POST `/manage/courseResource` - Body(示例-文件型): ```json { "majorId": 4, "courseId": 4101, "resourceName": "积分测试-资料包", "resourceType": 0, "fileUrl": "https://oss/bucket/test.zip", "fileHash": "sha256:1111", "fileSize": 2048, "description": "用于积分测试" } ``` - 断言:`code == 200` 2) 以管理员或本专业负责人审核通过 - PUT `/manage/courseResource/{id}/approve` - 断言:`code == 200` 3) 查询排行榜(全站或对应专业) - GET `/portal/score/rank?majorId=4&pageNum=1&pageSize=10` - 断言: - 上传者的 `totalScore` 增加了 `5` - `approveCount` 增加 `1` 4) 再次编辑并重新审核通过(不应重复加分) - PUT `/manage/courseResource`(修改 `description`) → 状态回到待审 - 再执行审批:PUT `/manage/courseResource/{id}/approve` - 断言:排行榜分值未再增加(依赖流水幂等) ## 用例 4:设置最佳首次加分(+10) 1) 以负责人设置最佳 - PUT `/manage/courseResource/{id}/best` - 断言:`code == 200` 2) 查询排行榜 - GET `/portal/score/rank?majorId=4&pageNum=1&pageSize=10` - 断言: - 上传者的 `totalScore` 增加了 `10` - `bestCount` 增加 `1` 3) 取消最佳再设为最佳(不应重复加分) - PUT `/manage/courseResource/{id}/unbest` → 再 PUT `/manage/courseResource/{id}/best` - 断言:积分不再增加 ## 常见失败点与解决 - 403:缺少按钮权限 → 在 RuoYi 后台为测试用户授予对应 `manage:*` 权限 - 409:审核状态冲突 → 当前状态不允许审批,确认状态机:0待审/1通过/2驳回/3下架 - 排行榜为空:无积分记录或分页超出范围 → 先完成一条“首次通过/首次最佳”的操作 ## 备注 - 分值(+5/+50)为 MVP 默认;后续可接入系统配置或后台可配策略 - 若需数据库校验,可在 `tb_user_score`、`tb_user_score_log` 手工查询核对积分累计与流水唯一性