Commit 57d2ee59 by hweeeeeei

添加接口:服务端rest-API-会话成员表,rest-api-会话成员表分页列表

parent 4b292cab
...@@ -42,7 +42,7 @@ public class ImConversationController extends BaseController { ...@@ -42,7 +42,7 @@ public class ImConversationController extends BaseController {
* 添加或修改会话名称 * 添加或修改会话名称
*/ */
@PostMapping("/saveOrUpdateName") @PostMapping("/saveOrUpdateName")
@ApiOperation(value = "添加或修改会话名称", notes = "") @ApiOperation(value = "添加或修改会话名称", notes = "权限:目前只有创建者有权限操作")
public ApiResult<Boolean> saveOrUpdateName(@RequestBody ImConversationNameUpdate imConversationNameUpdate) throws Exception { public ApiResult<Boolean> saveOrUpdateName(@RequestBody ImConversationNameUpdate imConversationNameUpdate) throws Exception {
return imConversationService.saveOrUpdateName(imConversationNameUpdate); return imConversationService.saveOrUpdateName(imConversationNameUpdate);
} }
...@@ -52,7 +52,7 @@ public class ImConversationController extends BaseController { ...@@ -52,7 +52,7 @@ public class ImConversationController extends BaseController {
* 添加或修改会话拓展字段 * 添加或修改会话拓展字段
*/ */
@PostMapping("/saveOrUpdateAttr") @PostMapping("/saveOrUpdateAttr")
@ApiOperation(value = "添加或修改会话拓展字段", notes = "") @ApiOperation(value = "添加或修改会话拓展字段", notes = "权限:目前只有创建者有权限操作")
public ApiResult<Boolean> saveOrUpdateAttr(@RequestBody ImConversationAttrUpdate imConversationAttrUpdate) throws Exception { public ApiResult<Boolean> saveOrUpdateAttr(@RequestBody ImConversationAttrUpdate imConversationAttrUpdate) throws Exception {
return imConversationService.saveOrUpdateAttr(imConversationAttrUpdate); return imConversationService.saveOrUpdateAttr(imConversationAttrUpdate);
} }
...@@ -62,7 +62,7 @@ public class ImConversationController extends BaseController { ...@@ -62,7 +62,7 @@ public class ImConversationController extends BaseController {
* client退出会话 * client退出会话
*/ */
@PostMapping("/leave") @PostMapping("/leave")
@ApiOperation(value = "client退出会话", notes = "") @ApiOperation(value = "client退出会话", notes = "若是创建者退出,[创建者]权限将会转移给按加入会话时间排序的下一个client")
public ApiResult<Boolean> leaveConversation(@RequestBody ImClientLeaveConversation imClientToConversation) throws Exception { public ApiResult<Boolean> leaveConversation(@RequestBody ImClientLeaveConversation imClientToConversation) throws Exception {
return imConversationService.leaveConversation(imClientToConversation); return imConversationService.leaveConversation(imClientToConversation);
} }
...@@ -72,7 +72,7 @@ public class ImConversationController extends BaseController { ...@@ -72,7 +72,7 @@ public class ImConversationController extends BaseController {
* 将client从会话移除 * 将client从会话移除
*/ */
@PostMapping("/delClient") @PostMapping("/delClient")
@ApiOperation(value = "将client从会话移除", notes = "") @ApiOperation(value = "将client从会话移除", notes = "权限:目前只有创建者有权限操作")
public ApiResult<Boolean> delClientToConversation(@RequestBody ImClientToConversation imClientToConversation) throws Exception { public ApiResult<Boolean> delClientToConversation(@RequestBody ImClientToConversation imClientToConversation) throws Exception {
return imConversationService.delClientToConversation(imClientToConversation); return imConversationService.delClientToConversation(imClientToConversation);
} }
...@@ -82,7 +82,7 @@ public class ImConversationController extends BaseController { ...@@ -82,7 +82,7 @@ public class ImConversationController extends BaseController {
* 将用户添加进会话 * 将用户添加进会话
*/ */
@PostMapping("/addClient") @PostMapping("/addClient")
@ApiOperation(value = "将用户添加进会话", notes = "") @ApiOperation(value = "将用户添加进会话", notes = "权限:会话中所有client都有权限操作")
public ApiResult<Boolean> addClientToConversation(@RequestBody ImClientToConversation imClientToConversation) throws Exception { public ApiResult<Boolean> addClientToConversation(@RequestBody ImClientToConversation imClientToConversation) throws Exception {
return imConversationService.addClientToConversation(imClientToConversation); return imConversationService.addClientToConversation(imClientToConversation);
} }
......
package com.wecloud.im.controller.serverapi;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.param.ApiImConversationMembersPageParam;
import com.wecloud.im.param.ApiImConversationMembersQueryVo;
import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImConversationMembersService;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController;
import io.geekidea.springbootplus.framework.log.annotation.OperationLog;
import io.geekidea.springbootplus.framework.log.enums.OperationLogType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 会话成员表 控制器
*
* @author wei
* @since 2021-05-07
*/
@Slf4j
@RestController
@RequestMapping("/restApi/imConversationMembers")
@Api(value = "服务端rest-API-会话成员表", tags = {"服务端API-会话成员表"})
public class ApiImConversationMembersController extends BaseController {
@Autowired
private ImConversationMembersService imConversationMembersService;
@Autowired
private ImApplicationService imApplicationService;
/**
* 会话成员表分页列表
*/
@PostMapping("/findList")
@OperationLog(name = "rest-api-会话成员表分页列表", type = OperationLogType.PAGE)
@ApiOperation(value = "rest-api-会话成员表分页列表")
public ApiResult<List<ApiImConversationMembersQueryVo>> getApiImConversationMembersList(@Validated @RequestBody ApiImConversationMembersPageParam apiImConversationMembersPageParam, @RequestHeader String appkey, @RequestHeader String appSecret) throws Exception {
// 根据appKey从数据库查询密钥
ImApplication imApplication = imApplicationService.getOneByAppKey(appkey);
if (imApplication == null) {
return ApiResult.result(ApiCode.FAIL, null);
}
// 校验appkey 和appSecret
if (!imApplication.getAppSecret().equals(appSecret)) {
return ApiResult.result(ApiCode.FAIL, null);
}
return imConversationMembersService.getRestApiImConversationMembersList(apiImConversationMembersPageParam, imApplication);
}
// /**
// * 添加会话成员表
// */
// @PostMapping("/add")
// @OperationLog(name = "添加会话成员表", type = OperationLogType.ADD)
// @ApiOperation(value = "添加会话成员表")
// public ApiResult<Boolean> addImConversationMembers(@Validated(Add.class) @RequestBody ImConversationMembers imConversationMembers) throws Exception {
// boolean flag = imConversationMembersService.saveImConversationMembers(imConversationMembers);
// return ApiResult.result(flag);
// }
//
// /**
// * 修改会话成员表
// */
// @PostMapping("/update")
// @OperationLog(name = "修改会话成员表", type = OperationLogType.UPDATE)
// @ApiOperation(value = "修改会话成员表")
// public ApiResult<Boolean> updateImConversationMembers(@Validated(Update.class) @RequestBody ImConversationMembers imConversationMembers) throws Exception {
// boolean flag = imConversationMembersService.updateImConversationMembers(imConversationMembers);
// return ApiResult.result(flag);
// }
//
// /**
// * 删除会话成员表
// */
// @PostMapping("/delete/{id}")
// @OperationLog(name = "删除会话成员表", type = OperationLogType.DELETE)
// @ApiOperation(value = "删除会话成员表")
// public ApiResult<Boolean> deleteImConversationMembers(@PathVariable("id") Long id) throws Exception {
// boolean flag = imConversationMembersService.deleteImConversationMembers(id);
// return ApiResult.result(flag);
// }
//
// /**
// * 获取会话成员表详情
// */
// @GetMapping("/info/{id}")
// @OperationLog(name = "会话成员表详情", type = OperationLogType.INFO)
// @ApiOperation(value = "会话成员表详情")
// public ApiResult<ImConversationMembersQueryVo> getImConversationMembers(@PathVariable("id") Long id) throws Exception {
// ImConversationMembersQueryVo imConversationMembersQueryVo = imConversationMembersService.getImConversationMembersById(id);
// return ApiResult.ok(imConversationMembersQueryVo);
// }
//
}
...@@ -4,12 +4,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; ...@@ -4,12 +4,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wecloud.im.entity.ImConversationMembers; import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.param.ApiImConversationMembersQueryVo;
import com.wecloud.im.param.ImConversationMembersPageParam; import com.wecloud.im.param.ImConversationMembersPageParam;
import com.wecloud.im.param.ImConversationMembersQueryVo; import com.wecloud.im.param.ImConversationMembersQueryVo;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.io.Serializable; import java.io.Serializable;
import java.util.List;
/** /**
* 会话成员表 Mapper 接口 * 会话成员表 Mapper 接口
...@@ -28,6 +30,9 @@ public interface ImConversationMembersMapper extends BaseMapper<ImConversationMe ...@@ -28,6 +30,9 @@ public interface ImConversationMembersMapper extends BaseMapper<ImConversationMe
*/ */
ImConversationMembersQueryVo getImConversationMembersById(Serializable id); ImConversationMembersQueryVo getImConversationMembersById(Serializable id);
List<ApiImConversationMembersQueryVo> getRestApiImConversationMembersList(@Param("conversationId") Long conversationId);
/** /**
* 获取分页对象 * 获取分页对象
* *
......
package com.wecloud.im.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* <pre>
* 会话成员表 分页参数对象
* </pre>
*
* @author wei
* @date 2021-05-07
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "ApiImConversationMembersPageParam")
public class ApiImConversationMembersPageParam implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "会话表id", required = true)
private Long conversationId;
}
package com.wecloud.im.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* <pre>
* 会话成员表 查询结果对象
* </pre>
*
* @author wei
* @date 2021-05-07
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "ApiImConversationMembersQueryVo")
public class ApiImConversationMembersQueryVo implements Serializable {
private static final long serialVersionUID = 1L;
// @ApiModelProperty("唯一id")
// private Long id;
// @ApiModelProperty("加入时间")
// private Date createTime;
@ApiModelProperty("客户端id")
private String clientId;
// @ApiModelProperty("修改时间")
// private Date updateTime;
//
// @ApiModelProperty("应用appid")
// private Long fkAppid;
// @ApiModelProperty("会话表id")
// private Long fkConversationId;
}
\ No newline at end of file
package com.wecloud.im.service; package com.wecloud.im.service;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImConversationMembers; import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.param.ApiImConversationMembersPageParam;
import com.wecloud.im.param.ApiImConversationMembersQueryVo;
import com.wecloud.im.param.ImConversationMembersPageParam; import com.wecloud.im.param.ImConversationMembersPageParam;
import com.wecloud.im.param.ImConversationMembersQueryVo; import com.wecloud.im.param.ImConversationMembersQueryVo;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.service.BaseService; import io.geekidea.springbootplus.framework.common.service.BaseService;
import io.geekidea.springbootplus.framework.core.pagination.Paging; import io.geekidea.springbootplus.framework.core.pagination.Paging;
import java.util.List;
/** /**
* 会话成员表 服务类 * 会话成员表 服务类
* *
...@@ -14,6 +20,10 @@ import io.geekidea.springbootplus.framework.core.pagination.Paging; ...@@ -14,6 +20,10 @@ import io.geekidea.springbootplus.framework.core.pagination.Paging;
*/ */
public interface ImConversationMembersService extends BaseService<ImConversationMembers> { public interface ImConversationMembersService extends BaseService<ImConversationMembers> {
ApiResult<List<ApiImConversationMembersQueryVo>> getRestApiImConversationMembersList(ApiImConversationMembersPageParam apiImConversationMembersPageParam, ImApplication imApplication);
/** /**
* 保存 * 保存
* *
......
...@@ -3,11 +3,15 @@ package com.wecloud.im.service.impl; ...@@ -3,11 +3,15 @@ package com.wecloud.im.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImConversationMembers; import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.mapper.ImConversationMembersMapper; import com.wecloud.im.mapper.ImConversationMembersMapper;
import com.wecloud.im.param.ApiImConversationMembersPageParam;
import com.wecloud.im.param.ApiImConversationMembersQueryVo;
import com.wecloud.im.param.ImConversationMembersPageParam; import com.wecloud.im.param.ImConversationMembersPageParam;
import com.wecloud.im.param.ImConversationMembersQueryVo; import com.wecloud.im.param.ImConversationMembersQueryVo;
import com.wecloud.im.service.ImConversationMembersService; import com.wecloud.im.service.ImConversationMembersService;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl; import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo; import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
import io.geekidea.springbootplus.framework.core.pagination.Paging; import io.geekidea.springbootplus.framework.core.pagination.Paging;
...@@ -16,6 +20,8 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -16,6 +20,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/** /**
* 会话成员表 服务实现类 * 会话成员表 服务实现类
* *
...@@ -29,6 +35,14 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa ...@@ -29,6 +35,14 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
@Autowired @Autowired
private ImConversationMembersMapper imConversationMembersMapper; private ImConversationMembersMapper imConversationMembersMapper;
@Override
public ApiResult<List<ApiImConversationMembersQueryVo>> getRestApiImConversationMembersList(ApiImConversationMembersPageParam apiImConversationMembersPageParam, ImApplication imApplication) {
List<ApiImConversationMembersQueryVo> restApiImConversationMembersList = imConversationMembersMapper.getRestApiImConversationMembersList(apiImConversationMembersPageParam.getConversationId());
return ApiResult.ok(restApiImConversationMembersList);
}
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean saveImConversationMembers(ImConversationMembers imConversationMembers) throws Exception { public boolean saveImConversationMembers(ImConversationMembers imConversationMembers) throws Exception {
......
...@@ -20,5 +20,14 @@ ...@@ -20,5 +20,14 @@
<include refid="Base_Column_List"/> <include refid="Base_Column_List"/>
from im_conversation_members from im_conversation_members
</select> </select>
<select id="getRestApiImConversationMembersList"
resultType="com.wecloud.im.param.ApiImConversationMembersQueryVo">
SELECT im_client.client_id AS clientId
FROM im_conversation_members AS imConversationMembers
INNER JOIN im_client AS im_client ON im_client.id = imConversationMembers.fk_client_id
WHERE fk_conversation_id = #{conversationId}
</select>
</mapper> </mapper>
...@@ -15,7 +15,7 @@ spring-boot-plus: ...@@ -15,7 +15,7 @@ spring-boot-plus:
spring: spring:
datasource: datasource:
url: jdbc:mysql://localhost:3306/wecloud_im_v1_3?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true url: jdbc:mysql://localhost:3306/wecloud_im?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
username: root username: root
password: 123 password: 123
......
...@@ -199,6 +199,7 @@ spring-boot-plus: ...@@ -199,6 +199,7 @@ spring-boot-plus:
- /imApplication/** - /imApplication/**
- /signDemo/get - /signDemo/get
- /Wecloud-IM-Websocket-Docs.html - /Wecloud-IM-Websocket-Docs.html
- /restApi/**
# 多行字符串权限配置 # 多行字符串权限配置
filter-chain-definitions: | filter-chain-definitions: |
......
# wecloud-im 前端Websocket对接文档 # wecloud-im 前端Websocket对接文档
...@@ -490,7 +490,6 @@ websocket是异步的 有可能你很快速的发送了几条消息,服务器响 ...@@ -490,7 +490,6 @@ websocket是异步的 有可能你很快速的发送了几条消息,服务器响
| 字段名 | 字段类型 | 是否可空 | 说明 | | 字段名 | 字段类型 | 是否可空 | 说明 |
| ------ | -------- | -------- | ----------------- | | ------ | -------- | -------- | ----------------- |
| sender | String | 否 | 新群主的client ID | | sender | String | 否 | 新群主的client ID |
| | | | |
...@@ -527,9 +526,6 @@ websocket是异步的 有可能你很快速的发送了几条消息,服务器响 ...@@ -527,9 +526,6 @@ websocket是异步的 有可能你很快速的发送了几条消息,服务器响
| 字段名 | 字段类型 | 是否可空 | 说明 | | 字段名 | 字段类型 | 是否可空 | 说明 |
| ------ | -------- | -------- | --------------- | | ------ | -------- | -------- | --------------- |
| sender | String | 否 | 退出的client ID | | sender | String | 否 | 退出的client ID |
| | | | |
......
# wecloud-im服务端REST API对接文档 # wecloud-im服务端REST API对接文档
...@@ -24,13 +24,7 @@ ___ ...@@ -24,13 +24,7 @@ ___
https://wstest.im199.com/api/imApplication/add https://wstest.im199.com/api/imApplication/add
``` ```
___
ws连接示例
```
wss://wstest.im199.com/ws?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJ3ZWIiLCJjbGllbnRJZCI6ImFiY2QxIiwiaXNzIjoid2VjbG91ZF9pbSIsImFwcEtleSI6IkpLdE5IZnJWVXdzaGF4ek4iLCJleHAiOjE2MjgzMjMxNDMsImlhdCI6MTYyMzEzOTE0MywianRpIjoiNWU3NzU5ZjM2ODQ3NDFiMzg4MGEyYjkwMjQ0OWZjZmYifQ.CC-iuGjNwQLH4VxFI2wZEPuP4AGabOUOiRh9snp3IB4
```
_______ _______
...@@ -54,13 +48,6 @@ ___ ...@@ -54,13 +48,6 @@ ___
https://ws.im199.com/api/imApplication/add https://ws.im199.com/api/imApplication/add
``` ```
___
ws连接示例
```
wss://ws.im199.com/ws?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJ3ZWIiLCJjbGllbnRJZCI6ImFiY2QxIiwiaXNzIjoid2VjbG91ZF9pbSIsImFwcEtleSI6IkpLdE5IZnJWVXdzaGF4ek4iLCJleHAiOjE2MjgzMjMxNDMsImlhdCI6MTYyMzEzOTE0MywianRpIjoiNWU3NzU5ZjM2ODQ3NDFiMzg4MGEyYjkwMjQ0OWZjZmYifQ.CC-iuGjNwQLH4VxFI2wZEPuP4AGabOUOiRh9snp3IB4
```
_______ _______
...@@ -70,28 +57,28 @@ _______ ...@@ -70,28 +57,28 @@ _______
## 鉴权方式 ## 鉴权方式
### 方式一: ### 方式一(正在开发):
对于 POST 和 PUT 请求,请求的主体必须是 JSON 格式,而且 HTTP header 的 Content-Type 需要设置为 `application/json` 对于 POST 和 PUT 请求,请求的主体必须是 JSON 格式,而且 HTTP header 的 Content-Type 需要设置为 `application/json`
用户验证通过 HTTP header 来进行,**X-LC-Id** 标明正在运行的是哪个应用(应用的 App ID), **X-LC-Key** 用来授权鉴定 endpoint: 用户验证通过 HTTP header 来进行,**appkey** 标明正在运行的是哪个应用(应用的 App ID), **appSecret** 用来授权鉴定 endpoint:
```json ```json
curl -X PUT \ curl -X PUT \
-H "X-LC-Id: {{appid}}" \ -H "appkey: {{appkey}}" \
-H "X-LC-Key: {{appkey}}" \ -H "appSecret: {{appSecret}}" \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-d '{"content": "更新一篇博客的内容"}' \ -d '{"content": "你好"}' \
https://https://ws.im199.com/api/ https://https://ws.im199.com/api/
``` ```
**X-LC-Key** 通常情况下是应用的 App Key
### 方式二
### 方式二(暂时没开发)
**更安全的鉴权** **更安全的鉴权**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment