# aha_server **Repository Path**: heath12138/aha_server ## Basic Information - **Project Name**: aha_server - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-11-25 - **Last Updated**: 2021-11-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 公有类请求 ## 检验文字内容的合法性 作者:cygao **请求URL** /common/checkContent **请求body** ```json { "content": "文字内容" } ``` **Response** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": true, "time": "string //响应时间" } ``` # 活动类请求 ## 分页获取活动信息 *作者: STEA_YY* **请求URL** /activity/getActivitiesPagable `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | -------- | ---- | ---- | -------- | | pageNum | int | 是 | 页码 | | pageSize | int | 是 | 分页大小 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "pageNum": "int //页码", "pageSize": "int //分页大小", "pageData": [ { "id": "int //主键", "creatorUserId": "int //创建者用户id", "title": "string //活动标题", "intro": "string //活动介绍", "startTime": "date //活动开始时间", "endTime": "date //活动结束时间", "createTime": "date //活动创建时间", "exchangeAhaPoint": "double //兑换aha点数额", "exchangeAhaCredit": "double //兑换aha币数额", "codeSum": "int //活动最大允许兑换券数量" } ] }, "time": "string //响应时间" } ``` ## 获取用户个人兑换日志 *作者: STEA_YY* **请求URL** /activity/log/me `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | -------- | ---- | ---- | -------- | | pageNum | int | 是 | 页码 | | pageSize | int | 是 | 分页大小 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "pageNum": "int //页码", "pageSize": "int //分页大小", "pageData": [ { "id": "int //主键", "userId": "int //兑换者id", "activityId": "int //活动id", "code": "string //兑换码", "exchangeTime": "date //兑换时间" } ] }, "time": "string //响应时间" } ``` ## 根据活动id获取活动信息 *作者: STEA_YY* **请求URL** /activity/{id} `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------ | ---- | ---- | ------ | | id | int | 否 | 活动id | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "id": "int //主键", "creatorUserId": "int //创建者用户id", "title": "string //活动标题", "intro": "string //活动介绍", "startTime": "date //活动开始时间", "endTime": "date //活动结束时间", "createTime": "date //活动创建时间", "exchangeAhaPoint": "double //兑换aha点数额", "exchangeAhaCredit": "double //兑换aha币数额", "codeSum": "int //活动最大允许兑换券数量" }, "time": "string //响应时间" } ``` ## 使用兑换码 *作者: STEA_YY* **请求URL** /activity/code `POST` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------ | ------ | ---- | ------ | | code | string | 是 | 兑换码 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` # 授权鉴权类请求 ## 通过微信+手机号登录注册 *作者: Qin Zhenghan* **请求URL** /login/wechatAndPhone `POST` **请求体** ```json { "code": "String //微信code【必须】", "encryptedData": "String //微信加密数据【必须】", "iv": "String //加密算法初始向量【必须】", "nickname": "String //昵称【必须】", "avatarUrl": "String //头像URL", "inviteUserId": "int //邀请者id" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "token": "string //token令牌", "personalUserInfo": { "signedNotice": "boolean //是否签署服务协议", "signedContract": "boolean //是否签署合同", "authenticated": "int //是否通过身份认证", "ahaCredit": "double //aha币数量", "ahaPoint": "double //aha点数量", "role": { "id": "int //角色id", "name": "string //角色名称" }, "oauths": [ { "oauthType": "string //授权类型", "oauthId": "string //授权码" } ], "userInfo": { "userId": "int //用户id(外键)", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "birthday": "date //用户出生日期", "typeId": "int //用户类别", "signature": "string //用户个性签名", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "academy": "string //用户学院", "major": "string //用户主修专业", "grade": "int //用户当前年级", "intro": "string //用户自我介绍", "specialtyTags": "string //用户特长标签", "trueName": "string //用户真实姓名", "compTags": "string //用户参与过比赛标签", "vipLevelId": "int //用户VIP等级(外键)" } } }, "time": "string //响应时间" } ``` ## 通过手机号+验证码登录 *作者: Qin Zhenghan* **请求URL** /login/phoneAndCode `POST` **请求体** ```json { "phone": "String //手机号【必须】", "code": "String //验证码【必须】", "avatarUrl": "String //头像URL", "nickname": "String //昵称【必须】", "inviteUserId": "int //邀请者id" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "token": "string //token令牌", "personalUserInfo": { "signedNotice": "boolean //是否签署服务协议", "signedContract": "boolean //是否签署合同", "authenticated": "int //是否通过身份认证", "ahaCredit": "double //aha币数量", "ahaPoint": "double //aha点数量", "role": { "id": "int //角色id", "name": "string //角色名称" }, "oauths": [ { "oauthType": "string //授权类型", "oauthId": "string //授权码" } ], "userInfo": { "userId": "int //用户id(外键)", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "birthday": "date //用户出生日期", "typeId": "int //用户类别", "signature": "string //用户个性签名", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "academy": "string //用户学院", "major": "string //用户主修专业", "grade": "int //用户当前年级", "intro": "string //用户自我介绍", "specialtyTags": "string //用户特长标签", "trueName": "string //用户真实姓名", "compTags": "string //用户参与过比赛标签", "vipLevelId": "int //用户VIP等级(外键)" } } }, "time": "string //响应时间" } ``` ## 通过用户id登录 *作者: Qin Zhenghan* **请求URL** /login/userId`GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------ | ------- | ---- | ------ | | userId | Integer | 是 | 用户id | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "token": "string //token令牌", "personalUserInfo": { "signedNotice": "boolean //是否签署服务协议", "signedContract": "boolean //是否签署合同", "authenticated": "int //是否通过身份认证", "ahaCredit": "double //aha币数量", "ahaPoint": "double //aha点数量", "role": { "id": "int //角色id", "name": "string //角色名称" }, "oauths": [ { "oauthType": "string //授权类型", "oauthId": "string //授权码" } ], "userInfo": { "userId": "int //用户id(外键)", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "birthday": "date //用户出生日期", "typeId": "int //用户类别", "signature": "string //用户个性签名", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "academy": "string //用户学院", "major": "string //用户主修专业", "grade": "int //用户当前年级", "intro": "string //用户自我介绍", "specialtyTags": "string //用户特长标签", "trueName": "string //用户真实姓名", "compTags": "string //用户参与过比赛标签", "vipLevelId": "int //用户VIP等级(外键)" } } }, "time": "string //响应时间" } ``` ## 独立生成token *作者: Qin Zhenghan* **请求URL** /auth/token`POST` **返回结果** ```json { "code": 200, "msg": "succ", "data": "string //token", "time": "2021-08-25 22:51:00" } ``` ## 通过用户手机号登录后台 *作者: Qin Zhenghan* **请求URL** /admin/login/phone`POST` **请求体** ```json { "phone": "string //手机号【必须】", "code": "string //验证码【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "token": "string //token令牌", "personalUserInfo": { "signedNotice": "boolean //是否签署服务协议", "signedContract": "boolean //是否签署合同", "authenticated": "int //是否通过身份认证", "ahaCredit": "double //aha币数量", "ahaPoint": "double //aha点数量", "role": { "id": "int //角色id", "name": "string //角色名称" }, "oauths": [ { "oauthType": "string //授权类型", "oauthId": "string //授权码" } ], "userInfo": { "userId": "int //用户id(外键)", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "birthday": "date //用户出生日期", "typeId": "int //用户类别", "signature": "string //用户个性签名", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "academy": "string //用户学院", "major": "string //用户主修专业", "grade": "int //用户当前年级", "intro": "string //用户自我介绍", "specialtyTags": "string //用户特长标签", "trueName": "string //用户真实姓名", "compTags": "string //用户参与过比赛标签", "vipLevelId": "int //用户VIP等级(外键)" } } }, "time": "string //响应时间" } ``` ## 通过账号密码登录 *作者: STEA_YY* **请求URL** /login/phone `POST` **请求体** ```json { "phone": "string //手机号【必须】", "password": "string //密码【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "token": "string //token令牌", "personalUserInfo": { "signedNotice": "boolean //是否签署服务协议", "signedContract": "boolean //是否签署合同", "authenticated": "int //是否通过身份认证", "ahaCredit": "double //aha币数量", "ahaPoint": "double //aha点数量", "role": { "id": "int //角色id", "name": "string //角色名称" }, "oauths": [ { "oauthType": "string //授权类型", "oauthId": "string //授权码" } ], "userInfo": { "userId": "int //用户id(外键)", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "birthday": "date //用户出生日期", "typeId": "int //用户类别", "signature": "string //用户个性签名", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "academy": "string //用户学院", "major": "string //用户主修专业", "grade": "int //用户当前年级", "intro": "string //用户自我介绍", "specialtyTags": "string //用户特长标签", "trueName": "string //用户真实姓名", "compTags": "string //用户参与过比赛标签", "vipLevelId": "int //用户VIP等级(外键)" } } }, "time": "string //响应时间" } ``` ## 通过手机号注册 *作者: STEA_YY* **请求URL** /register/phone `POST` **请求体** ```json { "phone": "string //手机号【必须】", "password": "string //密码【必须】", "nickname": "string //昵称【必须】", "signedNotice": "boolean //是否同意服务协议", "code": "string //短信验证码【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "token": "string //token令牌", "personalUserInfo": { "signedNotice": "boolean //是否签署服务协议", "signedContract": "boolean //是否签署合同", "authenticated": "int //是否通过身份认证", "ahaCredit": "double //aha币数量", "ahaPoint": "double //aha点数量", "role": { "id": "int //角色id", "name": "string //角色名称" }, "oauths": [ { "oauthType": "string //授权类型", "oauthId": "string //授权码" } ], "userInfo": { "userId": "int //用户id(外键)", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "birthday": "date //用户出生日期", "typeId": "int //用户类别", "signature": "string //用户个性签名", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "academy": "string //用户学院", "major": "string //用户主修专业", "grade": "int //用户当前年级", "intro": "string //用户自我介绍", "specialtyTags": "string //用户特长标签", "trueName": "string //用户真实姓名", "compTags": "string //用户参与过比赛标签", "vipLevelId": "int //用户VIP等级(外键)" } } }, "time": "string //响应时间" } ``` ## 绑定手机号 *作者: STEA_YY* **请求URL** /bind/phone `POST` **请求体** ```json { "phone": "string //手机号【必须】", "code": "string //验证码【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 修改密码 *作者: STEA_YY* **请求URL** /changePassword/phone/{phone} `POST` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------ | ------ | ---- | ------ | | phone | string | 否 | 手机号 | **请求体** ```json { "newPassword": "string //新密码【必须】", "code": "string //短信验证码【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 签署服务协议 *作者: STEA_YY* **请求URL** /sign/notice `POST` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "string //响应数据", "time": "string //响应时间" } ``` ## 签署合同 *作者: STEA_YY* **请求URL** /sign/contract `POST` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ----------------- | ------ | ---- | ------------ | | file | file | 否 | 合同签名文件 | | userId | int | 否 | 用户id(外键) | | name | string | 否 | 联系人 | | signatureFilename | string | 否 | 签名文件名 | | signTime | date | 否 | 合同签名时间 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "string //响应数据", "time": "string //响应时间" } ``` ## 登出 *作者: STEA_YY* **请求URL** /logout `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 绑定微信账号 *作者: STEA_YY* **请求URL** /bind/wechat `POST` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------ | ------ | ---- | ------------ | | code | string | 否 | 小程序请求码 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 通过微信号登录或注册 *作者: STEA_YY* **请求URL** /login/wechat `POST` **请求体** ```json { "nickname": "string //昵称【必须】", "code": "string //微信code【必须】", "avatarUrl": "string //头像URL" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "token": "string //token令牌", "personalUserInfo": { "signedNotice": "boolean //是否签署服务协议", "signedContract": "boolean //是否签署合同", "authenticated": "int //是否通过身份认证", "ahaCredit": "double //aha币数量", "ahaPoint": "double //aha点数量", "role": { "id": "int //角色id", "name": "string //角色名称" }, "oauths": [ { "oauthType": "string //授权类型", "oauthId": "string //授权码" } ], "userInfo": { "userId": "int //用户id(外键)", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "birthday": "date //用户出生日期", "typeId": "int //用户类别", "signature": "string //用户个性签名", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "academy": "string //用户学院", "major": "string //用户主修专业", "grade": "int //用户当前年级", "intro": "string //用户自我介绍", "specialtyTags": "string //用户特长标签", "trueName": "string //用户真实姓名", "compTags": "string //用户参与过比赛标签", "vipLevelId": "int //用户VIP等级(外键)" } } }, "time": "string //响应时间" } ``` # 竞赛信息和竞赛标签相关请求 ## 根据id获取竞赛信息 *作者: STEA_YY* **请求URL** /competition/{id} `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------ | ---- | ---- | ---------- | | id | int | 否 | 竞赛信息id | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "id": "int //竞赛id", "competitionType": { "id": "int", "name": "string" }, "name": "string //赛事名称", "level": "int //竞赛级别", "intro": "string //赛事简介", "picUrl": "int //赛事图片保存路径", "articleUrl": "string //公众号文章url" }, "time": "string //响应时间" } ``` ## 获取所有竞赛信息 *作者: STEA_YY* **请求URL** /competition/getAllCompetition `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": [ { "id": "int //竞赛id", "competitionType": { "id": "int", "name": "string" }, "name": "string //赛事名称", "level": "int //竞赛级别", "picUrl": "int //赛事图片保存路径" } ], "time": "string //响应时间" } ``` ## 根据type获取竞赛详细信息列表 *作者: Qin Zhenghan* **请求URL** /competition/byType/{typeId} `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------ | ---- | ---- | ---------- | | typeId | int | 是 | 竞赛类别id | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": [ { "id": "int //竞赛id", "competitionType": { "id": "int", "name": "string" }, "name": "string //赛事名称", "level": "int //竞赛级别", "picUrl": "int //赛事图片保存路径" } ], "time": "string //响应时间" } ``` ## 根据id获取竞赛类别 *作者: STEA_YY* **请求URL** /competition/type/{id} `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------ | ---- | ---- | ---------- | | id | int | 否 | 竞赛类别id | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "id": "int", "name": "string" }, "time": "string //响应时间" } ``` ## 获取所有竞赛类别 *作者: STEA_YY* **请求URL** /competition/type `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": [ { "id": "int", "name": "string" } ], "time": "string //响应时间" } ``` ## 保存竞赛关联公众号文章信息 *作者: Qin Zhenghan* **请求URL** /competition/article `POST` **请求体** ```json { "id": 79, "title": "互联网+太精彩啦", "articleUrl": "/url", "time": "2021-09-08" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` # 贡献点相关请求 ## 获取订单信息 *作者: STEA_YY* **请求URL** /contribPoint/order/{orderId} `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------- | ---- | ---- | ------ | | orderId | int | 否 | 订单号 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "id": "int //订单号", "user": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "project": { "id": "int //项目id", "creatorUser": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "name": "string //项目名称", "read": "int //点击率", "collect": "int //收藏数量", "avatarUrl": "string //团队头像url", "tags": "string //项目标签", "compId": "int //赛事id(外键)", "awardLevel": "int //项目获奖级别", "awardTime": "date //项目获奖时间", "passed": "boolean //是否通过审核" }, "totalCost": "double //订单总价", "status": "int //订单状态", "createTime": "date //订单创建时间", "payTime": "date //订单支付时间", "orderResources": [ { "resource": { "id": "int //项目资源id", "projectId": "int //项目id(外键)", "name": "string //资源名称(前端显示,如“城市鹰眼”智慧交通大数据挖掘系统-项目详细文档)", "fileType": "int //资源文件类型", "typeId": "int //资源类型id(外键)", "filename": "string //保存在oss里的资源文件名(包括前缀)", "previewUrl": "string //保存在oss里的预览文件地址", "download": "int //资源文件下载量", "score": "double //资源平均分", "scoreCount": "int //评分人数", "price": "double //资源价格", "discount": "double //资源折扣", "passed": "boolean //是否通过审核" }, "discount": "double //资源折扣", "price": "double //贡献点小计" } ], "chargedAhaCredit": "double //订单实际支付aha币", "chargedAhaPoint": "double //订单实际支付aha点" }, "time": "string //响应时间" } ``` ## 获取用户全部订单信息 *作者: STEA_YY* **请求URL** /contribPoint/order/me `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | -------- | ---- | ---- | -------- | | pageNum | int | 否 | 页码 | | pageSize | int | 否 | 分页大小 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "pageNum": "int //页码", "pageSize": "int //分页大小", "pageData": [ { "id": "int //订单号", "user": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "project": { "id": "int //项目id", "creatorUser": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "name": "string //项目名称", "read": "int //点击率", "collect": "int //收藏数量", "avatarUrl": "string //团队头像url", "tags": "string //项目标签", "compId": "int //赛事id(外键)", "awardLevel": "int //项目获奖级别", "awardTime": "date //项目获奖时间", "passed": "boolean //是否通过审核" }, "totalCost": "double //订单总价", "status": "int //订单状态", "createTime": "date //订单创建时间", "payTime": "date //订单支付时间", "orderResources": [ { "resource": { "id": "int //项目资源id", "projectId": "int //项目id(外键)", "name": "string //资源名称(前端显示,如“城市鹰眼”智慧交通大数据挖掘系统-项目详细文档)", "fileType": "int //资源文件类型", "typeId": "int //资源类型id(外键)", "filename": "string //保存在oss里的资源文件名(包括前缀)", "previewUrl": "string //保存在oss里的预览文件地址", "download": "int //资源文件下载量", "score": "double //资源平均分", "scoreCount": "int //评分人数", "price": "double //资源价格", "discount": "double //资源折扣", "passed": "boolean //是否通过审核" }, "discount": "double //资源折扣", "price": "double //贡献点小计" } ], "chargedAhaCredit": "double //订单实际支付aha币", "chargedAhaPoint": "double //订单实际支付aha点" } ] }, "time": "string //响应时间" } ``` ## 创建订单 *作者: STEA_YY* **请求URL** /contribPoint/order `POST` **请求体** ```json { "projectId": "int //项目id【必须】", "resourceIds": "int[] //项目资源id数组【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "int //响应数据", "time": "string //响应时间" } ``` ## 对订单进行操作 *作者: STEA_YY* **请求URL** /contribPoint/order/{orderId} `PUT` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------- | ------ | ---- | --------------------- | | orderId | int | 否 | 订单号 | | action | string | 否 | 操作,取值pay、cancel | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 获取贡献点总排行榜 *作者: STEA_YY* **请求URL** /contribPoint/rank `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": [ { "user": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "contribPoint": "double //贡献点", "rank": "long //排名" } ], "time": "string //响应时间" } ``` ## 获取用户个人排名 *作者: STEA_YY* **请求URL** /contribPoint/rank/me `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "user": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "contribPoint": "double //贡献点", "rank": "long //排名" }, "time": "string //响应时间" } ``` ## 获取用户个人贡献点变动日志 *作者: STEA_YY* **请求URL** /contribPoint/log/me `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | -------- | ------ | ---- | ------------------------------------------------------------ | | pageNum | int | 是 | 页码 | | pageSize | int | 是 | 分页大小 | | type | int | 否 | 类型 | | sortBy | string | 否 | 排序关键字取值(time、type、contribPoint、ahaPoint、ahaCredit) | | orderBy | string | 否 | 排序方式(取值desc、asc,默认desc) | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "pageNum": "int //页码", "pageSize": "int //分页大小", "pageData": [ { "id": "int", "userId": "int //用户id", "type": "int //类型", "externalId": "int //业务外键", "ahaCreditAmount": "double //Aha币总额", "ahaPointAmount": "double //Aha点总额", "time": "date //发生时间" } ] }, "time": "string //响应时间" } ``` # COS相关请求 ## 获取COS公开资源上传签名 *作者: STEA_YY* **请求URL** /cos/sign/upload/public `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | -------- | ------ | ---- | ------------ | | filename | string | 否 | 待上传文件名 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "bucketName": "string //目标bucketName", "region": "string //服务器地域", "policy": "string //经过 Base64 编码的“策略”(Policy)内容", "secretId": "string //COS SecretId", "keyTime": "string //COS KeyTime", "signature": "string //上传签名", "filename": "string //完整文件名" }, "time": "string //响应时间" } ``` ## 获取COS公开资源上传签名(无文件前缀) *作者: cygao* **请求URL** /cos/sign/upload/common `GET` (需要管理员权限) **请求参数** | 参数名 | 类型 | 必须 | 描述 | | -------- | ------ | ---- | ------------ | | filename | string | 否 | 待上传文件名 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "bucketName": "string //目标bucketName", "region": "string //服务器地域", "policy": "string //经过 Base64 编码的“策略”(Policy)内容", "secretId": "string //COS SecretId", "keyTime": "string //COS KeyTime", "signature": "string //上传签名", "filename": "string //完整文件名" }, "time": "string //响应时间" } ``` ## signPostUploadToCos *作者: STEA_YY* **请求URL** /cos/sign/upload/test `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "bucketName": "string //目标bucketName", "region": "string //服务器地域", "policy": "string //经过 Base64 编码的“策略”(Policy)内容", "secretId": "string //COS SecretId", "keyTime": "string //COS KeyTime", "signature": "string //上传签名", "filename": "string //完整文件名" }, "time": "string //响应时间" } ``` # 反馈类请求 ## 分页获取用户全部反馈 *作者: STEA_YY* **请求URL** /feedback/me `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------------ | ------ | ---- | ---------------------------------------------------- | | pageNum | int | 否 | 页码 | | pageSize | int | 否 | 分页大小 | | type | int | 否 | 类别 | | lowestLevel | int | 否 | 最低级别 | | highestLevel | int | 否 | 最高级别 | | sortBy | string | 否 | 排序关键字,取值time、status、type、level、replyTime | | orderBy | string | 否 | 排序方式 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "pageNum": "int //页码", "pageSize": "int //分页大小", "pageData": [ { "id": "int", "user": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "time": "date //反馈时间", "type": "int //反馈类型", "content": "string //反馈内容", "status": "int //反馈状态", "reply": "string //反馈回复", "replyTime": "date //反馈回复时间", "level": "int //反馈问题级别" } ] }, "time": "string //响应时间" } ``` ## 用户提交反馈 *作者: STEA_YY* **请求URL** /feedback/saveFeedback `POST` **请求体** ```json { "type": "int //反馈类型", "content": "string //反馈内容" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` # 站内信相关请求 ## 根据条件获取未读消息条数 *作者: STEA_YY* **请求URL** /message/count/notRead `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------ | ------ | ---- | -------------------------------------- | | type | string | 否 | 消息类型(system:系统消息,private:私信) | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "int //响应数据", "time": "string //响应时间" } ``` ## 统计用户未读消息条数 *作者: Qin Zhenghan* **请求URL** /message/count/notRead/all `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "systemMessageCount": "int //未读系统消息条数", "privateMessageCount": "int //未读私信条数" }, "time": "string //响应时间" } ``` ## 根据条件获取消息队列 *作者: STEA_YY* **请求URL** /message/getAllMessageVoPagable `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | -------- | ------ | ---- | -------------------------------------- | | pageNum | int | 否 | 页码 | | pageSize | int | 否 | 分页大小 | | status | int | 否 | 状态(0:未读,1:已读,2:已删除) | | type | string | 否 | 消息类型(system:系统消息,private:私信) | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "pageNum": "int //页码", "pageSize": "int //分页大小", "pageData": [ { "id": "int //站内信id", "senderUser": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "receiverUser": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "type": "int //类型", "status": "int //阅读状态", "receiveDate": "date //收件时间", "title": "string //信件标题", "content": "string //信件内容" } ] }, "time": "string //响应时间" } ``` ## 根据条件获取状态排序消息队列 *作者: Qin Zhenghan* **请求URL** /message/status `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | -------- | ------ | ---- | -------------------------------------- | | pageNum | int | 否 | 页码 | | pageSize | int | 否 | 分页大小 | | type | string | 否 | 消息类型(system:系统消息,private:私信) | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "pageNum": "int //页码", "pageSize": "int //分页大小", "pageData": [ { "id": "int //站内信id", "senderUser": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "receiverUser": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "type": "int //类型", "status": "int //阅读状态", "receiveDate": "date //收件时间", "title": "string //信件标题", "content": "string //信件内容" } ] }, "time": "string //响应时间" } ``` ## 根据对方用户id获取会话消息,并标记为已读 *作者: STEA_YY* **请求URL** /message/communication/{senderUserId} `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------------ | ---- | ---- | ---------- | | senderUserId | int | 否 | 对方用户id | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": [ { "id": "int //站内信id", "senderUser": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "receiverUser": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "type": "int //类型", "status": "int //阅读状态", "receiveDate": "date //收件时间", "title": "string //信件标题", "content": "string //信件内容" } ], "time": "string //响应时间" } ``` ## 根据id获取站内信内容,并标记为已读 *作者: STEA_YY* **请求URL** /message/{messageId} `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | --------- | ---- | ---- | -------- | | messageId | int | 否 | 站内信id | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 删除指定站内信(并非真的从数据库中删除) *作者: STEA_YY* **请求URL** /message/{messageId} `DELETE` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | --------- | ---- | ---- | -------- | | messageId | int | 否 | 站内信id | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 向指定用户发送私信 *作者: STEA_YY* **请求URL** /message/sendPrivateMessage `POST` **请求体** ```json { "receiverUserId": "int //收件人用户id", "type": "int //类型", "textId": "int //信件内容id(外键)", "title": "string //信件标题", "content": "string //信件内容【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 拉取群发信息 *作者: STEA_YY* **请求URL** /message/notice/pull `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` # 公告类请求 ## 获取投放的系统公告 *作者: STEA_YY* **请求URL** /notice/getAllNoticeEnabled `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": [ { "id": "int", "title": "string //公告标题", "content": "string //公告内容", "createTime": "date //公告开始日期", "puttingStartTime": "date //公告投放开始日期", "puttingEndTime": "date //公告投放结束日期", "enable": "boolean //公告是否启用" } ], "time": "string //响应时间" } ``` # 项目相关请求 ## 分页获取所有项目粗略信息 *作者: STEA_YY* **请求URL** /project `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | -------- | ---- | ---- | -------- | | pageNum | int | 否 | 页码 | | pageSize | int | 否 | 分页大小 | | userId | int | 否 | 用户id | | compId | int | 否 | 竞赛id | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "pageNum": "int //页码", "pageSize": "int //分页大小", "pageData": [ { "id": "int //项目id", "creatorUser": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "name": "string //项目名称", "read": "int //点击率", "collect": "int //收藏数量", "avatarUrl": "string //团队头像url", "tags": "string //项目标签", "compId": "int //赛事id(外键)", "awardLevel": "int //项目获奖级别", "awardTime": "date //项目获奖时间", "passed": "boolean //是否通过审核" } ] }, "time": "string //响应时间" } ``` ## 分页获取登录用户所有项目粗略信息 *作者: STEA_YY* **请求URL** /project/me `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ---------- | ------ | ---- | ---------- | | pageNum | int | 否 | 页码 | | pageSize | int | 否 | 分页大小 | | compId | int | 否 | 竞赛id | | awardLevel | int | 否 | 获奖级别 | | sortBy | string | 否 | 排序关键字 | | orderBy | string | 否 | 排序方式 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "pageNum": "int //页码", "pageSize": "int //分页大小", "pageData": [ { "id": "int //项目id", "creatorUser": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "name": "string //项目名称", "read": "int //点击率", "collect": "int //收藏数量", "avatarUrl": "string //团队头像url", "tags": "string //项目标签", "compId": "int //赛事id(外键)", "awardLevel": "int //项目获奖级别", "awardTime": "date //项目获奖时间", "passed": "boolean //是否通过审核" } ] }, "time": "string //响应时间" } ``` ## 根据项目id获取项目详细信息 *作者: STEA_YY* **请求URL** /project/{projectId} `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | --------- | ---- | ---- | ------ | | projectId | int | 否 | 项目id | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "id": "int //项目id", "creatorUser": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "name": "string //团队名称", "avatarUrl": "string //团队头像url", "tags": "string //项目标签", "intro": "string //团队介绍(富文本)", "read": "int //点击率", "collect": "int //收藏数量", "compId": "int //赛事id(外键)", "competition": { "id": "int", "typeId": "int //竞赛类别id(外键)", "level": "int //竞赛级别", "name": "string //赛事名称", "intro": "string //赛事简介", "picUrl": "int //赛事图片保存路径" }, "compName": "string //比赛和获奖全名(如中国大学生服务外包创新创业大赛全国一等奖)", "awardLevel": "int //项目获奖级别", "awardTime": "date //项目获奖时间", "awardProveUrl": "string //获奖证明文件url", "meaning": "double //项目资源完整程度,决定贡献点", "passed": "boolean //是否通过审核", "members": [ { "memberUser": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "rank": "int //团队成员顺位(决定显示顺序,1为队长)", "job": "string //团队成员职务", "editable": "boolean //成员是否可编辑项目信息" } ], "resources": [ { "id": "int //项目资源id", "projectId": "int //项目id(外键)", "name": "string //资源名称(前端显示,如“城市鹰眼”智慧交通大数据挖掘系统-项目详细文档)", "fileType": "int //资源文件类型", "typeId": "int //资源类型id(外键)", "filename": "string //保存在oss里的资源文件名(包括前缀)", "previewUrl": "string //保存在oss里的预览文件地址", "download": "int //资源文件下载量", "score": "double //资源平均分", "scoreCount": "int //评分人数", "price": "double //资源价格", "discount": "double //资源折扣", "passed": "boolean //是否通过审核" } ] }, "time": "string //响应时间" } ``` ## 全文检索项目 *作者: Qin Zhenghan* **请求URL** /project/query/{queryValue}/{sortBy}/{order}/{pageNum}/{pageSize} `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ---------- | ------ | ---- | ------------------- | | queryValue | string | 是 | 输入搜索信息 | | sortBy | string | 是 | 排序依据(字段名) | | order | string | 是 | 排序方式(desc、asc) | | pageNum | int | 是 | 页码(1开始) | | pageSize | int | 是 | 页大小 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "pageNum": "int //页码", "pageSize": "int //分页大小", "pageData": [ { "id": "int //项目id", "creatorUser": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "name": "string //项目名称", "read": "int //点击率", "collect": "int //收藏数量", "avatarUrl": "string //团队头像url", "tags": "string //项目标签", "compId": "int //赛事id(外键)", "awardLevel": "int //项目获奖级别", "awardTime": "date //项目获奖时间", "passed": "boolean //是否通过审核" } ] }, "time": "string //响应时间" } ``` ## 获取COS公开资源上传签名(用于上传项目头像和获奖证明材料) *作者: STEA_YY* **请求URL** /project/sign/upload/public `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | -------- | ------ | ---- | ------------ | | filename | string | 否 | 待上传文件名 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "bucketName": "string //目标bucketName", "region": "string //服务器地域", "policy": "string //经过 Base64 编码的“策略”(Policy)内容", "secretId": "string //COS SecretId", "keyTime": "string //COS KeyTime", "signature": "string //上传签名", "filename": "string //完整文件名" }, "time": "string //响应时间" } ``` ## 新增项目 *作者: STEA_YY、cygao* **请求URL** /project `POST` **请求体** ```json { "name": "string //团队名称【必须】", "avatarUrl": "string //团队头像url", "compId": "int //赛事id(外键)【必须】", "compName": "string //比赛和获奖全名(如中国大学生服务外包创新创业大赛全国一等奖)", "awardLevel": "int //项目获奖级别", "tags": "string //项目标签", "awardTime": "date //项目获奖时间", "awardProveUrl": "string //获奖证明文件url", "intro": "string //团队介绍(富文本)", "isAnonymous": "true(是匿名项目资源) or false(不是匿名项目资源)" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "int //响应数据", "time": "string //响应时间" } ``` ## 修改项目信息 *作者: STEA_YY* **请求URL** /project/{projectId} `PUT` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | --------- | ---- | ---- | ------ | | projectId | int | 否 | 项目id | **请求体** ```json { "name": "string //团队名称【必须】", "avatarUrl": "string //团队头像url", "compId": "int //赛事id(外键)【必须】", "compName": "string //比赛和获奖全名(如中国大学生服务外包创新创业大赛全国一等奖)", "awardLevel": "int //项目获奖级别", "tags": "string //项目标签", "awardTime": "date //项目获奖时间", "awardProveUrl": "string //获奖证明文件url", "intro": "string //团队介绍(富文本)" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 删除项目 *作者: STEA_YY* **请求URL** /project/{projectId} `DELETE` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | --------- | ---- | ---- | ------ | | projectId | int | 否 | 项目id | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 根据项目id获取所有项目成员 *作者: STEA_YY* **请求URL** /project/{projectId}/members `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | --------- | ---- | ---- | ------ | | projectId | int | 否 | 项目id | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": [ { "memberUser": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "rank": "int //团队成员顺位(决定显示顺序,1为队长)", "job": "string //团队成员职务", "editable": "boolean //成员是否可编辑项目信息" } ], "time": "string //响应时间" } ``` ## 新增项目成员 *作者: STEA_YY* **请求URL** /project/member/{projectId} `POST` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | --------- | ---- | ---- | ---------------- | | projectId | int | 否 | 项目id **请求体** | ```json { "projectId": "int", "memberUserId": "int //团队成员id【必须】", "rank": "int //团队成员顺位(决定显示顺序,1为队长)【必须】", "job": "string //团队成员职务【必须】", "editable": "boolean //成员是否可编辑项目信息【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 修改项目成员信息 *作者: STEA_YY* **请求URL** /project/member/{projectId}/{memberUserId} `PUT` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------------ | ---- | ---- | ---------- | | projectId | int | 否 | 项目id | | memberUserId | int | 否 | 成员用户id | **请求体** ```json { "projectId": "int", "memberUserId": "int //团队成员id【必须】", "rank": "int //团队成员顺位(决定显示顺序,1为队长)【必须】", "job": "string //团队成员职务【必须】", "editable": "boolean //成员是否可编辑项目信息【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 修改多个项目成员信息 *作者: STEA_YY* **请求URL** /project/members/{projectId} `PUT` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | --------- | ---- | ---- | ------ | | projectId | int | 否 | 项目id | **请求体** ```json [ { "projectId": "int", "memberUserId": "int //团队成员id【必须】", "rank": "int //团队成员顺位(决定显示顺序,1为队长)【必须】", "job": "string //团队成员职务【必须】", "editable": "boolean //成员是否可编辑项目信息【必须】" } ] ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 删除项目成员 *作者: STEA_YY* **请求URL** /project/member/{projectId}/{memberUserId} `DELETE` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------------ | ---- | ---- | ---------- | | projectId | int | 否 | 项目id | | memberUserId | int | 否 | 成员用户id | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 根据项目id获取所有项目资源 *作者: STEA_YY* **请求URL** /project/{projectId}/resources `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | --------- | ------- | ---- | ------------------------------------------------------------ | | projectId | int | 否 | 项目id | | edit | boolean | 否 | 是否处于编辑模式(项目编辑权限拥有者据此获取未通过审核资源) | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": [ { "id": "int //项目资源id", "projectId": "int //项目id(外键)", "name": "string //资源名称(前端显示,如“城市鹰眼”智慧交通大数据挖掘系统-项目详细文档)", "fileType": "int //资源文件类型", "typeId": "int //资源类型id(外键)", "filename": "string //保存在oss里的资源文件名(包括前缀)", "previewUrl": "string //保存在oss里的预览文件地址", "download": "int //资源文件下载量", "score": "double //资源平均分", "scoreCount": "int //评分人数", "price": "double //资源价格", "discount": "double //资源折扣", "passed": "boolean //是否通过审核" } ], "time": "string //响应时间" } ``` ## 根据项目资源id获取项目资源 *作者: STEA_YY* **请求URL** /project/resource/{projectResourceId} `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ----------------- | ------- | ---- | ------------------------------------------------------------ | | projectResourceId | int | 否 | 项目资源id | | edit | boolean | 否 | 是否处于编辑模式(项目编辑权限拥有者据此获取未通过审核资源) | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "id": "int //项目资源id", "projectId": "int //项目id(外键)", "name": "string //资源名称(前端显示,如“城市鹰眼”智慧交通大数据挖掘系统-项目详细文档)", "fileType": "int //资源文件类型", "typeId": "int //资源类型id(外键)", "filename": "string //保存在oss里的资源文件名(包括前缀)", "previewUrl": "string //保存在oss里的预览文件地址", "download": "int //资源文件下载量", "score": "double //资源平均分", "scoreCount": "int //评分人数", "price": "double //资源价格", "discount": "double //资源折扣", "passed": "boolean //是否通过审核" }, "time": "string //响应时间" } ``` ## 获取COS私有资源上传签名(用于上传资源文件) *作者: STEA_YY* **请求URL** /project/{projectId}/resources/sign/upload/private `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | --------- | ------ | ---- | ------------ | | projectId | int | 否 | 项目id | | filename | string | 否 | 待上传文件名 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "bucketName": "string //目标bucketName", "region": "string //服务器地域", "policy": "string //经过 Base64 编码的“策略”(Policy)内容", "secretId": "string //COS SecretId", "keyTime": "string //COS KeyTime", "signature": "string //上传签名", "filename": "string //完整文件名" }, "time": "string //响应时间" } ``` ## 通过临时令牌获取COS私有资源上传签名(用于上传资源文件) *作者: STEA_YY* **请求URL** /project/{projectId}/resources/sign/upload/private/token `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | --------- | ------ | ---- | ------------ | | projectId | int | 否 | 项目id | | filename | string | 否 | 待上传文件名 | | token | string | 是 | 临时令牌 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "bucketName": "string //目标bucketName", "region": "string //服务器地域", "policy": "string //经过 Base64 编码的“策略”(Policy)内容", "secretId": "string //COS SecretId", "keyTime": "string //COS KeyTime", "signature": "string //上传签名", "filename": "string //完整文件名" }, "time": "string //响应时间" } ``` ## 新增项目资源 *作者: STEA_YY* **请求URL** /project/resource/{projectId} `POST` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | --------- | ---- | ---- | ------ | | projectId | int | 否 | 项目id | **请求体** ```json { "name": "string //资源名称(前端显示,如“城市鹰眼”智慧交通大数据挖掘系统-项目详细文档)【必须】", "fileType": "int //资源文件类型【必须】", "typeId": "int //资源类型id(外键)【必须】", "filename": "string //保存在oss里的资源文件名(包括前缀)【必须】", "price": "double //资源价格【必须】", "discount": "double //资源折扣【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "int //响应数据", "time": "string //响应时间" } ``` ## 通过临时令牌新增项目资源 *作者: STEA_YY* **请求URL** /project/resource/{projectId}/token `POST` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | --------- | ------ | ---- | -------- | | projectId | int | 否 | 项目id | | token | string | 是 | 临时令牌 | **请求体** ```json { "name": "string //资源名称(前端显示,如“城市鹰眼”智慧交通大数据挖掘系统-项目详细文档)【必须】", "fileType": "int //资源文件类型【必须】", "typeId": "int //资源类型id(外键)【必须】", "filename": "string //保存在oss里的资源文件名(包括前缀)【必须】", "price": "double //资源价格【必须】", "discount": "double //资源折扣【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "int //响应数据", "time": "string //响应时间" } ``` ## 更新项目资源 *作者: STEA_YY* **请求URL** /project/resource/{projectResourceId} `PUT` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ----------------- | ---- | ---- | ---------- | | projectResourceId | int | 否 | 项目资源id | **请求体** ```json { "name": "string //资源名称(前端显示,如“城市鹰眼”智慧交通大数据挖掘系统-项目详细文档)", "fileType": "int //资源文件类型", "typeId": "int //资源类型id(外键)", "price": "double //资源价格", "discount": "double //资源折扣" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 使用临时令牌更新项目资源 *作者: STEA_YY* **请求URL** /project/resource/{projectResourceId}/token `PUT` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ----------------- | ------ | ---- | ---------- | | projectResourceId | int | 否 | 项目资源id | | token | string | 是 | 临时令牌 | **请求体** ```json { "name": "string //资源名称(前端显示,如“城市鹰眼”智慧交通大数据挖掘系统-项目详细文档)", "fileType": "int //资源文件类型", "typeId": "int //资源类型id(外键)", "price": "double //资源价格", "discount": "double //资源折扣" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 删除项目资源 *作者: STEA_YY* **请求URL** /project/resource/{projectResourceId} `DELETE` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ----------------- | ---- | ---- | ---------- | | projectResourceId | int | 否 | 项目资源id | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 根据临时令牌删除项目资源 *作者: STEA_YY* **请求URL** /project/resource/{projectResourceId}/token `DELETE` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ----------------- | ------ | ---- | ---------- | | projectResourceId | int | 否 | 项目资源id | | token | string | 是 | 临时令牌 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 获取项目资源文件COS下载签名 *作者: STEA_YY* **请求URL** /project/resource/{projectResourceId}/sign/download `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ----------------- | ---- | ---- | ---------- | | projectResourceId | int | 否 | 项目资源id | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "bucketName": "string //目标bucketName", "region": "string //服务器地域", "authorization": "string //上传签名", "expire": "long //签名过期时间戳", "filename": "string //完整文件名" }, "time": "string //响应时间" } ``` ## 获取项目资源文件COS阅读签名 *作者: STEA_YY* **请求URL** /project/resource/{projectResourceId}/sign/read `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ----------------- | ---- | ---- | ---------- | | projectResourceId | int | 否 | 项目资源id | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "bucketName": "string //目标bucketName", "region": "string //服务器地域", "authorization": "string //上传签名", "expire": "long //签名过期时间戳", "filename": "string //完整文件名" }, "time": "string //响应时间" } ``` ## 分页获取用户收藏项目列表 *作者: STEA_YY、Qin Zhenghan* **请求URL** /project/collection `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | -------- | ---- | ---- | -------- | | pageNum | int | 是 | 页码 | | pageSize | int | 是 | 分页大小 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "pageNum": "int //分页页码", "pageSize": "int //分页大小", "pageData": [ { "project": { "id": "int //项目id", "creatorUser": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "name": "string //项目名称", "read": "int //点击率", "collect": "int //收藏数量", "avatarUrl": "string //团队头像url", "tags": "string //项目标签", "compId": "int //赛事id(外键)", "awardLevel": "int //项目获奖级别", "awardTime": "date //项目获奖时间", "passed": "boolean //是否通过审核" } } ] }, "time": "string //响应时间" } ``` ## 收藏项目 *作者: STEA_YY* **请求URL** /project/collection/{projectId} `POST` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | --------- | ---- | ---- | ------ | | projectId | int | 否 | 项目id | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 取消收藏 *作者: STEA_YY* **请求URL** /project/collection/{projectId} `DELETE` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | --------- | ---- | ---- | ------ | | projectId | int | 否 | 项目id | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 判断项目是否被收藏 *作者: STEA_YY* **请求URL** /project/collection/check/{projectId} `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "boolean //响应数据", "time": "string //响应时间" } ``` ## 分页查看资源评价信息 *作者: STEA_YY* **请求URL** /project/resource/score `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------------ | ------ | ---- | -------------------------- | | pageNum | int | 否 | 页码 | | pageSize | int | 否 | 分页大小 | | projectId | int | 否 | 项目id | | resourceId | int | 否 | 项目资源id | | lowestScore | double | 否 | 最低分 | | highestScore | double | 否 | 最高分 | | sortBy | string | 否 | 排序关键字,取值time、score | | orderBy | string | 否 | 排序方式 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "pageNum": "int //页码", "pageSize": "int //分页大小", "pageData": [ { "user": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "resourceId": "int //项目资源id", "score": "double //资源评分", "comment": "string //评论", "time": "date //评价时间" } ] }, "time": "string //响应时间" } ``` ## 评价项目资源 *作者: STEA_YY* **请求URL** /project/resource/score/{projectResourceId} `POST` **请求体** ```json { "score": "double //资源评分【必须】", "comment": "string //评论" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 删除项目资源评价 *作者: STEA_YY* **请求URL** /project/resource/score/{projectResourceId} `DELETE` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 查看全部已购资源 *作者: STEA_YY* **请求URL** /project/resource/purchased `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": [ { "resource": { "id": "int //项目资源id", "projectId": "int //项目id(外键)", "name": "string //资源名称(前端显示,如“城市鹰眼”智慧交通大数据挖掘系统-项目详细文档)", "fileType": "int //资源文件类型", "typeId": "int //资源类型id(外键)", "filename": "string //保存在oss里的资源文件名(包括前缀)", "previewUrl": "string //保存在oss里的预览文件地址", "download": "int //资源文件下载量", "score": "double //资源平均分", "scoreCount": "int //评分人数", "price": "double //资源价格", "discount": "double //资源折扣", "passed": "boolean //是否通过审核" }, "orderId": "int //订单表id", "purchaseTime": "date //购买时间" } ], "time": "string //响应时间" } ``` ## 判断项目资源是否已经购买 *作者: STEA_YY* **请求URL** /project/resource/purchased/check/{resourceId} `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "boolean //响应数据", "time": "string //响应时间" } ``` ## 根据项目id获取用户已购资源的id数组 *作者: STEA_YY* **请求URL** /project/purchased/{projectId} `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "int[] //响应数据", "time": "string //响应时间" } ``` ## 获取全部竞赛资源类型取值和定价系数 *作者: STEA_YY* **请求URL** /project/type `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": [ { "id": "int //主键", "name": "string //资源类型名称", "priceCoefficient": "double //资源价格系数" } ], "time": "string //响应时间" } ``` ## 获取全部竞赛资源-获奖等级定价方案 *作者: STEA_YY* **请求URL** /project/financialScheme `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": [ { "id": "int //主键", "awardLevel": "int //获奖等级", "priceUpperLimit": "double //资源定价上限", "priceLowerLimit": "double //资源定价下限" } ], "time": "string //响应时间" } ``` # 匿名项目相关 ## 新建匿名项目申请表 作者:cygao **请求URL** /project/find `POST` **请求body** ```json { "projectId": "int// 项目id", "intro": "申请正文 // String", "awardProveUrl": "认领材料url // String", "state": "0// int 0-正在审核 1-通过 2-不通过" } ``` ## 更新匿名项目申请表 作者:cygao **请求URL** /project/find/{projectFindId} `PUT` **请求body** ```json { "projectId": "int // 项目id", "intro": "申请正文 // String", "awardProveUrl": "认领材料url // String", "state": "0 // int 0-正在审核 1-通过 2-不通过" } ``` ## 删除匿名项目申请表 作者:cygao **请求URL** /project/find/{projectFindId} `DELETE` ## 判断项目是否正在被用户认领 作者:cygao **请求URL** /project/find/judge/{projectId} `GET` 返回 0-代表没有被认领 其他int-申请表id ## 分页获取所有认领匿名项目请求表 作者:cygao **请求URL** /project/find `GET` **参数** | 参数名 | 类型 | 是否必须 | 描述 | | --------- | ------ | -------- | ------------------------------------------------------------ | | pageNum | int | 是 | 页码 | | pageSize | int | 是 | 分页大小 | | userId | int | 否 | 申请者id | | projectId | int | 否 | 项目id | | state | int | 否 | 是否通过 0-正在审核 1-已通过 2-未通过 | | sortBy | string | 否 | 排序字段,time-根据申请时间排序 project-根据项目排序 state-根据申请状态排序 | | orderBy | string | 否 | 排序方式 asc(默认)-升序 desc-降序 | **返回结果** ```json { "code": 200, "msg": "succ", "data": { "pageNum": 1, "pageSize": 2, "pageData": [ { "id": "int // 匿名项目认领申请表id", "userId": "int // 用户id", "projectId": "int // 匿名项目项目id", "intro": "string // 申请正文", "awardProveUrl": "string // 证明材料url", "state": "int // 申请状态" }, { "id": 7, "userId": 100411, "projectId": 176, "intro": "balabala", "awardProveUrl": "GOGO", "state": 2 } ] }, "time": "2021-04-08 16:06:40" } ``` ## 后台更新匿名项目申请表 作者:cygao **请求url** /admin/project/find `PUT` **请求body** ```json { "projectId": "int // 项目id", "intro": "申请正文 // String", "awardProveUrl": "认领材料url // String", "state": "0 // int 0-正在审核 1-通过 2-不通过" } ``` **备注** 申请表已经被处理(state为1或2)后无法再被修改 # 实名认证类请求 ## 获取实名认证文件COS上传签名 *作者: STEA_YY* **请求URL** /authentication/sign/upload `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | -------- | ------ | ---- | ------ | | filename | string | 否 | 文件名 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "bucketName": "string //目标bucketName", "region": "string //服务器地域", "policy": "string //经过 Base64 编码的“策略”(Policy)内容", "secretId": "string //COS SecretId", "keyTime": "string //COS KeyTime", "signature": "string //上传签名", "filename": "string //完整文件名" }, "time": "string //响应时间" } ``` ## 更新实名认证信息 *作者: STEA_YY* **请求URL** /authentication/updatePersonalAuthentication `PUT` **请求体** ```json { "trueName": "string //真实姓名", "type": "int //认证类型(学生or社会人士)", "studentCardFilename": "string //学生证图片文件名", "idCardFrontFilename": "string //身份证正面文件名", "idCardBackFilename": "string //身份证背面文件名" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` # 用户简历相关请求 ## 根据用户id查看用户简历 *作者: STEA_YY* **请求URL** /resume/{userId} `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "id": {}, "userId": "int //用户手机号(业务外键)", "name": "string //真实姓名", "phone": "string //手机号", "email": "string //电子邮箱", "gender": "string //性别", "birth": "string //出生年月", "highestDegree": "string //最高学历", "identity": "string //当前身份", "currentGrade": "string //当前年级", "workPlace": "string //期望工作地点", "profession": "string //期望职业", "eduExperiences": [ { "degree": "string //教育层次", "school": "string //学校名称", "specialty": "string //专业", "grade": "string //专业排名", "startTime": "string //开始时间", "endTime": "string //结束时间" } ], "schoolExperiences": [ { "organization": "string //社团/组织名", "post": "string //职位", "startTime": "string //开始时间", "endTime": "string //结束时间", "description": "string //说明" } ], "projectExperiences": [ { "name": "string //项目名称", "content": "string //担任职务", "startTime": "string //开始时间", "endTime": "string //结束时间", "description": "string //说明" } ], "practiceExperiences": [ { "company": "string //公司名称", "post": "string //实习职位", "startTime": "string //开始时间", "endTime": "string //结束时间", "description": "string //说明" } ], "projectSkill": "string //项目技能", "honors": [ { "name": "string //荣誉名称", "time": "string //获得时间", "description": "string //说明" } ], "intro": "string //个人介绍" }, "time": "string //响应时间" } ``` ## 查看当前用户简历 *作者: STEA_YY* **请求URL** /resume/me `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "id": {}, "userId": "int //用户手机号(业务外键)", "name": "string //真实姓名", "phone": "string //手机号", "email": "string //电子邮箱", "gender": "string //性别", "birth": "string //出生年月", "highestDegree": "string //最高学历", "identity": "string //当前身份", "currentGrade": "string //当前年级", "workPlace": "string //期望工作地点", "profession": "string //期望职业", "eduExperiences": [ { "degree": "string //教育层次", "school": "string //学校名称", "specialty": "string //专业", "grade": "string //专业排名", "startTime": "string //开始时间", "endTime": "string //结束时间" } ], "schoolExperiences": [ { "organization": "string //社团/组织名", "post": "string //职位", "startTime": "string //开始时间", "endTime": "string //结束时间", "description": "string //说明" } ], "projectExperiences": [ { "name": "string //项目名称", "content": "string //担任职务", "startTime": "string //开始时间", "endTime": "string //结束时间", "description": "string //说明" } ], "practiceExperiences": [ { "company": "string //公司名称", "post": "string //实习职位", "startTime": "string //开始时间", "endTime": "string //结束时间", "description": "string //说明" } ], "projectSkill": "string //项目技能", "honors": [ { "name": "string //荣誉名称", "time": "string //获得时间", "description": "string //说明" } ], "intro": "string //个人介绍" }, "time": "string //响应时间" } ``` ## 修改当前用户简历 *作者: STEA_YY* **请求URL** /resume/updateResume `PUT` **请求体** ```json { "id": {}, "userId": "int //用户手机号(业务外键)", "name": "string //真实姓名", "phone": "string //手机号", "email": "string //电子邮箱", "gender": "string //性别", "birth": "string //出生年月", "highestDegree": "string //最高学历", "identity": "string //当前身份", "currentGrade": "string //当前年级", "workPlace": "string //期望工作地点", "profession": "string //期望职业", "eduExperiences": [ { "degree": "string //教育层次", "school": "string //学校名称", "specialty": "string //专业", "grade": "string //专业排名", "startTime": "string //开始时间", "endTime": "string //结束时间" } ], "schoolExperiences": [ { "organization": "string //社团/组织名", "post": "string //职位", "startTime": "string //开始时间", "endTime": "string //结束时间", "description": "string //说明" } ], "projectExperiences": [ { "name": "string //项目名称", "content": "string //担任职务", "startTime": "string //开始时间", "endTime": "string //结束时间", "description": "string //说明" } ], "practiceExperiences": [ { "company": "string //公司名称", "post": "string //实习职位", "startTime": "string //开始时间", "endTime": "string //结束时间", "description": "string //说明" } ], "projectSkill": "string //项目技能", "honors": [ { "name": "string //荣誉名称", "time": "string //获得时间", "description": "string //说明" } ], "intro": "string //个人介绍" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` # 轮播图相关请求 ## 获取全部启用的轮播图资源 *作者: STEA_YY* **请求URL** /slideShow/getAllSlideShowResourceEnabled `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": [ { "id": "int //主键", "pictureUrl": "string //轮播图图片url", "linkType": "int //链接类型", "linkUrl": "string //轮播图链接路径", "enabled": "boolean //是否启用", "uploadTime": "date //轮播图上传时间" } ], "time": "string //响应时间" } ``` # 短信业务相关请求 ## V1.2.1发送短信验证码 *作者: Qin Zhenghan* **请求URL** /sms/sendCode `POST` **请求体** ```json { "phone": "String //手机号【必须】", "type": "String //验证码类型【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 发送短信验证码 *作者: STEA_YY* **请求URL** /sms/code `POST` **请求体** ```json { "phone": "string //手机号【必须】", "type": "string //验证短信类型。取值register、changePassword、bindPhone【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` # 用户信息相关请求 ## 获取当前用户信息(包括全部详细信息和部分私有信息) *作者: STEA_YY* **请求URL** /userInfo/me `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "signedNotice": "boolean //是否签署服务协议", "signedContract": "boolean //是否签署合同", "authenticated": "int //是否通过身份认证", "ahaCredit": "double //aha币数量", "ahaPoint": "double //aha点数量", "role": { "id": "int //角色id", "name": "string //角色名称" }, "oauths": [ { "oauthType": "string //授权类型", "oauthId": "string //授权码" } ], "userInfo": { "userId": "int //用户id(外键)", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "birthday": "date //用户出生日期", "typeId": "int //用户类别", "signature": "string //用户个性签名", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "academy": "string //用户学院", "major": "string //用户主修专业", "grade": "int //用户当前年级", "intro": "string //用户自我介绍", "specialtyTags": "string //用户特长标签", "trueName": "string //用户真实姓名", "compTags": "string //用户参与过比赛标签", "vipLevelId": "int //用户VIP等级(外键)" } }, "time": "string //响应时间" } ``` ## 修改当前用户详细信息 *作者: STEA_YY* **请求URL** /userInfo/me `PUT` **请求体** ```json { "userId": "int //用户id(外键)", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "birthday": "date //用户出生日期", "typeId": "int //用户类别", "signature": "string //用户个性签名", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "academy": "string //用户学院", "major": "string //用户主修专业", "grade": "int //用户当前年级", "intro": "string //用户自我介绍", "specialtyTags": "string //用户特长标签", "trueName": "string //用户真实姓名", "compTags": "string //用户参与过比赛标签", "vipLevelId": "int //用户VIP等级(外键)" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 通过用户id查询用户详细信息 *作者: STEA_YY* **请求URL** /userInfo/{userId} `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "userId": "int //用户id(外键)", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "birthday": "date //用户出生日期", "typeId": "int //用户类别", "signature": "string //用户个性签名", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "academy": "string //用户学院", "major": "string //用户主修专业", "grade": "int //用户当前年级", "intro": "string //用户自我介绍", "specialtyTags": "string //用户特长标签", "trueName": "string //用户真实姓名", "compTags": "string //用户参与过比赛标签", "vipLevelId": "int //用户VIP等级(外键)" }, "time": "string //响应时间" } ``` ## 获取向COS上传公共文件签名,用于上传用户头像 *作者: STEA_YY* **请求URL** /userInfo/avatar/sign/upload `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | -------- | ------ | ---- | -------------------------- | | filename | string | 否 | 文件名(要上传的文件的全名) | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "bucketName": "string //目标bucketName", "region": "string //服务器地域", "policy": "string //经过 Base64 编码的“策略”(Policy)内容", "secretId": "string //COS SecretId", "keyTime": "string //COS KeyTime", "signature": "string //上传签名", "filename": "string //完整文件名" }, "time": "string //响应时间" } ``` # 用户统计信息类请求 ## 获取指定用户统计信息 *作者: STEA_YY* **请求URL** /statistics/{userId} `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "userId": "int //主键", "totalContribPoint": "double //累计获取贡献点", "totalProject": "int //累计参与项目数", "totalReceivedCollection": "int //累计获得的收藏", "totalPurchasedCount": "int //累计被购买次数" }, "time": "string //响应时间" } ``` ## 获取用户个人统计信息 *作者: STEA_YY* **请求URL** /statistics/me `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "userId": "int //主键", "totalContribPoint": "double //累计获取贡献点", "totalProject": "int //累计参与项目数", "totalReceivedCollection": "int //累计获得的收藏", "totalPurchasedCount": "int //累计被购买次数" }, "time": "string //响应时间" } ``` # 活动后台管理类请求 ## 新建活动 *作者: STEA_YY* **请求URL** /admin/activity/saveActivity `POST` **请求体** ```json { "title": "string //活动标题【必须】", "intro": "string //活动介绍【必须】", "startTime": "date //活动开始时间【必须】", "endTime": "date //活动结束时间【必须】", "exchangeAhaPoint": "double //兑换aha点数额【必须】", "exchangeAhaCredit": "double //兑换aha币数额【必须】", "codeSum": "int //活动最大允许兑换券数量【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 删除活动 *作者: STEA_YY* **请求URL** /admin/activity/{activityId} `DELETE` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 生成指定数量兑换码 *作者: STEA_YY* **请求URL** /admin/activity/code `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ---------- | ---- | ---- | -------- | | activityId | int | 是 | 活动id | | count | int | 是 | 生成数量 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "string[] //响应数据", "time": "string //响应时间" } ``` ## 获取当前已发放兑换码数量 *作者: STEA_YY* **请求URL** /admin/activity/code/count `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "int //响应数据", "time": "string //响应时间" } ``` # 竞赛后台管理类请求 ## 保存竞赛信息 *作者: STEA_YY* **请求URL** /admin/competition/ `POST` **请求体** ```json { "id": "int", "typeId": "int //竞赛类别id(外键)", "level": "int //竞赛级别", "name": "string //赛事名称", "intro": "string //赛事简介", "picUrl": "int //赛事图片保存路径" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 根据竞赛id更新竞赛信息 *作者: STEA_YY* **请求URL** /admin/competition/{id} `PUT` **请求体** ```json { "id": "int", "typeId": "int //竞赛类别id(外键)", "level": "int //竞赛级别", "name": "string //赛事名称", "intro": "string //赛事简介", "picUrl": "int //赛事图片保存路径" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 删除竞赛信息 *作者: STEA_YY* **请求URL** /admin/competition/{id} `DELETE` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 保存竞赛标签 *作者: STEA_YY* **请求URL** /admin/competition/tag `POST` **请求体** ```json { "id": "int", "name": "string" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 根据竞赛标签id更新竞赛标签 *作者: STEA_YY* **请求URL** /admin/competition/tag/{id} `PUT` **请求体** ```json { "id": "int", "name": "string" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 删除竞赛标签 *作者: STEA_YY* **请求URL** /admin/competition/tag/{id} `DELETE` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` # 用户反馈后台管理相关请求 ## 分页查看用户反馈 *作者: STEA_YY* **请求URL** /admin/feedback/getAllPersonalFeedback `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------------ | ------ | ---- | ---------------------------------------------------- | | pageNum | int | 否 | 页码 | | pageSize | int | 否 | 分页大小 | | userId | int | 否 | 用户id | | status | int | 否 | 处理状态 | | type | int | 否 | 反馈类型 | | lowestLevel | int | 否 | 最低级别 | | highestLevel | int | 否 | 最高级别 | | sortBy | string | 否 | 排序关键字,取值time、status、type、level、replyTime | | orderBy | string | 否 | 排序方式,取值asc、desc | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "pageNum": "int //页码", "pageSize": "int //分页大小", "pageData": [ { "id": "int", "user": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "time": "date //反馈时间", "type": "int //反馈类型", "content": "string //反馈内容", "status": "int //反馈状态", "reply": "string //反馈回复", "replyTime": "date //反馈回复时间", "level": "int //反馈问题级别" } ] }, "time": "string //响应时间" } ``` ## 管理员处理用户反馈 *作者: STEA_YY* **请求URL** /admin/feedback/{feedbackId} `PUT` **请求体** ```json { "status": "int //反馈状态", "reply": "string //反馈回复", "level": "int //反馈问题级别" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` # 站内信后台管理类请求 ## 发送群发系统消息(广播) *作者: STEA_YY* **请求URL** /admin/message/systemNotice `POST` **请求体** ```json { "receiverUserId": "int //收件人用户id", "type": "int //类型", "textId": "int //信件内容id(外键)", "title": "string //信件标题", "content": "string //信件内容【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 向指定用户发送系统消息 *作者: STEA_YY* **请求URL** /admin/message/systemPrivate `POST` **请求体** ```json { "receiverUserId": "int //收件人用户id", "type": "int //类型", "textId": "int //信件内容id(外键)", "title": "string //信件标题", "content": "string //信件内容【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` # 通知后台管理类请求 ## 获取全部公告 *作者: STEA_YY* **请求URL** /admin/notice/getAllNotice `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": [ { "id": "int", "title": "string //公告标题", "content": "string //公告内容", "createTime": "date //公告开始日期", "puttingStartTime": "date //公告投放开始日期", "puttingEndTime": "date //公告投放结束日期", "enable": "boolean //公告是否启用" } ], "time": "string //响应时间" } ``` ## 发布公告 *作者: STEA_YY* **请求URL** /admin/notice/sendNotice `POST` **请求体** ```json { "title": "string //公告标题【必须】", "content": "string //公告内容【必须】", "puttingStartTime": "date //公告投放开始日期【必须】", "puttingEndTime": "date //公告投放结束日期【必须】", "enable": "boolean //公告是否启用【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 修改公告 *作者: STEA_YY* **请求URL** /admin/notice/{noticeId} `PUT` **请求体** ```json { "title": "string //公告标题【必须】", "content": "string //公告内容【必须】", "puttingStartTime": "date //公告投放开始日期【必须】", "puttingEndTime": "date //公告投放结束日期【必须】", "enable": "boolean //公告是否启用【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` # 项目后台管理类请求 ## 分页获取所有项目粗略信息 *作者: STEA_YY* **请求URL** /admin/project/getAllProjectPageable `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ----------- | ------- | ---- | -------------- | | pageNum | int | 否 | 页码 | | pageSize | int | 否 | 分页大小 | | userId | int | 否 | 用户id | | compId | int | 否 | 竞赛id | | awardLevel | int | 否 | 获奖级别 | | sortBy | string | 否 | 排序关键字 | | orderBy | string | 否 | 排序方式 | | passed | boolean | 否 | 是否通过审核 | | isAnonymous | boolean | 否 | 是否为匿名项目 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "pageNum": "int //页码", "pageSize": "int //分页大小", "pageData": [ { "id": "int //项目id", "creatorUser": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "name": "string //项目名称", "read": "int //点击率", "collect": "int //收藏数量", "avatarUrl": "string //团队头像url", "tags": "string //项目标签", "compId": "int //赛事id(外键)", "awardLevel": "int //项目获奖级别", "awardTime": "date //项目获奖时间", "passed": "boolean //是否通过审核" } ] }, "time": "string //响应时间" } ``` ## 按条件分页获取项目资源 *作者: STEA_YY* **请求URL** /admin/project/resource `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | -------------- | ------- | ---- | ------------------------ | | pageNum | int | 否 | 页码 | | pageSize | int | 否 | 分页大小 | | projectId | int | 否 | 项目id | | resourcePassed | boolean | 否 | 资源是否通过审核 | | projectPassed | boolean | 否 | 资源所在项目是否通过审核 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "pageNum": "int //页码", "pageSize": "int //分页大小", "pageData": [ { "id": "int //项目资源id", "projectId": "int //项目id(外键)", "name": "string //资源名称(前端显示,如“城市鹰眼”智慧交通大数据挖掘系统-项目详细文档)", "fileType": "int //资源文件类型", "typeId": "int //资源类型id(外键)", "filename": "string //保存在oss里的资源文件名(包括前缀)", "previewUrl": "string //保存在oss里的预览文件地址", "download": "int //资源文件下载量", "score": "double //资源平均分", "scoreCount": "int //评分人数", "price": "double //资源价格", "discount": "double //资源折扣", "passed": "boolean //是否通过审核" } ] }, "time": "string //响应时间" } ``` ## 根据项目id获取所有项目资源 *作者: STEA_YY* **请求URL** /admin/project/{projectId}/resources `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": [ { "id": "int //项目资源id", "projectId": "int //项目id(外键)", "name": "string //资源名称(前端显示,如“城市鹰眼”智慧交通大数据挖掘系统-项目详细文档)", "fileType": "int //资源文件类型", "typeId": "int //资源类型id(外键)", "filename": "string //保存在oss里的资源文件名(包括前缀)", "previewUrl": "string //保存在oss里的预览文件地址", "download": "int //资源文件下载量", "score": "double //资源平均分", "scoreCount": "int //评分人数", "price": "double //资源价格", "discount": "double //资源折扣", "passed": "boolean //是否通过审核" } ], "time": "string //响应时间" } ``` ## 获取项目资源文件COS下载签名 *作者: STEA_YY* **请求URL** /admin/project/resource/{projectResourceId}/sign/download `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "bucketName": "string //目标bucketName", "region": "string //服务器地域", "authorization": "string //上传签名", "expire": "long //签名过期时间戳", "filename": "string //完整文件名" }, "time": "string //响应时间" } ``` ## 管理员获取COS私有资源上传签名(用于上传资源文件) *作者: STEA_YY* **请求URL** /admin/project/{projectId}/resources/sign/upload/private `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | -------- | ------ | ---- | ------------ | | filename | string | 否 | 待上传文件名 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "bucketName": "string //目标bucketName", "region": "string //服务器地域", "policy": "string //经过 Base64 编码的“策略”(Policy)内容", "secretId": "string //COS SecretId", "keyTime": "string //COS KeyTime", "signature": "string //上传签名", "filename": "string //完整文件名" }, "time": "string //响应时间" } ``` ## 管理员新建项目并指定作者用户 *作者: STEA_YY* **请求URL** /admin/project/saveProjectAndAuthor `POST` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------------- | ---- | ---- | ------------ | | creatorUserId | int | 是 | 创建者用户id | **请求体** ```json { "name": "string //团队名称【必须】", "avatarUrl": "string //团队头像url", "compId": "int //赛事id(外键)【必须】", "compName": "string //比赛和获奖全名(如中国大学生服务外包创新创业大赛全国一等奖)", "awardLevel": "int //项目获奖级别", "tags": "string //项目标签", "awardTime": "date //项目获奖时间", "awardProveUrl": "string //获奖证明文件url", "intro": "string //团队介绍(富文本)" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "int //响应数据", "time": "string //响应时间" } ``` ## 管理员新增项目资源 *作者: STEA_YY* **请求URL** /admin/project/resource/{projectId} `POST` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | --------- | ---- | ---- | ------ | | projectId | int | 否 | 项目id | **请求体** ```json { "name": "string //资源名称(前端显示,如“城市鹰眼”智慧交通大数据挖掘系统-项目详细文档)【必须】", "fileType": "int //资源文件类型【必须】", "typeId": "int //资源类型id(外键)【必须】", "filename": "string //保存在oss里的资源文件名(包括前缀)【必须】", "price": "double //资源价格【必须】", "discount": "double //资源折扣【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "int //响应数据", "time": "string //响应时间" } ``` ## 管理员创建项目成员 *作者: STEA_YY* **请求URL** /admin/project/member/{projectId} `POST` **请求体** ```json { "projectId": "int", "memberUserId": "int //团队成员id【必须】", "rank": "int //团队成员顺位(决定显示顺序,1为队长)【必须】", "job": "string //团队成员职务【必须】", "editable": "boolean //成员是否可编辑项目信息【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 审核项目 *作者: STEA_YY* **请求URL** /admin/project/check/{projectId} `POST` **请求体** ```json { "meaning": "double //项目资源完整程度,决定贡献点【必须】", "passed": "boolean //是否通过审核【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 审核项目资源 *作者: STEA_YY* **请求URL** /admin/project/resource/check/{resourceId} `POST` **请求体** ```json { "passed": "boolean【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 分页获取项目购买记录 *作者: STEA_YY* **请求URL** /admin/project/resource/purchased `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ---------- | ---- | ---- | ---------- | | pageNum | int | 否 | 页码 | | pageSize | int | 否 | 分页大小 | | resourceId | int | 否 | 项目资源id | | projectId | int | 否 | 项目id | | userId | int | 否 | 用户id | | orderId | int | 否 | 订单id | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "pageNum": "int //页码", "pageSize": "int //分页大小", "pageData": [ { "userId": "int //用户id", "resourceId": "int //资源id", "purchaseTime": "date //购买时间", "contribPointOrder": { "id": "int //订单号", "user": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "project": { "id": "int //项目id", "creatorUser": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "name": "string //项目名称", "read": "int //点击率", "collect": "int //收藏数量", "avatarUrl": "string //团队头像url", "tags": "string //项目标签", "compId": "int //赛事id(外键)", "awardLevel": "int //项目获奖级别", "awardTime": "date //项目获奖时间", "passed": "boolean //是否通过审核" }, "totalCost": "double //订单总价", "status": "int //订单状态", "createTime": "date //订单创建时间", "payTime": "date //订单支付时间", "orderResources": [ { "resource": { "id": "int //项目资源id", "projectId": "int //项目id(外键)", "name": "string //资源名称(前端显示,如“城市鹰眼”智慧交通大数据挖掘系统-项目详细文档)", "fileType": "int //资源文件类型", "typeId": "int //资源类型id(外键)", "filename": "string //保存在oss里的资源文件名(包括前缀)", "previewUrl": "string //保存在oss里的预览文件地址", "download": "int //资源文件下载量", "score": "double //资源平均分", "scoreCount": "int //评分人数", "price": "double //资源价格", "discount": "double //资源折扣", "passed": "boolean //是否通过审核" }, "discount": "double //资源折扣", "price": "double //贡献点小计" } ], "chargedAhaCredit": "double //订单实际支付aha币", "chargedAhaPoint": "double //订单实际支付aha点" } } ] }, "time": "string //响应时间" } ``` ## 修改项目详细信息 *作者: STEA_YY* **请求URL** /admin/project/{projectId} `PUT` **请求体** ```json { "name": "string //团队名称【必须】", "avatarUrl": "string //团队头像url", "compId": "int //赛事id(外键)【必须】", "compName": "string //比赛和获奖全名(如中国大学生服务外包创新创业大赛全国一等奖)", "awardLevel": "int //项目获奖级别", "tags": "string //项目标签", "awardTime": "date //项目获奖时间", "awardProveUrl": "string //获奖证明文件url", "intro": "string //团队介绍(富文本)" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 删除项目 *作者: STEA_YY* **请求URL** /admin/project/{projectId} `DELETE` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 修改项目成员信息 *作者: STEA_YY* **请求URL** /admin/project/member/{projectId}/{memberUserId} `PUT` **请求体** ```json { "projectId": "int", "memberUserId": "int //团队成员id【必须】", "rank": "int //团队成员顺位(决定显示顺序,1为队长)【必须】", "job": "string //团队成员职务【必须】", "editable": "boolean //成员是否可编辑项目信息【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 修改多个项目成员信息 *作者: STEA_YY* **请求URL** /admin/project/members/{projectId} `PUT` **请求体** ```json [ { "projectId": "int", "memberUserId": "int //团队成员id【必须】", "rank": "int //团队成员顺位(决定显示顺序,1为队长)【必须】", "job": "string //团队成员职务【必须】", "editable": "boolean //成员是否可编辑项目信息【必须】" } ] ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 删除项目成员 *作者: STEA_YY* **请求URL** /admin/project/member/{projectId}/{memberUserId} `DELETE` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 修改项目资源信息 *作者: STEA_YY* **请求URL** /admin/project/resource/{projectResourceId} `PUT` **请求参数** 参数名|类型|必须|描述 --:|:--:|:--:|:-- projectResourceId|int|否|项目资源id **请求体** ```json { "name": "string //资源名称(前端显示,如“城市鹰眼”智慧交通大数据挖掘系统-项目详细文档)", "fileType": "int //资源文件类型", "typeId": "int //资源类型id(外键)", "price": "double //资源价格", "discount": "double //资源折扣" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 删除项目资源 *作者: STEA_YY* **请求URL** /admin/project/resource/{projectResourceId} `DELETE` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 删除资源评论 *作者: STEA_YY* **请求URL** /admin/project/resource/score/{projectResourceId} `DELETE` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` # 轮播图后台管理类请求 ## 获取指定轮播图资源 *作者: STEA_YY* **请求URL** /admin/slideShow/{id} `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "id": "int //主键", "pictureUrl": "string //轮播图图片url", "linkType": "int //链接类型", "linkUrl": "string //轮播图链接路径", "enabled": "boolean //是否启用", "uploadTime": "date //轮播图上传时间" }, "time": "string //响应时间" } ``` ## 按条件获取全部轮播图资源 *作者: STEA_YY* **请求URL** /admin/slideShow/getAllSlideShowResourceEnabled `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------- | ------- | ---- | -------- | | enabled | boolean | 否 | 是否启用 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": [ { "id": "int //主键", "pictureUrl": "string //轮播图图片url", "linkType": "int //链接类型", "linkUrl": "string //轮播图链接路径", "enabled": "boolean //是否启用", "uploadTime": "date //轮播图上传时间" } ], "time": "string //响应时间" } ``` ## 新建轮播图资源 *作者: STEA_YY* **请求URL** /admin/slideShow/saveSlideShowResource `POST` **请求体** ```json { "pictureUrl": "string //轮播图图片url【必须】", "linkType": "int //链接类型【必须】", "linkUrl": "string //轮播图链接路径【必须】", "enabled": "boolean //是否启用【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 更新轮播图资源 *作者: STEA_YY* **请求URL** /admin/slideShow/{id} `PUT` **请求体** ```json { "pictureUrl": "string //轮播图图片url【必须】", "linkType": "int //链接类型【必须】", "linkUrl": "string //轮播图链接路径【必须】", "enabled": "boolean //是否启用【必须】" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 删除轮播图资源 *作者: STEA_YY* **请求URL** /admin/slideShow/{id} `DELETE` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` # 用户后台管理类请求 ## 分页获取所有用户信息 *作者: STEA_YY* **请求URL** /admin/user/getAllUserManagementVoPagable `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | -------------- | ------- | ---- | ---------------- | | pageNum | int | 否 | 页码 | | pageSize | int | 否 | 分页大小 | | roleId | int | 否 | 角色id | | signedNotice | boolean | 否 | 是否签署服务协议 | | signedContract | boolean | 否 | 是否签署合同 | | typeId | int | 否 | 用户类型 | | nicknameLike | string | 否 | 模糊昵称 | | trueNameLike | string | 否 | 模糊真实姓名 | | sortBy | string | 否 | 排序关键字 | | orderBy | string | 否 | 排序方式 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "pageNum": "int //页码", "pageSize": "int //分页大小", "pageData": [ { "id": "int //用户id", "createdTime": "date //账户首次登录时间", "studentRecFilename": "string //学生证图片保存路径", "ahaCredit": "double //aha币数量", "ahaPoint": "double //aha点数量", "signedNotice": "boolean //是否签署服务协议", "signedContract": "boolean //是否签署合同", "authenticated": "int //是否通过身份认证", "roleId": "int //角色id(外键)", "role": { "id": "int //角色id", "name": "string //角色名称" }, "nickname": "string //用户昵称", "gender": "boolean //用户性别", "birthday": "date //用户出生日期", "typeId": "int //用户类别", "signature": "string //用户个性签名", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "academy": "string //用户学院", "major": "string //用户主修专业", "grade": "int //用户当前年级", "intro": "string //用户自我介绍", "specialtyTags": "string //用户特长标签", "trueName": "string //用户真实姓名", "compTags": "string //用户参与过比赛标签" } ] }, "time": "string //响应时间" } ``` ## 获取用户信息 *作者: STEA_YY* **请求URL** /admin/user/{userId} `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "id": "int //用户id", "createdTime": "date //账户首次登录时间", "studentRecFilename": "string //学生证图片保存路径", "ahaCredit": "double //aha币数量", "ahaPoint": "double //aha点数量", "signedNotice": "boolean //是否签署服务协议", "signedContract": "boolean //是否签署合同", "authenticated": "int //是否通过身份认证", "roleId": "int //角色id(外键)", "role": { "id": "int //角色id", "name": "string //角色名称" }, "nickname": "string //用户昵称", "gender": "boolean //用户性别", "birthday": "date //用户出生日期", "typeId": "int //用户类别", "signature": "string //用户个性签名", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "academy": "string //用户学院", "major": "string //用户主修专业", "grade": "int //用户当前年级", "intro": "string //用户自我介绍", "specialtyTags": "string //用户特长标签", "trueName": "string //用户真实姓名", "compTags": "string //用户参与过比赛标签" }, "time": "string //响应时间" } ``` ## 修改用户私有信息 *作者: STEA_YY* **请求URL** /admin/user/user/{userId} `PUT` **请求体** ```json { "studentRecFilename": "string //学生证图片保存路径", "contribPoint": "double //贡献点", "signedNotice": "boolean //是否签署服务协议", "signedContract": "boolean //是否签署合同", "roleId": "int //角色id(外键)" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 修改用户公开信息 *作者: STEA_YY* **请求URL** /admin/user/info/{userId} `PUT` **请求体** ```json { "userId": "int //用户id(外键)", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "birthday": "date //用户出生日期", "typeId": "int //用户类别", "signature": "string //用户个性签名", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "academy": "string //用户学院", "major": "string //用户主修专业", "grade": "int //用户当前年级", "intro": "string //用户自我介绍", "specialtyTags": "string //用户特长标签", "trueName": "string //用户真实姓名", "compTags": "string //用户参与过比赛标签", "vipLevelId": "int //用户VIP等级(外键)" } ``` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 删除用户 *作者: STEA_YY* **请求URL** /admin/user/{userId} `DELETE` **请求参数** 参数名|类型|必须|描述 --:|:--:|:--:|:-- userId|int|否|用户id **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 获取用户合同信息 *作者: STEA_YY* **请求URL** /admin/user/contract/{userId} `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "id": "int", "userId": "int //用户id(外键)", "name": "string //联系人", "signatureFilename": "string //签名文件名", "signTime": "date //合同签名时间" }, "time": "string //响应时间" } ``` ## 下载用户合同签名 *作者: STEA_YY* **请求URL** /admin/user/contract/signature/{userId} `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` ## 分页获取身份认证信息 *作者: STEA_YY* **请求URL** /admin/user/authentication `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | -------- | ---- | ---- | ------------ | | pageNum | int | 否 | 页面 | | pageSize | int | 否 | 分页大小 | | status | int | 否 | 审核状态 | | type | int | 否 | 身份认证类型 | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "pageNum": "int //页码", "pageSize": "int //分页大小", "pageData": [ { "user": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "trueName": "string //真实姓名", "type": "int //认证类型(学生or社会人士)", "studentCardFilename": "string //学生证图片文件名", "idCardFrontFilename": "string //身份证正面文件名", "idCardBackFilename": "string //身份证背面文件名", "status": "int //认证审核状态", "uploadTime": "date //上传日期", "passTime": "date //审核通过日期" } ] }, "time": "string //响应时间" } ``` ## 根据用户id获取实名认证信息 *作者: STEA_YY* **请求URL** /admin/user/authentication/{userId} `GET` **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "user": { "userId": "int //用户id", "nickname": "string //用户昵称", "gender": "boolean //用户性别", "avatarUrl": "string //用户头像文件保存路径", "school": "string //用户学校", "vipLevelId": "int //用户VIP等级(外键)" }, "trueName": "string //真实姓名", "type": "int //认证类型(学生or社会人士)", "studentCardFilename": "string //学生证图片文件名", "idCardFrontFilename": "string //身份证正面文件名", "idCardBackFilename": "string //身份证背面文件名", "status": "int //认证审核状态", "uploadTime": "date //上传日期", "passTime": "date //审核通过日期" }, "time": "string //响应时间" } ``` ## 获取身份认证照片下载签名 *作者: STEA_YY* **请求URL** /admin/user/authentication/file/{userId} `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | -------- | ------ | ---- | ------------------------------------------------------------ | | userId | int | 否 | 用户id | | fileType | string | 否 | 文件类型(取值:studentCard-学生证,idCardFront-身份证正面,idCardBack-身份证反面) | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": { "bucketName": "string //目标bucketName", "region": "string //服务器地域", "authorization": "string //上传签名", "expire": "long //签名过期时间戳", "filename": "string //完整文件名" }, "time": "string //响应时间" } ``` ## 审核身份认证信息 *作者: STEA_YY* **请求URL** /admin/user/authentication/check/{userId} `PUT` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | ------ | ---- | ---- | ------------------------------ | | status | int | 否 | 审核结果(取值:1-通过,2-不通过) | **返回结果** ```json { "code": "int //响应状态码", "msg": "string //响应消息", "data": "object //响应数据", "time": "string //响应时间" } ``` # 人才市场类请求 ## 获取人才市场用户 *作者: Qin Zhenghan* **请求URL** /talentMarket `GET` **请求参数** | 参数名 | 参数类型 | 是否必须 | 描述 | | -------- | -------- | -------- | ------------------------------------------------------------ | | strategy | string | 否 | ranking-排行榜推荐策略,random-随机推荐策略,为空或其他均为排行榜策略 | **返回结果** ```json { "code": 200, "msg": "succ", "data": [ { "userId": "int // 用户id", "nickname": "string // 用户名", "avatarUrl": "string // 头像url", "specialtyTags": "string // 用户特长标签", "totalContribPoint": "BigDecimal // 用户累计贡献点", "totalReceivedCollection": "int // 用户累计获取收藏", "projectInfo": [ { "name": "string //项目名", "awardLevel": "int //竞赛获奖级别", "type": "null //待补充字段" }, { "name": "string //项目名", "awardLevel": "int //竞赛获奖级别", "type": "null //待补充字段" } ] } ] } ``` **备注** 人才市场用户每一小时更新一次,为贡献点前两百名用户随机抽取五十人组成的list # 用户轨迹信息相关 ## 获取用户所有的活动轨迹 作者:cygao **请求URL** /user/track/{userId} `GET` **请求参数** | 参数名 | 是否必须 | 描述 | | ------ | -------- | ------------------------------------------------------------ | | type | 否 | 筛选条件(可以为空,为空时会返回注册时的轨迹),project-项目 (其余参数如服务外包待补充) | **Response** ```json { "code": 200, "msg": "succ", "data": [ { "id": 2, "userId": 113, "date": "2020-08-01T00:00:00.000+0800", "trackName": "僵尸企业画像识别", "result": "全国大学生服务外包创新创业大赛", "passed": true, "pid": 160 }, { "id": 3, "userId": 113, "date": "2019-10-01T00:00:00.000+0800", "trackName": "电影影评分析", "result": "DDT大数据竞赛", "passed": true, "pid": 162 }, { "id": 4, "userId": 113, "date": "2019-12-01T00:00:00.000+0800", "trackName": "基于满意度的教学评价体系的分析与探究", "result": "浙江工业大学数学建模竞赛", "passed": true, "pid": 163 } ], "time": "2021-04-18 14:36:17" } ``` **备注** 只会返回通过的用户轨迹,每次部署项目时会自动刷新每一个用户的用户轨迹 # 项目公开评论相关 ## 新建公开评论 作者:cygao **请求URL** /project/discuss `POST` **请求体** ```json { "projectId": "int //项目id", "comment": "string // 评论内容" } ``` ## 分页获取项目公开评论 作者:cygao **请求URL** /project/discuss/{projectId} `GET` **请求参数** | 参数名 | 是否必须 | 描述 | | -------- | -------- | -------- | | pageNum | 是 | 页数 | | pageSize | 是 | 页面大小 | **Response** ```json { "code": 200, "msg": "succ", "data": { "pageNum": 1, "pageSize": 2, "pageData": [ { "id": 1, "user": { "userId": 100411, "nickname": "15915439929", "gender": null, "avatarUrl": null, "school": null, "vipLevelId": null }, "projectId": 202, "comment": "歪比巴卜", "time": "2021-04-17T10:48:21.000+0800" }, { "id": 3, "user": { "userId": 100411, "nickname": "15915439929", "gender": null, "avatarUrl": null, "school": null, "vipLevelId": null }, "projectId": 202, "comment": "阿巴阿巴!!", "time": "2021-04-17T10:49:35.000+0800" } ] }, "time": "2021-04-18 09:59:34" } ``` ## 删除用户公开评论 作者:cygao **请求URL** /project/discuss/{discussId} `DELETE` **备注** 用户只允许删除自己发表的评论 # 用户粉丝关注相关 ## 关注用户 作者:cygao **请求URL** /user/follow/{userId} `POST` ## 取关用户 作者:cygao **请求URL** /user/unfollow/{userId} `POST` ## 查询用户关系 作者:cygao **请求URL** /user/relation/{userId} `GET` **Response** ```json { "code": 200, "msg": "succ", "data": "int //0-无关系 1-代表自己 2-已关注 3-自己的粉丝 4-互关", "time": "2021-04-17 14:46:46" } ``` ## 查询粉丝列表 作者:cygao **请求URL** /user/fans `GET` **Response** ```json { "code": 200, "msg": "succ", "data": [ 111, 222, 333, "int // 粉丝用户id" ], "time": "2021-04-17 14:50:10" } ``` ## 查询粉丝数量 作者:cygao **请求URL** /user/fansLen `GET` **Response** ```json { "code": 200, "msg": "succ", "data": "8 int // 粉丝人数", "time": "2021-04-17 14:52:34" } ``` ## 查询关注列表 作者:cygao **请求URL** `GET` /user/followers **Response** ```json { "code": 200, "msg": "succ", "data": [ 111, 222, 333, "int // 关注用户id" ], "time": "2021-04-17 14:50:10" } ``` ## 查询关注数量 作者:cygao **请求URL** `GET` /user/followersLen **Response** ```json { "code": 200, "msg": "succ", "data": "8 // 关注人数", "time": "2021-04-17 14:52:34" } ``` # 组队相关 ## 获取队伍详情 作者:cygao **请求URL** `GET` /team/{teamId} **Response** ```json { "code": 200, "msg": "succ", "data": { "id": "12 //int 队伍id", "captainId": "100411 //int 队长id", "name": "天下第一屌炸天 // string 队伍名", "school": "学校 // string", "avatar": "头像 // string", "recruitState": "0 // int 招聘状态 0-招聘中 1-急聘中 2-不招聘", "recruitContent": "招人啦啦啦 // string 招聘内容", "tag": "竞赛|挑战杯 // string 标签", "comp": "比赛 // string", "intro": "Hello Java Python JavaScript Golang // string 队伍介绍", "createTime": "2021-04-29T13:07:30.000+0800", "members": [ { "role": "创始人 //string 队员角色", "joinTime": "2021-04-29T14:08:39.000+0800", "isAdmin": true, "memberIntro": null, "memberRoughInfo": { "userId": 100411, "nickname": "@@::@@", "gender": null, "avatarUrl": "https://thirdwx.qlogo.cn/mmhead/Tsx6zdNibRwea9mWodsuja5Zicm8bOE2s6VSU7wG1EJoU/132", "school": null, "vipLevelId": null }, "tid": 12, "uid": 100411 }, { "role": null, "joinTime": "2021-04-29T13:57:23.000+0800", "isAdmin": false, "memberIntro": null, "memberRoughInfo": { "userId": 133, "nickname": "陈宜静", "gender": null, "avatarUrl": "https://thirdwx.qlogo.cn/mmhead/J04YvyWlJjk1gcvkAYcicHul0mDcY4WRDBAp8G7cl3ek/132", "school": null, "vipLevelId": null }, "tid": 12, "uid": 133 } ] }, "time": "2021-04-29 14:17:26" } ``` ## 获取用户所在的所有队伍 作者:cygao **请求URL** `GET` /team/me **Response** ``` // 返回多个队伍详情,队伍内容同上 ``` ## 根据策略获取队伍列表 作者:cygao **请求URL**`GET` /team **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | -------- | ------ | -------- | --------------------------------------------- | | strategy | string | 否 | random-随机获取策略 ranking(默认)-排行榜策略 | | recruit | int | 否 | 招聘状态(默认全部) 0-不招聘 1-招聘中 2-急聘中 | | pageNum | int | 否 | 页码 1-开始 默认为1 | | pageSIze | int | 否 | 页面大小 默认为50 | **Response** ``` // 返回多个队伍详情,队伍内容同上 ``` ## 新建队伍 作者:cygao **请求URL** `POST` /team **请求body** ```json { "name": "string //队伍名称(必须)", "school": "string // 学校", "tag": "string // 队伍标签", "avatar": "string // 头像", "comp": "string // 团队获奖资源标签汇总", "intro": "text // 队伍介绍", "recruitState": "int // 招聘状态 0-不招聘 1-招聘中 2-急聘中", "recruitContent": "string // 招聘内容" } ``` ## 修改队伍信息 作者:cygao **请求URL** `PUT` /team/{teamId} **请求body** ```json { "name": "string //队伍名称(必须)", "school": "string // 学校", "tag": "string // 队伍标签", "avatar": "string // 头像", "comp": "string // 团队获奖资源标签汇总", "intro": "text // 队伍介绍", "recruitState": "int // 招聘状态 0-不招聘 1-招聘中 2-急聘中", "recruitContent": "string // 招聘内容" } ``` ## 解散队伍 作者:cygao **请求URL** `DELETE` /team/{teamId} **备注** 只有队长才有权限解散队伍 ## 邀请成员 作者:cygao **请求URL** `POST` /team/invite/{teamId}/{memberId} **备注** 只有队长or管理员才可以邀请 ## 修改队员身份 作者:cygao **请求URL** `POST` /team/assign/{teamId}/{userId} **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | ------- | ------- | -------- | -------------------------------- | | isAdmin | boolean | 是 | true-任命为管理员 false-非管理员 | **备注** 只有队长or管理员才能修改 ## 移交队长权限 作者:cygao **请求URL** `POST` /team/handover/{teamId}/{memberId} **备注** 只有队长才有权限 ## 修改队员信息 作者:cygao **请求URL** `PUT` /team/member/{teamId} **请求body** ```json { "role": "string // 队员角色(可以为空", "memberIntro": "string // 队员介绍(可以为空" } ``` ## 踢出队员 作者:cygao **请求URL** `DELETE` /team/member/{teamId}/{memberId} **备注** 只有管理员or队长可以踢人,管理员可以踢管理员,任何人不能踢队长 ## 申请加入队伍 作者:cygao **请求URL** `POST` /team/apply/{teamId} **请求参数** ```json { "intro": "string 申请内容" } ``` ## 查询我的申请 作者:cygao **请求URL** `GET` /team/apply/me/{teamId} **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | ------ | ---- | -------- | --------------------------------- | | state | int | 否 | 申请状态 0-未审批 1-通过 2-未通过 | **Response** ```json { "code": 200, "msg": "succ", "data": [ { "state": 1, "applyTime": "2021-04-29T14:04:34.000+0800", "handleTime": "2021-04-29T14:08:39.000+0800", "userInfo": { "userId": 132, "nickname": "@@::@@", "gender": null, "avatarUrl": "https://thirdwx.qlogo.cn/mmhead/Tsx6zdNibRwea9mWodsuja5Zicm8bOE2s6VSU7wG1EJoU/132", "school": null, "vipLevelId": null }, "intro": "I'm Amazon architect", "tid": 12, "uid": 132 } ], "time": "2021-04-29 16:32:44" } ``` **备注** 路径参数 teamId 可以为空,代表查询该用户的所有申请 ## 查询队伍的申请 作者:cygao **请求URL** `GET` /team/apply/{teamId} **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | ------ | ---- | -------- | --------------------------------- | | state | int | 否 | 申请状态 0-未审批 1-通过 2-未通过 | **Response** ```json { "code": 200, "msg": "succ", "data": [ { "state": 1, "applyTime": "2021-04-29T14:04:34.000+0800", "handleTime": "2021-04-29T14:08:39.000+0800", "intro": "I'm Amazon architect", "tid": 12, "uid": 132 } ], "time": "2021-04-29 16:32:44" } ``` ## 撤销申请 作者:cygao **请求URL** `DELETE` /team/apply/{teamId} ## 审核队伍申请表 作者:cygao **请求URL** `POST` /team/apply/check/{teamId}/{memberId} **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | ------ | ---- | -------- | --------------------------------- | | state | int | 是 | 申请状态 0-未审批 1-通过 2-未通过 | **备注** 只有队长or管理员才允许审批 # 论坛相关 ## 论坛接口阅前须知 **默认加载方式** - 分页加载帖子默认加载最**新**的 - 分页加载评论默认加载最**热**的 - 分页加载回复默认加载最**新**的 **返回的对象类型** - Post对象 - PostDetail对象 - Comment对象 - Reply对象 **分页方式** - 帖子相关接口初始页码均为**0** ## 获取帖子详情 作者:cygao **请求URL** `GET` /post/detail/{postId} **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | ---------- | ------ | ----------------- | ------------------------------------------- | | commentNum | int | 否(默认10) | 加载评论数量 | | cLoadBy | string | 否(默认hottest) | 加载评论策略 hottest-最热(默认) latest-最新 | | replyNum | int | 否(默认3) | 每条评论加载回复数量 | | rLoadBy | string | 否(默认lattest) | 加载回复策略 hottest-最热 latest-最新(默认) | **Post对象** | 字段名 | 字段类型 | 描述 | | ----------- | ------------------------ | ------------------------------ | | id | string | 帖子id | | title | string | 标题 | | tagId | int | 帖子所属标签id | | createTime | date | 发表时间 | | updateTime | date | 上次修改时间,null代表未修改过 | | likes | int | 帖子点赞数 | | collections | int | 帖子收藏数 | | commentNum | int | 帖子评论数 | | isLiked | boolean | 该用户是否点过赞 | | isCollected | boolean | 用户是否收藏过 | | authorInfo | Object | 用户粗略信息 | | comments | Object(详情见下一条接口 | 评论对象列表 | | | | | **Response样例** ```json { "code": 200, "msg": "succ", "data": { "id": "6097f7ccbaea493bbc3b4c7f // 帖子id", "authorInfo": { "userId": 100411, "nickname": "15915439929", "gender": null, "avatarUrl": null, "school": null, "vipLevelId": null }, "title": "我是标题", "tagId": 1, "content": "你猜你猜", "createTime": "2021-05-09T22:55:08.000+0800", "updateTime": null, "likes": 1, "collections": 1, "commentNum": 3, "read": 1, "isLiked": true, "isCollected": true, "comments": { "pageNum": 0, "pageSize": 10, "pageData": [ { "id": "60991f47f8bd441b835c2ff8", "userInfo": { "userId": 100411, "nickname": "15915439929", "gender": null, "avatarUrl": null, "school": null, "vipLevelId": null }, "content": "这是评论", "likes": 0, "replyNum": 0, "createTime": "2021-05-10T19:55:51.000+0800", "isLike": false, "replies": { "pageNum": 0, "pageSize": 2, "pageData": [] }, "uid": 100411 }, { "id": "609920da5140533ab144fb2a", "userInfo": { "userId": 100411, "nickname": "15915439929", "gender": null, "avatarUrl": null, "school": null, "vipLevelId": null }, "content": "这是评论", "likes": 0, "replyNum": 2, "createTime": "2021-05-10T20:02:34.000+0800", "isLike": false, "replies": { "pageNum": 0, "pageSize": 2, "pageData": [ { "id": "6099dabb90a65345128a0f11", "userInfo": { "userId": 100411, "nickname": "15915439929", "gender": null, "avatarUrl": null, "school": null, "vipLevelId": null }, "toUserInfo": { "userId": 100411, "nickname": "15915439929", "gender": null, "avatarUrl": null, "school": null, "vipLevelId": null }, "toId": 100411, "commentId": "609920da5140533ab144fb2a", "content": "这是回复", "createTime": "2021-05-11T09:15:39.000+0800", "likes": 1, "isLike": true, "uid": 100411 } ] }, "uid": 100411 } ] }, "uid": 100411 }, "time": "2021-05-11 10:10:21" } ``` ## 获取单条评论 作者:cygao **请求URL** `GET` /post/commet/{commentId} **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | -------- | ------ | ------------------------- | ------------------------------------------- | | replyNum | int | 否(默认为0,不加载回复) | 加载回复数 | | rLoadBy | string | 否(默认为latest) | 加载回复策略 hottest-最热 latest-最新(默认) | **Response** Comment对象 ## 获取单条回复 作者:cygao **请求URL** `GET` /post/comment/reply/{replyId} **Response** Reply对象 ## 分页加载帖子评论 作者:cygao **请求URL** `GET` /post/{postId}/comments **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | -------- | ------ | -------- | ------------------------------------ | | pageNum | int | 否(默认值为0) | 页码**(论坛接口起始页码均为0)** | | pageSize | int | 否(默认值为5) | 页面大小 | | loadBy | string | 否(默认hottest) | 加载评论方式 latest-最新 hottest-最热(默认) | | replyNum | int | 否 | 每条评论加载的回复数(默认为3条) | | rLoadBy | string | 否(默认latest) | 加载回复策略 hottest-最热 latest-最新(默认) | | | | | | **Comment对象** | 字段名 | 字段类型 | 描述 | | ---------- | ---------------------- | ------------ | | id | string | 评论id | | pId | string | 所属帖子id | | uid | int | 用户id | | userInfo | Object | 用户粗略信息 | | content | string | 评论内容 | | createTime | date | 评论时间 | | likes | int | 点赞数 | | replyNum | int | 回复数 | | isLike | boolean | 是否点过赞 | | replies | Object(详见下一条接口) | 评论回复 | | | | | **Response样例** ```json { "code": 200, "msg": "succ", "data": { "pageNum": 0, "pageSize": 3, "pageData": [ { "id": "609920da5140533ab144fb2a", "userInfo": { "userId": 100411, "nickname": "15915439929", "gender": null, "avatarUrl": null, "school": null, "vipLevelId": null }, "content": "这是评论", "likes": 1, "replyNum": 2, "createTime": "2021-05-10T20:02:34.000+0800", "isLike": true, "replies": { "pageNum": 0, "pageSize": 2, "pageData": [ { "id": "6099dabb90a65345128a0f11", "userInfo": { "userId": 100411, "nickname": "15915439929", "gender": null, "avatarUrl": null, "school": null, "vipLevelId": null }, "toUserInfo": { "userId": 100411, "nickname": "15915439929", "gender": null, "avatarUrl": null, "school": null, "vipLevelId": null }, "toId": 100411, "commentId": "609920da5140533ab144fb2a", "content": "这是回复", "createTime": "2021-05-11T09:15:39.000+0800", "likes": 1, "isLike": true, "uid": 100411 } ] }, "uid": 100411 }, { "id": "60991f47f8bd441b835c2ff8", "userInfo": { "userId": 100411, "nickname": "15915439929", "gender": null, "avatarUrl": null, "school": null, "vipLevelId": null }, "content": "这是评论", "likes": 0, "replyNum": 0, "createTime": "2021-05-10T19:55:51.000+0800", "isLike": false, "replies": { "pageNum": 0, "pageSize": 2, "pageData": [] }, "uid": 100411 } ] }, "time": "2021-05-11 11:06:27" } ``` ## 分页加载评论回复 作者:cygao **请求URL** `GET` /post/comment/{commentId}/replies **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | -------- | ------ | -------- | ------------------------------------ | | pageNum | int | 否(默认值为0) | 页码**(论坛接口起始页码均为0)** | | pageSize | int | 否(默认值为3) | 页面大小 | | loadBy | string | 否(默认值latest) | 加载回复方式 latest-最新(默认) hottest-最热 | **Reply对象** | 字段名 | 字段类型 | 描述 | | ---------- | -------- | ---------------------- | | id | string | 回复id | | userInfo | Object | 发布回复的用户粗略信息 | | uId | int | 发布回复的用户id | | toUserInfo | Object | 被@的用户粗略信息 | | toId | int | 被@的用户id | | commentId | string | 回复所属评论的id | | content | string | 回复内容 | | createTime | date | 回复时间 | | likes | int | 点赞数 | | isLike | boolean | 是否点过赞 | | | | | **Response样例** ```json { "code": 200, "msg": "succ", "data": { "pageNum": 0, "pageSize": 3, "pageData": [ { "id": "6099dabb90a65345128a0f11", "userInfo": { "userId": 100411, "nickname": "15915439929", "gender": null, "avatarUrl": null, "school": null, "vipLevelId": null }, "toUserInfo": { "userId": 100411, "nickname": "15915439929", "gender": null, "avatarUrl": null, "school": null, "vipLevelId": null }, "toId": 100411, "commentId": "609920da5140533ab144fb2a", "content": "这是回复", "createTime": "2021-05-11T09:15:39.000+0800", "likes": 1, "isLike": true, "uid": 100411 } ] }, "time": "2021-05-11 11:08:19" } ``` ## 分页获取用户点赞or收藏过的帖子 作者:cygao **请求URL** `GET` /post/myLike **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | ------ | ------- | -------- | ----------------------------------------------------- | | isLike | boolean | 否 | isLike true(默认)-查询点赞的帖子 false-查询收藏的帖子 | | pageNum | int | 否(默认值为0) | 页码**(论坛接口起始页码均为0)** | | pageSize | int | 否(默认值为10) | 页面大小 | **Post粗略信息对象** | 字段名 | 字段类型 | 描述 | | ----------- | -------- | ------------ | | id | string | 帖子id | | uId | int | 作者id | | authroInfo | Object | 作者粗略信息 | | title | string | 帖子标题 | | tagId | int | 帖子标签id | | createTime | date | 发表时间 | | likes | int | 点赞数 | | isLiked | boolean | 是否点赞过 | | collections | int | 收藏数 | | isCollected | boolean | 是否收藏过 | | commentNum | int | 评论数 | | | | | **Response样例** ```json { "code": 200, "msg": "succ", "data": { "pageNum": 0, "pageSize": 5, "pageData": [ { "id": "60961c8215400b183a0f5817", "authorInfo": { "userId": 145, "nickname": "黄彦政", "gender": null, "avatarUrl": "https://thirdwx.qlogo.cn/mmhead/7HkcibHNiaAoFR2KzuVk99GJRNZzjTibYBrsIDAl7VBCD4/132", "school": null, "vipLevelId": null }, "title": "678c7tenaigzjub", "tagId": null, "createTime": "2021-05-08T13:07:14.000+0800", "likes": 1, "collections": 0, "read": 0, "isLiked": true, "isCollected": false, "commentNum": null, "uid": 145 }, { "id": "6097f7ccbaea493bbc3b4c7f", "authorInfo": { "userId": 100411, "nickname": "15915439929", "gender": null, "avatarUrl": null, "school": null, "vipLevelId": null }, "title": "我是标题", "tagId": 1, "createTime": "2021-05-09T22:55:08.000+0800", "likes": 1, "collections": 1, "read": 1, "isLiked": true, "isCollected": true, "commentNum": 3, "uid": 100411 } ] }, "time": "2021-05-11 11:25:25" } ``` ## 分页获取标签下的帖子 作者:cygao **请求URL** `GET` /post/tag/{tagId} **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | ------- | ---- | -------- | ---- | | pageNum | int | 否(默认值为0) | 页码**(论坛接口起始页码均为0)** | | pageSize | int | 否(默认值为15) | 页面大小 | | strategy | string | 否 | 获取策略 hottest-最热 latest-最新(默认) | **Response** ```json { "code": 200, "msg": "succ", "data": { "pageNum": 0, "pageSize": 1, "pageData": [ { "id": "6097f7ccbaea493bbc3b4c7f", "authorInfo": { "userId": 100411, "nickname": "15915439929", "gender": null, "avatarUrl": null, "school": null, "vipLevelId": null }, "title": "我是标题", "tagId": 1, "createTime": "2021-05-09T22:55:08.000+0800", "likes": 1, "collections": 1, "read": 1, "isLiked": true, "isCollected": true, "commentNum": 3, "uid": 100411 } ] }, "time": "2021-05-11 11:34:22" } ``` **备注** 返回的数据是Post粗略信息,字段详情描述可以参考**上一条接口** ## 分页获取任意标签的帖子 作者:cygao **请求URL** `GET` /post **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | ------- | ---- | -------- | ---- | | pageNum | int | 否(默认值为0) | 页码**(论坛接口起始页码均为0)** | | pageSize | int | 否(默认值为15) | 页面大小 | | strategy | string | 否 | 获取策略 hottest-最热 latest-最新(默认) | **Response** 同上,返回帖子的粗略信息 ## 分页获取任意标签的帖子 作者:Qin Zhenghan **请求URL** `GET` /post/ignoreLogin **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | -------- | ------ | ---------------- | --------------------------------------- | | pageNum | int | 否(默认值为0) | 页码**(论坛接口起始页码均为0)** | | pageSize | int | 否(默认值为15) | 页面大小 | | strategy | string | 否 | 获取策略 hottest-最热 latest-最新(默认) | **Response** 同上,返回帖子的粗略信息 ## 分页获取用户发布的帖子 作者:cygao **请求URL** `GET` /post/u/{userId} **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | -------- | ---- | ---------------- | --------------------------------- | | pageNum | int | 否(默认值为0) | 页码**(论坛接口起始页码均为0)** | | pageSIze | int | 否(默认值为10) | 页面大小 | | replyNum | int | 否(默认值为0) | 加载回复 | **Response** 返回帖子的粗略信息,字段详情同上 ## 分页获取用户发布的评论 作者:cygao **请求URL** `GET` /post/comment/u/{userId} **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | -------- | ---- | ------------------ | ------------------------------------------- | | pageNum | int | 否(默认值为0) | 页码**(论坛接口起始页码均为0)** | | pageSize | int | 否(默认值为10) | 页面大小 | | replyNum | int | 否(默认值0) | 加载回复的数量 | | rLoadBy | int | 否(默认值latest) | 加载回复方式 hottest-最热 latest-最新(默认) | **Response** ```json { "code": 200, "msg": "succ", "data": { "pageNum": 0, "pageSize": 5, "pageData": [ { "comment": "comment对象", "postTitle": "帖子标题 //string" } ] }, "time": "2021-05-11 11:25:25" } ``` ## 分页获取用户发布的回复 作者:cygao **请求URL** `GET` /post/reply/u/{userId} **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | -------- | ---- | ---------------- | --------------------------------- | | pageNum | int | 否(默认值为0) | 页码**(论坛接口起始页码均为0)** | | pageSize | int | 否(默认值为10) | 页面大小 | **Response** ```json { "code": 200, "msg": "succ", "data": { "pageNum": 0, "pageSize": 5, "pageData": [ { "reply": "reply对象", "postId": "帖子id //string", "commentContent": "评论内容 //string" } ] }, "time": "2021-05-11 11:25:25" } ``` ## 分页获取用户的帖子浏览记录 作者:cygao **请求URL** `GET` /post/history **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | -------- | ---- | ---------------- | --------------------------------- | | pageNum | int | 否(默认值为0) | 页码**(论坛接口起始页码均为0)** | | pageSize | int | 否(默认值为10) | 页面大小 | **Response** 返回**Post**对象 ## 点赞or取消点赞回复 作者:cygao **请求url** `POST` /post/comment/reply/like/{replyId} **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | ------ | ------- | -------- | ------------------------ | | isLike | boolean | 是 | true-点赞 false-取消点赞 | ## 点赞or取消点赞评论 作者:cygao **请求url** `POST` /post/comment/like/{commentId} **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | ------ | ------- | -------- | ------------------------ | | isLike | boolean | 是 | true-点赞 false-取消点赞 | ## 点赞or取消点赞帖子 作者:cygao **请求url** `POST` /post/like/{postId} **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | ------ | ------- | -------- | ---------------------------- | | isLike | boolean | 是 | true-点赞帖子 false-取消点赞 | ## 收藏or取消收藏帖子 作者:cygao **请求url** `POST` /post/collection/{postId} **请求参数** | 参数名 | 类型 | 是否必须 | 描述 | | --------- | ------- | -------- | ---------------------------- | | isCollect | boolean | 是 | true-收藏帖子 false-取消收藏 | ## 发布回复 作者:cygao **请求URL** `POST` /post/comment/reply **请求body** ```json { "toId": "100411 // int @用户的id", "commentId": "609920da5140533ab144fb2a // string 评论id", "content": "这是回复 // string 回复内容" } ``` **Response** ```json { "code": 200, "msg": "succ", "data": "Reply对象", "time": "2021-05-11 09:05:14" } ``` ## 删除回复 作者:cygao **请求URL** `DELETE` /post/comment/reply/{replyId} ## 发布评论 作者:cygao **请求URL** `POST` /post/comment **请求body** ```json { "postId": "6097f7ccbaea493bbc3b4c7f // string 帖子id", "content": "这是评论 // string 评论内容" } ``` **Response** ```json { "code": 200, "msg": "succ", "data": "Comment对象", "time": "2021-05-11 09:05:14" } ``` ## 删除评论 作者:cygao **请求URL** `DELETE` /post/comment/{commentId} ## 发布帖子 作者:cygao **请求URL** `POST` /post **请求Body** ```json { "title": "我是标题", "content": "我是内容", "tagId": 1 } ``` **Response** ```json { "code": 200, "msg": "succ", "data": "6097593bd0cc7c64bd577e71 // string 帖子id", "time": "2021-05-09 11:38:35" } ``` ## 修改帖子 作者:cygao **请求URL** `PUT` /post/{postId} **请求Body** ```json { "title": "我是标题", "content": "我是内容", "tagId": 1 } ``` ## 删除帖子 作者:cygao **请求URL** /post/{postId} ## 获取所有标签 作者:cygao **请求URL** `GET` /post/tags/all **Response** 结果按 sequence 降序排序 ```json { "code": 200, "msg": "succ", "data": [ { "id": 1, "name": "数据挖掘", "sequence": 3 }, { "id": 2, "name": "数学建模", "sequence": 0 } ], "time": "2021-05-09 11:29:00" } ``` ## 获取标签内容 作者:cygao **请求URL** `GET` /post/tags/{tagId} **Response** ```json { "code": 200, "msg": "succ", "data": { "id": 1, "name": "数据挖掘", "sequence": 0 }, "time": "2021-05-09 11:26:45" } ``` ## 新建一个帖子标签(后台) 作者:cygao **请求URL** `POST` /post/tags **请求body** ```json { "name": "标签名,不允许重复 // string", "sequence": "排序顺序字段,降序排列,越大越靠前,为空默认为0 // int" } ``` ## 修改标签内容(后台) 作者:cygao **请求URL** `PUT` /post/tags/{tagId} **请求body** ```json { "name": "标签名,不允许重复 // string", "sequence": "排序顺序字段,降序排列,越大越靠前,为空默认为0 // int" } ``` ## 删除标签(后台) 作者:cygao **请求URL** `DELETE` /post/tags/{tagId} # 用户收藏相关 ## 获取用户收藏统计 *作者: Qin Zhenghan* **请求URL** /user/collection/all `GET` **返回结果** ```json { "code": 200, "msg": "succ", "data": { "projectCount": "int //收藏项目数", "postCount": "int //收藏帖子数" }, "time": "2021-08-13 00:39:35" } ``` # 即时通讯相关 ## 发送消息 作者:cygao **请求URL** `POST` /im/send/msg **请求body** | 名称 | 类型 | 是否必须 | 描述 | | ---------- | ------ | -------- | ------------------------------ | | context | string | 是 | 消息正文 | | type | string | 否 | 默认common,消息类型,保留字段 | | receiverId | int | 是 | 接收用户id | **返回结果** ```json { "code": 200, "msg": "succ", "data": 1 // 消息唯一id, "time": "2021-08-13 00:39:35" } ``` ## 分页加载历史记录 作者:cygao **请求URL** `GET` /im/lload/msg/{chatterId} (chatterId是对话用户id) **请求参数** | 名称 | 类型 | 是否必须 | 描述 | | -------- | ---- | -------- | ---------------------- | | timestamp | long | 否 | 时间戳,按时间分页,默认为当前时间 | | cnt | int | 否 | 返回数据条数,默认10 | **返回结果** ```json { "code": 200, "msg": "succ", "data": { "pageNum": 1, "pageSize": 2, "pageData": [ { "id": 1, "commId": "1_100411", // 唯一对话id(格式:用户id_用户id,小id在前大id在后) "context": "a1", // 消息正文 "senderId": 100411, "receiverId": 1, "type": "common", // 消息类型 "createTime": "2021-10-27T10:38:02.000+08:00", "updateTime": "2021-10-27T10:38:02.000+08:00", // 修改时间,撤回消息该数据会改变 "withdraw": false // 是否被撤回 }, { "id": 2, "commId": "1_100411", "context": "a2", "senderId": 100411, "receiverId": 1, "type": "common", "createTime": "2021-10-27T10:38:03.000+08:00", "updateTime": "2021-10-27T10:38:03.000+08:00", "withdraw": false } ], "total": 59 }, "time": "2021-10-27 13:45:12" } ``` ## 分页加载对话列表 作者:cygao **请求URL** `GET` /im/load/comm **请求参数** | 名称 | 类型 | 是否必须 | 描述 | | -------- | ---- | -------- | ---------------------- | | pageNum | int | 否 | 页码,从1开始,默认为1 | | pageSize | int | 否 | 页码大小,默认10 | **返回结果** ```json { "code": 200, "msg": "succ", "data": { "pageNum": 1, "pageSize": 2, "pageData": [ { "latestMessage": { // 最后一条消息,字段介绍同上个接口 "id": 84, "commId": "100411_100411", "context": "aa", "senderId": 100411, "receiverId": 100411, "type": "common", "createTime": "2021-10-27T13:36:06.000+08:00", "updateTime": "2021-10-27T13:37:58.434+08:00", "withdraw": true }, "unreadCount": 0, // 该会话的未读消息数 "chatterUserInfo": { "userId": 100411, "nickname": "15915439929", "gender": null, "avatarUrl": null, "school": null, "vipLevelId": null } }, { "latestMessage": { "id": 80, "commId": "1_100411", "context": "aa", "senderId": 100411, "receiverId": 1, "type": "common", "createTime": "2021-10-27T13:31:10.389+08:00", "updateTime": "2021-10-27T13:31:10.389+08:00", "withdraw": false }, "unreadCount": 0, "chatterUserInfo": { "userId": 100411, "nickname": "15915439929", "gender": null, "avatarUrl": null, "school": null, "vipLevelId": null } } ], "total": 8 }, "time": "2021-10-27 13:48:23" } ``` ## 定时轮询-刷新对话列表 作者:cygao **请求URL** `POST` /im/refresh/comm **无请求参数** **返回结果** 字段介绍同上 ```json { "code": 200, "msg": "succ", "data": [ { "latestMessage": { "id": 86, "commId": "1_100411", "context": "aa", "senderId": 100411, "receiverId": 100411, "type": "common", "createTime": "2021-10-27T13:53:29.034+08:00", "updateTime": "2021-10-27T13:53:29.034+08:00", "withdraw": false }, "unreadCount": 2 } ], "time": "2021-10-27 13:53:30" } ``` ## 定时轮询-刷新聊天消息 作者:cygao **请求URL** `POST` /im/refresh/msg/{chatterId} **返回结果** 字段介绍同上 ```json { "code": 200, "msg": "succ", "data": [ { "id": 85, "commId": "1_100411", "context": "aa", "senderId": 100411, "receiverId": 100411, "type": "common", "createTime": "2021-10-27T13:52:52.400+08:00", "updateTime": "2021-10-27T13:52:52.400+08:00", "withdraw": false } ], "time": "2021-10-27 13:52:56" } ``` ## 撤回消息 作者:cygao **请求URL** `POST` /im/withdraw/{msgId} (msgId为消息的唯一id) 注:只有发送方才允许撤回,且只允许撤回2min以内的消息 **返回结果** ```json { "code": 200, "msg": "succ", "data": null, "time": "2021-10-27 13:56:52" } ``` ## 获取所有消息未读数 作者:cygao **请求URL** `GET` /im/unread/cnt **返回结果** ```json { "code": 200, "msg": "succ", "data": 4, "time": "2021-11-03 11:42:32" } ``` # 管理员管理相关 ## 添加管理员 作者:Qin Zhenghan **请求URL** `POST` admin/management/add **请求体** ```json { "nickname": "nicker", "password": "888888", "phone": "15700998848", "ahaCredit": 0.0, "ahaPoint": 0.0, "roleId": 6 } ``` **返回结果** ```json { "code": 200, "msg": "succ", "data": null, "time": "2021-11-06 16:36:04" } ``` ## 删除管理员 作者:Qin Zhenghan **请求URL** `DELETE` admin/management/delete/{userId} (userId为用户id) **返回结果** ```json { "code": 200, "msg": "succ", "data": null, "time": "2021-11-06 16:36:04" } ``` ## 更新管理员信息 作者:Qin Zhenghan **请求URL** `PUT` admin/management/update/{userId} (userId为用户id) **请求体** ```json { "password": null, "createdTime": null, "studentRecFilename": "/path", "ahaCredit": 100.0, "ahaPoint": 1000.0, "signedNotice": true, "signedContract": true, "authenticated": 0, "roleId": 3 } ``` **返回结果** ```json { "code": 200, "msg": "succ", "data": null, "time": "2021-11-06 16:36:04" } ``` ## 分页获取所有管理员信息 作者:Qin Zhenghan **请求URL** /admin/management/all `GET` **请求参数** | 参数名 | 类型 | 必须 | 描述 | | -------------- | ------- | ---- | ---------------- | | pageNum | int | 否 | 页码 | | pageSize | int | 否 | 分页大小 | | signedNotice | boolean | 否 | 是否签署服务协议 | | signedContract | boolean | 否 | 是否签署合同 | | typeId | int | 否 | 用户类型 | | nicknameLike | string | 否 | 模糊昵称 | | trueNameLike | string | 否 | 模糊真实姓名 | | sortBy | string | 否 | 排序关键字 | | orderBy | string | 否 | 排序方式 | **返回结果** ```json { "code": 200, "msg": "succ", "data": { "pageNum": 1, "pageSize": 1, "pageData": [ { "id": 100679, "createdTime": "2021-11-06T16:38:49.000+08:00", "studentRecFilename": "/usr", "ahaCredit": 100.00, "ahaPoint": 1000.00, "signedNotice": true, "signedContract": false, "authenticated": 0, "roleId": 3, "role": { "id": 3, "name": "ROLE_OPERATION" }, "nickname": "nicker", "gender": null, "birthday": null, "typeId": null, "signature": null, "avatarUrl": null, "school": null, "academy": null, "major": null, "grade": null, "intro": null, "specialtyTags": null, "trueName": null, "compTags": null } ], "total": 1 }, "time": "2021-11-06 16:41:09" } ```