diff --git a/internal/api/group/group.go b/internal/api/group/group.go
index e044b81b2..91d5115b6 100644
--- a/internal/api/group/group.go
+++ b/internal/api/group/group.go
@@ -1,1249 +1,124 @@
package group
-//import (
-// common "OpenIM/internal/api_to_rpc"
-// api "OpenIM/pkg/apistruct"
-// "OpenIM/pkg/common/config"
-// "OpenIM/pkg/common/constant"
-// "OpenIM/pkg/common/log"
-// "OpenIM/pkg/common/token_verify"
-// "OpenIM/pkg/common/tracelog"
-// "OpenIM/pkg/getcdv3"
-// rpc "OpenIM/pkg/proto/group"
-// "OpenIM/pkg/utils"
-// "context"
-// "github.com/golang/protobuf/ptypes/wrappers"
-// "google.golang.org/grpc"
-//
-// "github.com/gin-gonic/gin"
-//
-// "net/http"
-// "strings"
-//
-// jsonData "OpenIM/internal/utils"
-//)
+import (
+ "OpenIM/internal/a2r"
+ "OpenIM/pkg/common/config"
+ "OpenIM/pkg/proto/group"
+ "context"
+ "github.com/OpenIMSDK/openKeeper"
+ "github.com/gin-gonic/gin"
+)
-//func KickGroupMember(c *gin.Context) {
-// api2rpc.NewRpc(api2rpc.NewGin[apistruct.KickGroupMemberReq, apistruct.KickGroupMemberResp](c), group.NewGroupClient, group.GroupClient.KickGroupMember).Name("group").Call()
+var _ context.Context // 解决goland编辑器bug
+
+func NewGroup(zk *openKeeper.ZkClient) *Group {
+ return &Group{zk: zk}
+}
+
+type Group struct {
+ zk *openKeeper.ZkClient
+}
+
+func (g *Group) getGroupClient() (group.GroupClient, error) {
+ conn, err := g.zk.GetConn(config.Config.RpcRegisterName.OpenImGroupName)
+ if err != nil {
+ return nil, err
+ }
+ return group.NewGroupClient(conn), nil
+}
+
+func (g *Group) NewCreateGroup(c *gin.Context) {
+ a2r.Call(group.GroupClient.CreateGroup, g.getGroupClient, c)
+}
+
+func (g *Group) NewSetGroupInfo(c *gin.Context) {
+ a2r.Call(group.GroupClient.SetGroupInfo, g.getGroupClient, c)
+}
+
+func (g *Group) JoinGroup(c *gin.Context) {
+ a2r.Call(group.GroupClient.JoinGroup, g.getGroupClient, c)
+}
+
+func (g *Group) QuitGroup(c *gin.Context) {
+ a2r.Call(group.GroupClient.QuitGroup, g.getGroupClient, c)
+}
+
+func (g *Group) ApplicationGroupResponse(c *gin.Context) {
+ a2r.Call(group.GroupClient.GroupApplicationResponse, g.getGroupClient, c)
+}
+
+func (g *Group) TransferGroupOwner(c *gin.Context) {
+ a2r.Call(group.GroupClient.TransferGroupOwner, g.getGroupClient, c)
+}
+
+func (g *Group) GetRecvGroupApplicationList(c *gin.Context) {
+ a2r.Call(group.GroupClient.GetGroupApplicationList, g.getGroupClient, c)
+}
+
+func (g *Group) GetUserReqGroupApplicationList(c *gin.Context) {
+ a2r.Call(group.GroupClient.GetUserReqApplicationList, g.getGroupClient, c)
+}
+
+func (g *Group) GetGroupsInfo(c *gin.Context) {
+ a2r.Call(group.GroupClient.GetGroupsInfo, g.getGroupClient, c)
+}
+
+func (g *Group) KickGroupMember(c *gin.Context) {
+ a2r.Call(group.GroupClient.KickGroupMember, g.getGroupClient, c)
+}
+
+func (g *Group) GetGroupMembersInfo(c *gin.Context) {
+ a2r.Call(group.GroupClient.GetGroupMembersInfo, g.getGroupClient, c)
+}
+
+func (g *Group) InviteUserToGroup(c *gin.Context) {
+ a2r.Call(group.GroupClient.InviteUserToGroup, g.getGroupClient, c)
+}
+
+func (g *Group) GetJoinedGroupList(c *gin.Context) {
+ a2r.Call(group.GroupClient.GetJoinedGroupList, g.getGroupClient, c)
+}
+
+func (g *Group) DismissGroup(c *gin.Context) {
+ a2r.Call(group.GroupClient.DismissGroup, g.getGroupClient, c)
+}
+
+func (g *Group) MuteGroupMember(c *gin.Context) {
+ a2r.Call(group.GroupClient.MuteGroupMember, g.getGroupClient, c)
+}
+
+func (g *Group) CancelMuteGroupMember(c *gin.Context) {
+ a2r.Call(group.GroupClient.CancelMuteGroupMember, g.getGroupClient, c)
+}
+
+func (g *Group) MuteGroup(c *gin.Context) {
+ a2r.Call(group.GroupClient.MuteGroup, g.getGroupClient, c)
+}
+
+func (g *Group) CancelMuteGroup(c *gin.Context) {
+ a2r.Call(group.GroupClient.CancelMuteGroup, g.getGroupClient, c)
+}
+
+func (g *Group) SetGroupMemberInfo(c *gin.Context) {
+ a2r.Call(group.GroupClient.SetGroupMemberInfo, g.getGroupClient, c)
+}
+
+func (g *Group) GetGroupAbstractInfo(c *gin.Context) {
+ a2r.Call(group.GroupClient.GetGroupAbstractInfo, g.getGroupClient, c)
+}
+
+//func (g *Group) SetGroupMemberNickname(c *gin.Context) {
+// a2r.Call(group.GroupClient.SetGroupMemberNickname, g.getGroupClient, c)
+//}
+//
+//func (g *Group) GetGroupAllMemberList(c *gin.Context) {
+// a2r.Call(group.GroupClient.GetGroupAllMember, g.getGroupClient, c)
//}
-//
-//// @Summary 获取群成员信息
-//// @Description 获取群成员信息
-//// @Tags 群组相关
-//// @ID GetGroupMembersInfo
-//// @Accept json
-//// @Param token header string true "im token"
-//// @Param req body api.GetGroupMembersInfoReq true "groupID为要获取的群ID
memberList为要获取群成员的群ID列表"
-//// @Produce json
-//// @Success 0 {object} api.GetGroupMembersInfoResp{data=[]sdkws.GroupMemberFullInfo}
-//// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
-//// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
-//// @Router /group/get_group_members_info [post]
-//func GetGroupMembersInfo(c *gin.Context) {
-// params := api.GetGroupMembersInfoReq{}
-// if err := c.BindJSON(¶ms); err != nil {
-// log.NewError("0", "BindJSON failed ", err.Error())
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// return
-// }
-// req := &rpc.GetGroupMembersInfoReq{}
-// utils.CopyStructFields(req, params)
-//
-// var ok bool
-// var errInfo string
-// ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// if !ok {
-// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-//
-// log.NewInfo(req.OperationID, "GetGroupMembersInfo args ", req.String())
-//
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// if etcdConn == nil {
-// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// client := rpc.NewGroupClient(etcdConn)
-//
-// RpcResp, err := client.GetGroupMembersInfo(context.Background(), req)
-// if err != nil {
-// log.NewError(req.OperationID, "FindGroupMemberAll failed ", err.Error(), req.String())
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
-// return
-// }
-//
-// memberListResp := api.GetGroupMembersInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, MemberList: RpcResp.MemberList}
-// memberListResp.Map = jsonData.JsonDataList(RpcResp.MemberList)
-// log.NewInfo(req.OperationID, "GetGroupMembersInfo api return ", memberListResp)
-// c.JSON(http.StatusOK, memberListResp)
-//}
-//
-//func GetGroupMemberList(c *gin.Context) {
-// params := api.GetGroupMemberListReq{}
-// if err := c.BindJSON(¶ms); err != nil {
-// log.NewError("0", "BindJSON failed ", err.Error())
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// return
-// }
-// req := &rpc.GetGroupMemberListReq{}
-// utils.CopyStructFields(req, params)
-//
-// var ok bool
-// var errInfo string
-// ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// if !ok {
-// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-//
-// log.NewInfo(req.OperationID, "FindGroupMemberAll args ", req.String())
-//
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// if etcdConn == nil {
-// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// client := rpc.NewGroupClient(etcdConn)
-//
-// RpcResp, err := client.GetGroupMemberList(context.Background(), req)
-// if err != nil {
-// log.NewError(req.OperationID, "FindGroupMemberAll failed, ", err.Error(), req.String())
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
-// return
-// }
-//
-// memberListResp := api.GetGroupMemberListResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, MemberList: RpcResp.MemberList, NextSeq: RpcResp.NextSeq}
-// memberListResp.Map = jsonData.JsonDataList(memberListResp.MemberList)
-//
-// log.NewInfo(req.OperationID, "FindGroupMemberAll api return ", memberListResp)
-// c.JSON(http.StatusOK, memberListResp)
-//}
-//
-//// @Summary 获取全部群成员列表
-//// @Description 获取全部群成员列表
-//// @Tags 群组相关
-//// @ID GetGroupAllMemberList
-//// @Accept json
-//// @Param token header string true "im token"
-//// @Param req body api.GetGroupAllMemberReq true "GroupID为要获取群成员的群ID"
-//// @Produce json
-//// @Success 0 {object} api.GetGroupAllMemberResp{data=[]sdkws.GroupMemberFullInfo}
-//// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
-//// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
-//// @Router /group/get_group_all_member_list [post]
-//func GetGroupAllMemberList(c *gin.Context) {
-// params := api.GetGroupAllMemberReq{}
-// if err := c.BindJSON(¶ms); err != nil {
-// log.NewError("0", "BindJSON failed ", err.Error())
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// return
-// }
-// req := &rpc.GetGroupAllMemberReq{}
-// utils.CopyStructFields(req, ¶ms)
-//
-// var ok bool
-// var errInfo string
-// ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// if !ok {
-// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-//
-// log.NewInfo(req.OperationID, "GetGroupAllMember args ", req.String())
-//
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// if etcdConn == nil {
-// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// maxSizeOption := grpc.MaxCallRecvMsgSize(1024 * 1024 * constant.GroupRPCRecvSize)
-// client := rpc.NewGroupClient(etcdConn)
-// RpcResp, err := client.GetGroupAllMember(context.Background(), req, maxSizeOption)
-// if err != nil {
-// log.NewError(req.OperationID, "GetGroupAllMember failed err", err.Error(), req.String())
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
-// return
-// }
-//
-// memberListResp := api.GetGroupAllMemberResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, MemberList: RpcResp.MemberList}
-// memberListResp.Map = jsonData.JsonDataList(memberListResp.MemberList)
-// log.NewInfo(req.OperationID, "GetGroupAllMember api return ", len(memberListResp.MemberList))
-// c.JSON(http.StatusOK, memberListResp)
-//}
-//
-//// @Summary 获取用户加入群列表
-//// @Description 获取用户加入群列表
-//// @Tags 群组相关
-//// @ID GetJoinedGroupList
-//// @Accept json
-//// @Param token header string true "im token"
-//// @Param req body api.GetJoinedGroupListReq true "fromUserID为要获取的用户ID"
-//// @Produce json
-//// @Success 0 {object} api.GetJoinedGroupListResp{data=[]sdkws.GroupInfo}
-//// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
-//// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
-//// @Router /group/get_joined_group_list [post]
-//func GetJoinedGroupList(c *gin.Context) {
-// params := api.GetJoinedGroupListReq{}
-// if err := c.BindJSON(¶ms); err != nil {
-// log.NewError("0", "BindJSON failed ", err.Error())
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// return
-// }
-// req := &rpc.GetJoinedGroupListReq{}
-// utils.CopyStructFields(req, params)
-//
-// var ok bool
-// var errInfo string
-// ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// if !ok {
-// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-//
-// log.NewInfo(req.OperationID, "FindJoinedGroup args ", req.String())
-//
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// if etcdConn == nil {
-// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// client := rpc.NewGroupClient(etcdConn)
-// RpcResp, err := client.GetJoinedGroupList(context.Background(), req)
-// if err != nil {
-// log.NewError(req.OperationID, "FindJoinedGroup failed ", err.Error(), req.String())
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
-// return
-// }
-//
-// GroupListResp := api.GetJoinedGroupListResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, GroupInfoList: RpcResp.GroupList}
-// GroupListResp.Map = jsonData.JsonDataList(GroupListResp.GroupInfoList)
-// log.NewInfo(req.OperationID, "FindJoinedGroup api return ", GroupListResp)
-// c.JSON(http.StatusOK, GroupListResp)
-//}
-//
-//// @Summary 将用户拉入群组
-//// @Description 将用户拉入群组
-//// @Tags 群组相关
-//// @ID InviteUserToGroup
-//// @Accept json
-//// @Param token header string true "im token"
-//// @Param req body api.InviteUserToGroupReq true "groupID为要拉进的群组ID
invitedUserIDList为要获取群成员的群ID列表
reason为原因"
-//// @Produce json
-//// @Success 0 {object} api.InviteUserToGroupResp "result为结果码, -1为失败, 0为成功""
-//// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
-//// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
-//// @Router /group/invite_user_to_group [post]
-//func InviteUserToGroup(c *gin.Context) {
-// params := api.InviteUserToGroupReq{}
-// if err := c.BindJSON(¶ms); err != nil {
-// log.NewError("0", "BindJSON failed ", err.Error())
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// return
-// }
-// if len(params.InvitedUserIDList) > constant.MaxNotificationNum {
-// errMsg := params.OperationID + " too many members " + utils.Int32ToString(int32(len(params.InvitedUserIDList)))
-// log.Error(params.OperationID, errMsg)
-// c.JSON(http.StatusOK, gin.H{"errCode": 400, "errMsg": errMsg})
-// return
-// }
-// req := &rpc.InviteUserToGroupReq{}
-// utils.CopyStructFields(req, ¶ms)
-//
-// var ok bool
-// var errInfo string
-// ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// if !ok {
-// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-//
-// log.NewInfo(req.OperationID, "InviteUserToGroup args ", req.String())
-//
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// if etcdConn == nil {
-// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// client := rpc.NewGroupClient(etcdConn)
-// RpcResp, err := client.InviteUserToGroup(context.Background(), req)
-// if err != nil {
-// log.NewError(req.OperationID, "InviteUserToGroup failed ", err.Error(), req.String())
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
-// return
-// }
-//
-// resp := api.InviteUserToGroupResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}}
-// for _, v := range RpcResp.Id2ResultList {
-// resp.UserIDResultList = append(resp.UserIDResultList, &api.UserIDResult{UserID: v.UserID, Result: v.Result})
-// }
-//
-// if len(resp.UserIDResultList) == 0 {
-// resp.UserIDResultList = *new([]*api.UserIDResult)
-// }
-//
-// log.NewInfo(req.OperationID, "InviteUserToGroup api return ", resp)
-// c.JSON(http.StatusOK, resp)
-//}
-//
-//// @Summary 创建群组
-//// @Description 创建群组
-//// @Tags 群组相关
-//// @ID CreateGroup
-//// @Accept json
-//// @Param token header string true "im token"
-//// @Param req body api.CreateGroupReq true "groupType这里填0代表普通群
groupName为群名称
introduction为群介绍
notification为群公共
ownerUserID为群主ID
ex为群扩展字段
memberList中对象roleLevel为群员角色,1为普通用户 2为群主 3为管理员"
-//// @Produce json
-//// @Success 0 {object} api.CreateGroupResp{data=sdkws.GroupInfo}
-//// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
-//// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
-//// @Router /group/create_group [post]
-////func CreateGroup(c *gin.Context) {
-//// params := api.CreateGroupReq{}
-//// if err := c.BindJSON(¶ms); err != nil {
-//// log.NewError("0", "BindJSON failed ", err.Error())
-//// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-//// return
-//// }
-////
-//// if len(params.MemberList) > constant.MaxNotificationNum {
-//// errMsg := params.OperationID + " too many members " + utils.Int32ToString(int32(len(params.MemberList)))
-//// log.Error(params.OperationID, errMsg)
-//// c.JSON(http.StatusOK, gin.H{"errCode": 400, "errMsg": errMsg})
-//// return
-//// }
-//// req := &rpc.CreateGroupReq{GroupInfo: &sdkws.GroupInfo{}}
-//// utils.CopyStructFields(req.GroupInfo, ¶ms)
-////
-//// for _, v := range params.MemberList {
-//// req.InitMemberList = append(req.InitMemberList, &rpc.GroupAddMemberInfo{UserID: v.UserID, RoleLevel: v.RoleLevel})
-//// }
-////
-//// var ok bool
-//// var errInfo string
-//// ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-//// if !ok {
-//// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-//// log.NewError(req.OperationID, errMsg)
-//// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": errMsg})
-//// return
-//// }
-////
-//// req.OwnerUserID = params.OwnerUserID
-//// req.OperationID = params.OperationID
-////
-//// log.NewInfo(req.OperationID, "CreateGroup args ", req.String())
-////
-//// etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-//// if etcdConn == nil {
-//// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-//// log.NewError(req.OperationID, errMsg)
-//// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-//// return
-//// }
-//// client := rpc.NewGroupClient(etcdConn)
-//// RpcResp, err := client.CreateGroup(context.Background(), req)
-//// if err != nil {
-//// log.NewError(req.OperationID, "CreateGroup failed ", err.Error(), req.String())
-//// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed"})
-//// return
-//// }
-////
-//// resp := api.CreateGroupResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}}
-//// if RpcResp.ErrCode == 0 {
-//// utils.CopyStructFields(&resp.GroupInfo, RpcResp.GroupInfo)
-//// resp.Map = jsonData.JsonDataOne(&resp.GroupInfo)
-//// }
-//// log.NewInfo(req.OperationID, "CreateGroup api return ", resp)
-//// c.JSON(http.StatusOK, resp)
-////}
-//
-//func NewCreateGroup(c *gin.Context) {
-// common.ApiToRpc(c, &api.CreateGroupReq{}, &api.CreateGroupResp{},
-// config.Config.RpcRegisterName.OpenImGroupName, rpc.NewGroupClient, "CreateGroup")
-//}
-//
-//// @Summary 获取用户收到的加群信息列表
-//// @Description 获取用户收到的加群信息列表
-//// @Tags 群组相关
-//// @ID GetRecvGroupApplicationList
-//// @Accept json
-//// @Param token header string true "im token"
-//// @Param req body api.GetGroupApplicationListReq true "fromUserID为要获取的用户ID"
-//// @Produce json
-//// @Success 0 {object} api.GetGroupApplicationListResp{data=[]sdkws.GroupRequest}
-//// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
-//// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
-//// @Router /group/get_recv_group_applicationList [post]
-//func GetRecvGroupApplicationList(c *gin.Context) {
-// params := api.GetGroupApplicationListReq{}
-// if err := c.BindJSON(¶ms); err != nil {
-// log.NewError("0", "BindJSON failed ", err.Error())
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// return
-// }
-// req := &rpc.GetGroupApplicationListReq{}
-// utils.CopyStructFields(req, params)
-// var ok bool
-// var errInfo string
-// ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// if !ok {
-// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": errMsg})
-// return
-// }
-// log.NewInfo(req.OperationID, "GetGroupApplicationList args ", req.String())
-//
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// if etcdConn == nil {
-// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// client := rpc.NewGroupClient(etcdConn)
-// reply, err := client.GetGroupApplicationList(context.Background(), req)
-// if err != nil {
-// log.NewError(req.OperationID, "GetGroupApplicationList failed ", err.Error(), req.String())
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
-// return
-// }
-//
-// resp := api.GetGroupApplicationListResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}, GroupRequestList: reply.GroupRequestList}
-// resp.Map = jsonData.JsonDataList(resp.GroupRequestList)
-// log.NewInfo(req.OperationID, "GetGroupApplicationList api return ", resp)
-// c.JSON(http.StatusOK, resp)
-//}
-//
-//// @Summary 获取用户加群申请列表
-//// @Description 获取用户加群申请列表
-//// @Tags 群组相关
-//// @ID GetUserReqGroupApplicationList
-//// @Accept json
-//// @Param token header string true "im token"
-//// @Param req body api.GetUserReqGroupApplicationListReq true "userID为要获取的用户ID"
-//// @Produce json
-//// @Success 0 {object} api.GetGroupApplicationListResp{data=[]sdkws.GroupRequest}
-//// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
-//// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
-//// @Router /group/get_user_req_group_applicationList [post]
-//func GetUserReqGroupApplicationList(c *gin.Context) {
-// common.ApiToRpc(c, &api.GetUserReqGroupApplicationListReq{}, &api.GetUserRespGroupApplicationResp{},
-// config.Config.RpcRegisterName.OpenImGroupName, rpc.NewGroupClient, "GetGroupApplicationList")
-//}
-//
-//// @Summary 通过群ID列表获取群信息
-//// @Description 通过群ID列表获取群信息
-//// @Tags 群组相关
-//// @ID GetGroupsInfo
-//// @Accept json
-//// @Param token header string true "im token"
-//// @Param req body api.GetGroupInfoReq true "groupIDList为群ID列表"
-//// @Produce json
-//// @Success 0 {object} api.GetGroupInfoResp
-//// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
-//// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
-//// @Router /group/get_groups_info [post]
-//func GetGroupsInfo(c *gin.Context) {
-// params := api.GetGroupInfoReq{}
-// if err := c.BindJSON(¶ms); err != nil {
-// log.NewError("0", "BindJSON failed ", err.Error())
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// return
-// }
-// req := &rpc.GetGroupsInfoReq{}
-// utils.CopyStructFields(req, ¶ms)
-//
-// var ok bool
-// var errInfo string
-// ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// if !ok {
-// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-//
-// log.NewInfo(req.OperationID, "GetGroupsInfo args ", req.String())
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// if etcdConn == nil {
-// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// client := rpc.NewGroupClient(etcdConn)
-// RpcResp, err := client.GetGroupsInfo(context.Background(), req)
-// if err != nil {
-// log.NewError(req.OperationID, "GetGroupsInfo failed ", err.Error(), req.String())
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed"})
-// return
-// }
-//
-// resp := api.GetGroupInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, GroupInfoList: RpcResp.GroupInfoList}
-// resp.Map = jsonData.JsonDataList(resp.GroupInfoList)
-// log.NewInfo(req.OperationID, "GetGroupsInfo api return ", resp)
-// c.JSON(http.StatusOK, resp)
-//}
-//
-////func transferGroupInfo(input []*sdkws.GroupInfo) []*api.GroupInfoAlias {
-//// var result []*api.GroupInfoAlias
-//// for _, v := range input {
-//// t := &api.GroupInfoAlias{}
-//// utils.CopyStructFields(t, &v)
-//// if v.NeedVerification != nil {
-//// t.NeedVerification = v.NeedVerification.Value
-//// }
-//// result = append(result, t)
-//// }
-//// return result
-////}
-//
-////process application
-//
-//// @Summary 处理加群消息
-//// @Description 处理加群消息
-//// @Tags 群组相关
-//// @ID ApplicationGroupResponse
-//// @Accept json
-//// @Param token header string true "im token"
-//// @Param req body api.ApplicationGroupResponseReq true "groupID为要处理的群ID
fromUserID为要处理的用户ID
handleMsg为处理结果信息
handleResult为处理结果 1为同意加群 2为拒绝加群"
-//// @Produce json
-//// @Success 0 {object} api.ApplicationGroupResponseResp
-//// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
-//// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
-//// @Router /group/group_application_response [post]
-//func ApplicationGroupResponse(c *gin.Context) {
-// params := api.ApplicationGroupResponseReq{}
-// if err := c.BindJSON(¶ms); err != nil {
-// log.NewError("0", "BindJSON failed ", err.Error())
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// return
-// }
-// req := &rpc.GroupApplicationResponseReq{}
-// utils.CopyStructFields(req, ¶ms)
-//
-// var ok bool
-// var errInfo string
-// ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// if !ok {
-// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-//
-// log.NewInfo(req.OperationID, "ApplicationGroupResponse args ", req.String())
-//
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// if etcdConn == nil {
-// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// client := rpc.NewGroupClient(etcdConn)
-// reply, err := client.GroupApplicationResponse(context.Background(), req)
-// if err != nil {
-// log.NewError(req.OperationID, "GroupApplicationResponse failed ", req.String())
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
-// return
-// }
-//
-// resp := api.ApplicationGroupResponseResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}}
-// log.NewInfo(req.OperationID, "ApplicationGroupResponse api return ", resp)
-// c.JSON(http.StatusOK, resp)
-//}
-//
-//// @Summary 加入群聊
-//// @Description 加入群聊
-//// @Tags 群组相关
-//// @ID JoinGroup
-//// @Accept json
-//// @Param token header string true "im token"
-//// @Param req body api.JoinGroupReq true "reqMessage为申请进群信息
groupID为申请的群ID"
-//// @Produce json
-//// @Success 0 {object} api.JoinGroupResp
-//// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
-//// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
-//// @Router /group/join_group [post]
-//func JoinGroup(c *gin.Context) {
-// params := api.JoinGroupReq{}
-// if err := c.BindJSON(¶ms); err != nil {
-// log.NewError("0", "BindJSON failed ", err.Error())
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// return
-// }
-// req := &rpc.JoinGroupReq{}
-// utils.CopyStructFields(req, params)
-//
-// var ok bool
-// var errInfo string
-// ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// if !ok {
-// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-//
-// log.NewInfo(req.OperationID, "JoinGroup args ", req.String())
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// if etcdConn == nil {
-// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// client := rpc.NewGroupClient(etcdConn)
-//
-// RpcResp, err := client.JoinGroup(context.Background(), req)
-// if err != nil {
-// log.NewError(req.OperationID, "JoinGroup failed ", err.Error(), req.String())
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed"})
-// return
-// }
-// resp := api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}
-// log.NewInfo(req.OperationID, "JoinGroup api return", RpcResp.String())
-// c.JSON(http.StatusOK, resp)
-//}
-//
-//// @Summary 当前用户退出群聊
-//// @Description 当前用户退出群聊
-//// @Tags 群组相关
-//// @ID QuitGroup
-//// @Accept json
-//// @Param token header string true "im token"
-//// @Param req body api.QuitGroupReq true "groupID为要退出的群ID"
-//// @Produce json
-//// @Success 0 {object} api.QuitGroupResp
-//// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
-//// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
-//// @Router /group/quit_group [post]
-//func QuitGroup(c *gin.Context) {
-// params := api.QuitGroupReq{}
-// if err := c.BindJSON(¶ms); err != nil {
-// log.NewError("0", "BindJSON failed ", err.Error())
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// return
-// }
-// req := &rpc.QuitGroupReq{}
-// utils.CopyStructFields(req, ¶ms)
-//
-// var ok bool
-// var errInfo string
-// ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// if !ok {
-// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-//
-// log.NewInfo(req.OperationID, "QuitGroup args ", req.String())
-//
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// if etcdConn == nil {
-// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// client := rpc.NewGroupClient(etcdConn)
-// RpcResp, err := client.QuitGroup(context.Background(), req)
-// if err != nil {
-// log.NewError(req.OperationID, "call quit group rpc server failed,err=%s", err.Error())
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed"})
-// return
-// }
-// resp := api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}
-// log.NewInfo(req.OperationID, "QuitGroup api return", RpcResp.String())
-// c.JSON(http.StatusOK, resp)
-//}
-//
-//// @Summary 设置群信息
-//// @Description 设置群信息
-//// @Tags 群组相关
-//// @ID SetGroupInfo
-//// @Accept json
-//// @Param token header string true "im token"
-//// @Param req body api.SetGroupInfoReq true "groupID为要修改的群ID
groupName为新的群名称
notification为群介绍
introduction为群公告
needVerification为加群验证 0为申请需要同意 邀请直接进 1为所有人进群需要验证,除了群主管理员邀请进群 2为直接进群"
-//// @Produce json
-//// @Success 0 {object} api.SetGroupInfoResp
-//// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
-//// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
-//// @Router /group/set_group_info [post]
-////func SetGroupInfo(c *gin.Context) {
-//// params := api.SetGroupInfoReq{}
-//// if err := c.BindJSON(¶ms); err != nil {
-//// log.NewError("0", "BindJSON failed ", err.Error())
-//// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-//// return
-//// }
-//// req := &rpc.SetGroupInfoReq{GroupInfoForSet: &sdkws.GroupInfoForSet{}}
-//// utils.CopyStructFields(req.GroupInfoForSet, ¶ms)
-//// req.OperationID = params.OperationID
-//// argsHandle(¶ms, req)
-//// var ok bool
-//// var errInfo string
-//// ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-//// if !ok {
-//// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-//// log.NewError(req.OperationID, errMsg)
-//// c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
-//// return
-//// }
-////
-//// log.NewInfo(req.OperationID, "SetGroupInfo args ", req.String())
-////
-//// etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-//// if etcdConn == nil {
-//// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-//// log.NewError(req.OperationID, errMsg)
-//// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-//// return
-//// }
-//// client := rpc.NewGroupClient(etcdConn)
-//// RpcResp, err := client.SetGroupInfo(context.Background(), req)
-//// if err != nil {
-//// log.NewError(req.OperationID, "SetGroupInfo failed ", err.Error(), req.String())
-//// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call rpc server failed"})
-//// return
-//// }
-//// resp := api.SetGroupInfoResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}}
-//// c.JSON(http.StatusOK, resp)
-//// log.NewInfo(req.OperationID, "SetGroupInfo api return ", resp)
-////}
-//
-//func NewSetGroupInfo(c *gin.Context) {
-// common.ApiToRpc(c, &api.SetGroupInfoReq{}, &api.SetGroupInfoResp{},
-// config.Config.RpcRegisterName.OpenImGroupName, rpc.NewGroupClient, "SetGroupInfo")
-//}
-//
-//func argsHandle(params *api.SetGroupInfoReq, req *rpc.SetGroupInfoReq) {
-// if params.NeedVerification != nil {
-// req.GroupInfoForSet.NeedVerification = &wrappers.Int32Value{Value: *params.NeedVerification}
-// log.NewInfo(req.OperationID, "NeedVerification ", req.GroupInfoForSet.NeedVerification)
-// }
-// if params.LookMemberInfo != nil {
-// req.GroupInfoForSet.LookMemberInfo = &wrappers.Int32Value{Value: *params.LookMemberInfo}
-// log.NewInfo(req.OperationID, "LookMemberInfo ", req.GroupInfoForSet.LookMemberInfo)
-// }
-// if params.ApplyMemberFriend != nil {
-// req.GroupInfoForSet.ApplyMemberFriend = &wrappers.Int32Value{Value: *params.ApplyMemberFriend}
-// log.NewInfo(req.OperationID, "ApplyMemberFriend ", req.GroupInfoForSet.ApplyMemberFriend)
-// }
-//}
-//
-//// @Summary 转让群主
-//// @Description 转让群主
-//// @Tags 群组相关
-//// @ID TransferGroupOwner
-//// @Accept json
-//// @Param token header string true "im token"
-//// @Param req body api.TransferGroupOwnerReq true "GroupID为要操作的群ID
oldOwnerUserID为老群主ID
newOwnerUserID为新群主ID"
-//// @Produce json
-//// @Success 0 {object} api.TransferGroupOwnerResp
-//// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
-//// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
-//// @Router /group/transfer_group [post]
-//func TransferGroupOwner(c *gin.Context) {
-// params := api.TransferGroupOwnerReq{}
-// if err := c.BindJSON(¶ms); err != nil {
-// log.NewError("0", "BindJSON failed ", err.Error())
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// return
-// }
-// req := &rpc.TransferGroupOwnerReq{}
-// utils.CopyStructFields(req, ¶ms)
-//
-// var ok bool
-// var errInfo string
-// ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// if !ok {
-// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-//
-// log.NewInfo(req.OperationID, "TransferGroupOwner args ", req.String())
-//
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// if etcdConn == nil {
-// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// client := rpc.NewGroupClient(etcdConn)
-// reply, err := client.TransferGroupOwner(context.Background(), req)
-// if err != nil {
-// log.NewError(req.OperationID, "TransferGroupOwner failed ", req.String())
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
-// return
-// }
-//
-// resp := api.TransferGroupOwnerResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}}
-// log.NewInfo(req.OperationID, "TransferGroupOwner api return ", resp)
-// c.JSON(http.StatusOK, resp)
-//}
-//
-//// @Summary 解散群组
-//// @Description 解散群组
-//// @Tags 群组相关
-//// @ID DismissGroup
-//// @Accept json
-//// @Param token header string true "im token"
-//// @Param req body api.DismissGroupReq true "groupID为要解散的群组ID"
-//// @Produce json
-//// @Success 0 {object} api.DismissGroupResp
-//// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
-//// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
-//// @Router /group/dismiss_group [post]
-//func DismissGroup(c *gin.Context) {
-// params := api.DismissGroupReq{}
-// if err := c.BindJSON(¶ms); err != nil {
-// log.NewError("0", "BindJSON failed ", err.Error())
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// return
-// }
-// req := &rpc.DismissGroupReq{}
-// utils.CopyStructFields(req, ¶ms)
-//
-// var ok bool
-// var errInfo string
-// ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// if !ok {
-// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-//
-// log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " args ", req.String())
-//
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// if etcdConn == nil {
-// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// client := rpc.NewGroupClient(etcdConn)
-// reply, err := client.DismissGroup(context.Background(), req)
-// if err != nil {
-// log.NewError(req.OperationID, utils.GetSelfFuncName(), " failed ", req.String())
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
-// return
-// }
-//
-// resp := api.DismissGroupResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}}
-// log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api return ", resp)
-// c.JSON(http.StatusOK, resp)
-//}
-//
-//// @Summary 禁言群成员
-//// @Description 禁言群成员
-//// @Tags 群组相关
-//// @ID MuteGroupMember
-//// @Accept json
-//// @Param token header string true "im token"
-//// @Param req body api.MuteGroupMemberReq true "groupID为群组ID
userID为要禁言的用户ID
mutedSeconds为禁言秒数"
-//// @Produce json
-//// @Success 0 {object} api.DismissGroupResp
-//// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
-//// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
-//// @Router /group/mute_group_member [post]
-//func MuteGroupMember(c *gin.Context) {
-// params := api.MuteGroupMemberReq{}
-// if err := c.BindJSON(¶ms); err != nil {
-// log.NewError("0", "BindJSON failed ", err.Error())
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// return
-// }
-// req := &rpc.MuteGroupMemberReq{}
-// utils.CopyStructFields(req, ¶ms)
-//
-// var ok bool
-// var errInfo string
-// ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// if !ok {
-// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-//
-// log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String())
-//
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// if etcdConn == nil {
-// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// client := rpc.NewGroupClient(etcdConn)
-// reply, err := client.MuteGroupMember(context.Background(), req)
-// if err != nil {
-// log.NewError(req.OperationID, utils.GetSelfFuncName(), " failed ", req.String())
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
-// return
-// }
-//
-// resp := api.MuteGroupMemberResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}}
-// log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api return ", resp)
-// c.JSON(http.StatusOK, resp)
-//}
-//
-//// @Summary 取消禁言群成员
-//// @Description 取消禁言群成员
-//// @Tags 群组相关
-//// @ID CancelMuteGroupMember
-//// @Accept json
-//// @Param token header string true "im token"
-//// @Param req body api.CancelMuteGroupMemberReq true "groupID为群组ID
userID为要取消禁言的用户ID"
-//// @Produce json
-//// @Success 0 {object} api.CancelMuteGroupMemberResp
-//// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
-//// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
-//// @Router /group/cancel_mute_group_member [post]
-//func CancelMuteGroupMember(c *gin.Context) {
-// nCtx := tracelog.NewCtx(c, utils.GetSelfFuncName())
-// defer log.ShowLog(c)
-//
-// params := api.CancelMuteGroupMemberReq{}
-// if err := c.BindJSON(¶ms); err != nil {
-// tracelog.WriteErrorResponse(nCtx, "BindJSON", err)
-// return
-// }
-// tracelog.SetCtxInfo(nCtx, "BindJSON", nil, "params", params)
-// req := &rpc.CancelMuteGroupMemberReq{}
-// utils.CopyStructFields(req, ¶ms)
-//
-// //var err error
-// //if err, req.OpUserID, _ = token_verify.ParseUserIDFromToken(c.Request.Header.Get("token"), req.OperationID); err != nil {
-// // tracelog.WriteErrorResponse(nCtx, "ParseUserIDFromToken", err)
-// // return
-// //}
-// tracelog.SetCtxInfo(nCtx, "ParseUserIDFromToken", nil, "token", c.Request.Header.Get("token"), "OpUserID", req.OpUserID)
-//
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-//
-// client := rpc.NewGroupClient(etcdConn)
-// reply, err := client.CancelMuteGroupMember(nCtx, req)
-// if err != nil {
-// tracelog.WriteErrorResponse(nCtx, "CancelMuteGroupMember", err)
-// return
-// }
-//
-// tracelog.SetCtxInfo(nCtx, "CancelMuteGroupMember", nil, "req", req.String(), "resp", reply.String())
-// resp := api.CancelMuteGroupMemberResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}}
-// c.JSON(http.StatusOK, resp)
-//}
-//
-//// @Summary 禁言群组
-//// @Description 禁言群组
-//// @Tags 群组相关
-//// @ID MuteGroup
-//// @Accept json
-//// @Param token header string true "im token"
-//// @Param req body api.MuteGroupReq true "groupID为群组ID"
-//// @Produce json
-//// @Success 0 {object} api.MuteGroupResp
-//// @Failure 500 {object} api.MuteGroupResp "errCode为500 一般为服务器内部错误"
-//// @Failure 400 {object} api.MuteGroupResp "errCode为400 一般为参数输入错误, token未带上等"
-//// @Router /group/mute_group [post]
-//func MuteGroup(c *gin.Context) {
-// params := api.MuteGroupReq{}
-// if err := c.BindJSON(¶ms); err != nil {
-// log.NewError("0", "BindJSON failed ", err.Error())
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// return
-// }
-// req := &rpc.MuteGroupReq{}
-// utils.CopyStructFields(req, ¶ms)
-//
-// var ok bool
-// var errInfo string
-// ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// if !ok {
-// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": errMsg})
-// return
-// }
-//
-// log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String())
-//
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// if etcdConn == nil {
-// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// client := rpc.NewGroupClient(etcdConn)
-// reply, err := client.MuteGroup(context.Background(), req)
-// if err != nil {
-// log.NewError(req.OperationID, utils.GetSelfFuncName(), " failed ", req.String())
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
-// return
-// }
-//
-// resp := api.MuteGroupResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}}
-// log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api return ", resp)
-// c.JSON(http.StatusOK, resp)
-//}
-//
-//// @Summary 取消禁言群组
-//// @Description 取消禁言群组
-//// @Tags 群组相关
-//// @ID CancelMuteGroup
-//// @Accept json
-//// @Param token header string true "im token"
-//// @Param req body api.CancelMuteGroupReq true "groupID为群组ID"
-//// @Produce json
-//// @Success 0 {object} api.CancelMuteGroupResp
-//// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
-//// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
-//// @Router /group/cancel_mute_group [post]
-//func CancelMuteGroup(c *gin.Context) {
-// params := api.CancelMuteGroupReq{}
-// if err := c.BindJSON(¶ms); err != nil {
-// log.NewError("0", "BindJSON failed ", err.Error())
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// return
-// }
-// req := &rpc.CancelMuteGroupReq{}
-// utils.CopyStructFields(req, ¶ms)
-//
-// var ok bool
-// var errInfo string
-// ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// if !ok {
-// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-//
-// log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String())
-//
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// if etcdConn == nil {
-// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// client := rpc.NewGroupClient(etcdConn)
-// reply, err := client.CancelMuteGroup(context.Background(), req)
-// if err != nil {
-// log.NewError(req.OperationID, utils.GetSelfFuncName(), " failed ", req.String())
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
-// return
-// }
-//
-// resp := api.CancelMuteGroupResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}}
-// log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api return ", resp)
-// c.JSON(http.StatusOK, resp)
-//}
-//
-////SetGroupMemberNickname
-//
-//func SetGroupMemberNickname(c *gin.Context) {
-// params := api.SetGroupMemberNicknameReq{}
-// if err := c.BindJSON(¶ms); err != nil {
-// log.NewError("0", "BindJSON failed ", err.Error())
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// return
-// }
-// req := &rpc.SetGroupMemberNicknameReq{}
-// utils.CopyStructFields(req, ¶ms)
-//
-// var ok bool
-// var errInfo string
-// ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// if !ok {
-// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-//
-// log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", req.String())
-//
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// if etcdConn == nil {
-// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// client := rpc.NewGroupClient(etcdConn)
-// reply, err := client.SetGroupMemberNickname(context.Background(), req)
-// if err != nil {
-// log.NewError(req.OperationID, utils.GetSelfFuncName(), " failed ", req.String())
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
-// return
-// }
-//
-// resp := api.SetGroupMemberNicknameResp{CommResp: api.CommResp{ErrCode: reply.CommonResp.ErrCode, ErrMsg: reply.CommonResp.ErrMsg}}
-// log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api return ", resp)
-// c.JSON(http.StatusOK, resp)
-//}
-//
-//// @Summary 修改群成员信息
-//// @Description 修改群成员信息
-//// @Tags 群组相关
-//// @ID SetGroupMemberInfo
-//// @Accept json
-//// @Param token header string true "im token"
-//// @Param req body api.SetGroupMemberInfoReq true "除了operationID, userID, groupID其他参数可选
ex为拓展字段
faceURL为群头像
nickName为群昵称
roleLevel为群员角色,1为普通用户 2为群主 3为管理员"
-//// @Produce json
-//// @Success 0 {object} api.SetGroupMemberInfoResp
-//// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
-//// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
-//// @Router /group/set_group_member_info [post]
-//func SetGroupMemberInfo(c *gin.Context) {
-// var (
-// req api.SetGroupMemberInfoReq
-// resp api.SetGroupMemberInfoResp
-// )
-// if err := c.BindJSON(&req); err != nil {
-// log.NewError("0", "BindJSON failed ", err.Error())
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// return
-// }
-// log.NewInfo(req.OperationID, utils.GetSelfFuncName(), req)
-// var opUserID string
-// ok, opUserID, errInfo := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// if !ok {
-// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-//
-// reqPb := &rpc.SetGroupMemberInfoReq{
-// GroupID: req.GroupID,
-// UserID: req.UserID,
-// OperationID: req.OperationID,
-// OpUserID: opUserID,
-// }
-// if req.Nickname != nil {
-// reqPb.Nickname = &wrappers.StringValue{Value: *req.Nickname}
-// }
-// if req.FaceURL != nil {
-// reqPb.FaceURL = &wrappers.StringValue{Value: *req.FaceURL}
-// }
-// if req.Ex != nil {
-// reqPb.Ex = &wrappers.StringValue{Value: *req.Ex}
-// }
-// if req.RoleLevel != nil {
-// reqPb.RoleLevel = &wrappers.Int32Value{Value: *req.RoleLevel}
-// }
-// log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", reqPb.String())
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// if etcdConn == nil {
-// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// client := rpc.NewGroupClient(etcdConn)
-// respPb, err := client.SetGroupMemberInfo(context.Background(), reqPb)
-// if err != nil {
-// log.NewError(req.OperationID, utils.GetSelfFuncName(), " failed ", err.Error())
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
-// return
-// }
-//
-// resp.ErrMsg = respPb.CommonResp.ErrMsg
-// resp.ErrCode = respPb.CommonResp.ErrCode
-// log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api return ", resp)
-// c.JSON(http.StatusOK, resp)
-//}
-//
-//func GetGroupAbstractInfo(c *gin.Context) {
-// type GetGroupAbstractInfoReq struct {
-// //OperationID string `json:"operationID"`
-// GroupID string `json:"groupID"`
-// }
-// type GetGroupAbstractInfoResp struct {
-// GroupMemberNumber int32 `json:"groupMemberNumber"`
-// GroupMemberListHash uint64 `json:"groupMemberListHash"`
-// }
-// //common.ApiToRpc(c, &api.GetGroupAbstractInfoReq{}, &GetGroupAbstractInfoResp{}, config.Config.RpcRegisterName.OpenImGroupName, rpc.NewGroupClient, utils.GetSelfFuncName(), token_verify.ParseUserIDFromToken)
-// common.ApiToRpc(c, &api.GetGroupAbstractInfoReq{}, &GetGroupAbstractInfoResp{}, config.Config.RpcRegisterName.OpenImGroupName, rpc.NewGroupClient, utils.GetSelfFuncName())
-//
-// //var (
-// //req api.GetGroupAbstractInfoReq
-// //resp api.GetGroupAbstractInfoResp
-// //)
-// //nCtx := tracelog.NewCtx(c, utils.GetSelfFuncName())
-// //if err := c.BindJSON(&req); err != nil {
-// // log.NewError("0", "BindJSON failed ", err.Error())
-// // c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// // return
-// //}
-// //ok, opUserID, errInfo := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// //if !ok {
-// // errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// // log.NewError(req.OperationID, errMsg)
-// // c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
-// // return
-// //}
-// //
-// //etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// //if etcdConn == nil {
-// // errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// // log.NewError(req.OperationID, errMsg)
-// // c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// // return
-// //}
-// //client := rpc.NewGroupClient(etcdConn)
-// //md := metadata.Pairs("operationID", req.OperationID, "opUserID", opUserID)
-// //respPb, err := client.GetGroupAbstractInfo(metadata.NewOutgoingContext(c, md), &rpc.GetGroupAbstractInfoReq{
-// // GroupID: req.GroupID,
-// // OpUserID: opUserID,
-// // OperationID: req.OperationID,
-// //})
-// //log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api args ", respPb.String())
-// //if err != nil {
-// // //log.NewError(req.OperationID, utils.GetSelfFuncName(), " failed ", err.Error())
-// // //c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
-// // tracelog.WriteErrorResponse(nCtx, "GetGroupAbstractInfo", utils.Wrap(err, ""))
-// // return
-// //}
-// //resp.GroupMemberNumber = respPb.GroupMemberNumber
-// //resp.GroupMemberListHash = respPb.GroupMemberListHash
-// //log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " api return ", resp)
-// //c.JSON(http.StatusOK, resp)
-// //return
-//}
+func (g *Group) GetJoinedSuperGroupList(c *gin.Context) {
+ a2r.Call(group.GroupClient.GetJoinedSuperGroupList, g.getGroupClient, c)
+}
+
+func (g *Group) GetSuperGroupsInfo(c *gin.Context) {
+ a2r.Call(group.GroupClient.GetSuperGroupsInfo, g.getGroupClient, c)
+}
diff --git a/internal/api/group/group1.go b/internal/api/group/group1.go
deleted file mode 100644
index 0640be943..000000000
--- a/internal/api/group/group1.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package group
-
-import (
- "OpenIM/internal/a2r"
- "OpenIM/pkg/common/config"
- "OpenIM/pkg/proto/group"
- "context"
- "github.com/OpenIMSDK/openKeeper"
- "github.com/gin-gonic/gin"
-)
-
-var _ context.Context = nil // 解决goland编辑器bug
-
-func NewGroup(zk *openKeeper.ZkClient) *Group {
- return &Group{zk: zk}
-}
-
-type Group struct {
- zk *openKeeper.ZkClient
-}
-
-func (g *Group) getGroupClient() (group.GroupClient, error) {
- conn, err := g.zk.GetConn(config.Config.RpcRegisterName.OpenImGroupName)
- if err != nil {
- return nil, err
- }
- return group.NewGroupClient(conn), nil
-}
-
-func (g *Group) KickGroupMember(c *gin.Context) {
- a2r.Call(group.GroupClient.KickGroupMember, g.getGroupClient, c)
-}
-
-func (g *Group) GetGroupMembersInfo(c *gin.Context) {
- a2r.Call(group.GroupClient.GetGroupMembersInfo, g.getGroupClient, c)
-}
diff --git a/internal/api/group/group1_test.go b/internal/api/group/group1_test.go
deleted file mode 100644
index bfa6a8d9d..000000000
--- a/internal/api/group/group1_test.go
+++ /dev/null
@@ -1,11 +0,0 @@
-package group
-
-import "testing"
-
-func TestName(t *testing.T) {
- var g Group
-
- g.KickGroupMember(nil)
- g.GetGroupMembersInfo(nil)
-
-}
diff --git a/internal/api/group/super_group.go b/internal/api/group/super_group.go
deleted file mode 100644
index 89744452c..000000000
--- a/internal/api/group/super_group.go
+++ /dev/null
@@ -1,89 +0,0 @@
-package group
-
-//import (
-// jsonData "OpenIM/internal/utils"
-// api "OpenIM/pkg/apistruct"
-// "OpenIM/pkg/common/config"
-// "OpenIM/pkg/common/log"
-// "OpenIM/pkg/common/token_verify"
-// "OpenIM/pkg/getcdv3"
-// rpc "OpenIM/pkg/proto/group"
-// "OpenIM/pkg/utils"
-// "context"
-// "github.com/gin-gonic/gin"
-// "net/http"
-// "strings"
-//)
-//
-//func GetJoinedSuperGroupList(c *gin.Context) {
-// req := api.GetJoinedSuperGroupListReq{}
-// if err := c.BindJSON(&req); err != nil {
-// log.NewError("0", "BindJSON failed ", err.Error())
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// return
-// }
-// log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req)
-// ok, opUserID, errInfo := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// if !ok {
-// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// reqPb := rpc.GetJoinedSuperGroupListReq{OperationID: req.OperationID, OpUserID: opUserID, UserID: req.FromUserID}
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// if etcdConn == nil {
-// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// client := rpc.NewGroupClient(etcdConn)
-// rpcResp, err := client.GetJoinedSuperGroupList(context.Background(), &reqPb)
-// if err != nil {
-// log.NewError(req.OperationID, "InviteUserToGroup failed ", err.Error(), reqPb.String())
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
-// return
-// }
-// GroupListResp := api.GetJoinedSuperGroupListResp{GetJoinedGroupListResp: api.GetJoinedGroupListResp{CommResp: api.CommResp{ErrCode: rpcResp.CommonResp.ErrCode, ErrMsg: rpcResp.CommonResp.ErrMsg}, GroupInfoList: rpcResp.GroupList}}
-// GroupListResp.Map = jsonData.JsonDataList(GroupListResp.GroupInfoList)
-// log.NewInfo(req.OperationID, "GetJoinedSuperGroupList api return ", GroupListResp)
-// c.JSON(http.StatusOK, GroupListResp)
-//}
-//
-//func GetSuperGroupsInfo(c *gin.Context) {
-// req := api.GetSuperGroupsInfoReq{}
-// if err := c.BindJSON(&req); err != nil {
-// log.NewError("0", "BindJSON failed ", err.Error())
-// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
-// return
-// }
-// log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req)
-// ok, opUserID, errInfo := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
-// if !ok {
-// errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// reqPb := rpc.GetSuperGroupsInfoReq{OperationID: req.OperationID, OpUserID: opUserID, GroupIDList: req.GroupIDList}
-// etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, req.OperationID)
-// if etcdConn == nil {
-// errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
-// log.NewError(req.OperationID, errMsg)
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
-// return
-// }
-// client := rpc.NewGroupClient(etcdConn)
-// rpcResp, err := client.GetSuperGroupsInfo(context.Background(), &reqPb)
-// if err != nil {
-// log.NewError(req.OperationID, "InviteUserToGroup failed ", err.Error(), reqPb.String())
-// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error()})
-// return
-// }
-//
-// resp := api.GetSuperGroupsInfoResp{GetGroupInfoResp: api.GetGroupInfoResp{CommResp: api.CommResp{ErrCode: rpcResp.CommonResp.ErrCode, ErrMsg: rpcResp.CommonResp.ErrMsg}, GroupInfoList: rpcResp.GroupInfoList}}
-// resp.Map = jsonData.JsonDataList(resp.GroupInfoList)
-// log.NewInfo(req.OperationID, "GetGroupsInfo api return ", resp)
-// c.JSON(http.StatusOK, resp)
-//}
diff --git a/internal/api/route.go b/internal/api/route.go
index 101007080..6deb54601 100644
--- a/internal/api/route.go
+++ b/internal/api/route.go
@@ -81,8 +81,8 @@ func NewGinRouter() *gin.Engine {
c.Set("opUserID", userID)
c.Next()
})
+ g := group.NewGroup(nil)
{
- g := group.NewGroup(nil)
groupRouterGroup.POST("/create_group", g.NewCreateGroup) //1
groupRouterGroup.POST("/set_group_info", g.NewSetGroupInfo) //1
groupRouterGroup.POST("/join_group", g.JoinGroup) //1
@@ -93,25 +93,23 @@ func NewGinRouter() *gin.Engine {
groupRouterGroup.POST("/get_user_req_group_applicationList", g.GetUserReqGroupApplicationList)
groupRouterGroup.POST("/get_groups_info", g.GetGroupsInfo) //1
groupRouterGroup.POST("/kick_group", g.KickGroupMember) //1
- // groupRouterGroup.POST("/get_group_member_list", g.FindGroupMemberAll) //no use
- groupRouterGroup.POST("/get_group_all_member_list", g.GetGroupAllMemberList) //1
- groupRouterGroup.POST("/get_group_members_info", g.GetGroupMembersInfo) //1
- groupRouterGroup.POST("/invite_user_to_group", g.InviteUserToGroup) //1
+ //groupRouterGroup.POST("/get_group_all_member_list", g.GetGroupAllMemberList) //1
+ groupRouterGroup.POST("/get_group_members_info", g.GetGroupMembersInfo) //1
+ groupRouterGroup.POST("/invite_user_to_group", g.InviteUserToGroup) //1
groupRouterGroup.POST("/get_joined_group_list", g.GetJoinedGroupList)
groupRouterGroup.POST("/dismiss_group", g.DismissGroup) //
groupRouterGroup.POST("/mute_group_member", g.MuteGroupMember)
groupRouterGroup.POST("/cancel_mute_group_member", g.CancelMuteGroupMember) //MuteGroup
groupRouterGroup.POST("/mute_group", g.MuteGroup)
groupRouterGroup.POST("/cancel_mute_group", g.CancelMuteGroup)
- groupRouterGroup.POST("/set_group_member_nickname", g.SetGroupMemberNickname)
+ //groupRouterGroup.POST("/set_group_member_nickname", g.SetGroupMemberNickname)
groupRouterGroup.POST("/set_group_member_info", g.SetGroupMemberInfo)
groupRouterGroup.POST("/get_group_abstract_info", g.GetGroupAbstractInfo)
- //groupRouterGroup.POST("/get_group_all_member_list_by_split", g.GetGroupAllMemberListBySplit)
}
superGroupRouterGroup := r.Group("/super_group")
{
- superGroupRouterGroup.POST("/get_joined_group_list", group.GetJoinedSuperGroupList)
- superGroupRouterGroup.POST("/get_groups_info", group.GetSuperGroupsInfo)
+ superGroupRouterGroup.POST("/get_joined_group_list", g.GetJoinedSuperGroupList)
+ superGroupRouterGroup.POST("/get_groups_info", g.GetSuperGroupsInfo)
}
////certificate
authRouterGroup := r.Group("/auth")
diff --git a/internal/api2rpc/api.go b/internal/api2rpc/api.go
deleted file mode 100644
index 2e6ee02e5..000000000
--- a/internal/api2rpc/api.go
+++ /dev/null
@@ -1,99 +0,0 @@
-package api2rpc
-
-import (
- "OpenIM/pkg/common/constant"
- "OpenIM/pkg/common/tracelog"
- "context"
- "fmt"
- "github.com/gin-gonic/gin"
- "google.golang.org/grpc/status"
- "net/http"
- "strings"
-)
-
-//func ApiToRpc(c *gin.Context, apiReq, apiResp interface{}, rpcName string, rpcClientFunc interface{}, rpcFuncName string) {
-// if rpcName == "" {
-// rpcName = utils2.GetFuncName(1)
-// }
-// logFuncName := fmt.Sprintf("[ApiToRpc: %s]%s", utils2.GetFuncName(1), rpcFuncName)
-// ctx := tracelog.NewCtx(c, rpcFuncName)
-// defer log.ShowLog(ctx)
-// if err := c.BindJSON(apiReq); err != nil {
-// WriteErrorResponse(ctx, "BindJSON", err)
-// return
-// }
-// tracelog.SetCtxInfo(ctx, logFuncName, nil, "apiReq", apiReq)
-// etcdConn, err := rpcFn.GetConn(ctx, rpcName)
-// if err != nil {
-// WriteErrorResponse(ctx, "GetConn", err)
-// return
-// }
-// rpcClient := reflect.ValueOf(rpcClientFunc).Call([]reflect.Value{
-// reflect.ValueOf(etcdConn),
-// })[0].MethodByName(rpcFuncName) // rpcClient func
-// rpcReqPtr := reflect.New(rpcClient.Type().In(1).Elem()) // *req
-// CopyAny(apiReq, rpcReqPtr.Interface())
-// tracelog.SetCtxInfo(ctx, logFuncName, nil, "opUserID", c.GetString("opUserID"), "callRpcReq", rpcString(rpcReqPtr.Elem().Interface()))
-// respArr := rpcClient.Call([]reflect.Value{
-// reflect.ValueOf(context.Context(c)), // context.Context (ctx operationID. opUserID)
-// rpcReqPtr, // rpcClient apiReq
-// }) // respArr => (apiResp, error)
-// if !respArr[1].IsNil() { // rpcClient err != nil
-// err := respArr[1].Interface().(error)
-// WriteErrorResponse(ctx, rpcFuncName, err, "callRpcResp", "error")
-// return
-// }
-// rpcResp := respArr[0].Elem()
-// tracelog.SetCtxInfo(ctx, rpcFuncName, nil, "callRpcResp", rpcString(rpcResp.Interface()))
-// if apiResp != nil {
-// CopyAny(rpcResp.Interface(), apiResp)
-// }
-// SetSuccess(ctx, rpcFuncName, apiResp)
-//}
-
-func rpcString(v interface{}) string {
- if s, ok := v.(interface{ String() string }); ok {
- return s.String()
- }
- return fmt.Sprintf("%+v", v)
-}
-
-type baseResp struct {
- ErrCode int32 `json:"errCode"`
- ErrMsg string `json:"errMsg"`
- ErrDtl string `json:"errDtl"`
- Data interface{} `json:"data"`
-}
-
-func WriteErrorResponse(ctx context.Context, funcName string, err error, args ...interface{}) {
- tracelog.SetCtxInfo(ctx, funcName, err, args)
- e := tracelog.Unwrap(err)
- switch t := e.(type) {
- case *constant.ErrInfo:
- ctx.Value(tracelog.TraceLogKey).(*tracelog.ApiInfo).GinCtx.JSON(http.StatusOK, baseResp{ErrCode: t.ErrCode, ErrMsg: t.ErrMsg, ErrDtl: t.DetailErrMsg})
- //ctx.Value(TraceLogKey).(*ApiInfo).GinCtx.JSON(http.StatusOK, gin.H{"errCode": t.ErrCode, "errMsg": t.ErrMsg, "errDtl": t.DetailErrMsg})
- return
- default:
- s, ok := status.FromError(e)
- if !ok {
- ctx.Value(tracelog.TraceLogKey).(*tracelog.ApiInfo).GinCtx.JSON(http.StatusOK, &baseResp{ErrCode: constant.ErrDefaultOther.ErrCode, ErrMsg: err.Error(), ErrDtl: fmt.Sprintf("%+v", err)})
- //ctx.Value(TraceLogKey).(*ApiInfo).GinCtx.JSON(http.StatusOK, gin.H{"errCode": constant.ErrDefaultOther.ErrCode, "errMsg": err.Error(), "errDtl": fmt.Sprintf("%+v", err)})
- return
- }
- var details []string
- if err != e {
- details = append(details, fmt.Sprintf("%+v", err))
- }
- for _, s := range s.Details() {
- details = append(details, fmt.Sprintf("%+v", s))
- }
- ctx.Value(tracelog.TraceLogKey).(*tracelog.ApiInfo).GinCtx.JSON(http.StatusOK, &baseResp{ErrCode: int32(s.Code()), ErrMsg: s.Message(), ErrDtl: strings.Join(details, "\n")})
- //ctx.Value(TraceLogKey).(*ApiInfo).GinCtx.JSON(http.StatusOK, gin.H{"errCode": s.Code(), "errMsg": s.Message(), "errDtl": strings.Join(details, "\n")})
- return
- }
-}
-
-func SetSuccess(ctx context.Context, funcName string, data interface{}) {
- tracelog.SetCtxInfo(ctx, funcName, nil, "data", data)
- ctx.Value(tracelog.TraceLogKey).(*tracelog.ApiInfo).GinCtx.JSON(http.StatusOK, gin.H{"errCode": 0, "errMsg": "", "errDtl": "", "data": data})
-}
diff --git a/internal/api2rpc/api2rpc.go b/internal/api2rpc/api2rpc.go
deleted file mode 100644
index a2589c5fe..000000000
--- a/internal/api2rpc/api2rpc.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package api2rpc
-
-import (
- "context"
-)
-
-type Ignore struct{}
-
-type ApiBind[A, B any] interface {
- OperationID() string
- OpUserID() (string, error)
- Bind(*A) error
- Context() context.Context
- Resp(resp *B, err error)
-}
-
-type Api interface {
- OperationID() string
- OpUserID() string
- Context() context.Context
- Bind(req any) error
- Resp(resp any, err error)
-}
diff --git a/internal/api2rpc/api2rpc_test.go b/internal/api2rpc/api2rpc_test.go
deleted file mode 100644
index ec53315b5..000000000
--- a/internal/api2rpc/api2rpc_test.go
+++ /dev/null
@@ -1 +0,0 @@
-package api2rpc
diff --git a/internal/api2rpc/copy.go b/internal/api2rpc/copy.go
deleted file mode 100644
index 926646714..000000000
--- a/internal/api2rpc/copy.go
+++ /dev/null
@@ -1,274 +0,0 @@
-package api2rpc
-
-import (
- "fmt"
- "google.golang.org/protobuf/types/known/wrapperspb"
- "reflect"
-)
-
-func CopyAny(from, to interface{}) {
- copyAny(reflect.ValueOf(from), reflect.Indirect(reflect.ValueOf(to)))
-}
-
-func copyAny(from, to reflect.Value) {
- if !to.CanSet() {
- return
- }
- if isBaseNil(from) {
- return
- }
- if isBaseNil(to) {
- to.Set(getBaseZeroValue(to.Type()))
- }
- btFrom := baseType(from.Type())
- btTo := baseType(to.Type())
- if btTo.Kind() == reflect.Interface || typeEq(btFrom, btTo) {
- setBaseValue(from, to)
- return
- }
- if _, ok := wrapType[btTo.String()]; ok { // string -> wrapperspb.StringValue
- val := reflect.New(btTo).Elem()
- copyAny(from, val.FieldByName("Value"))
- setBaseValue(val, to)
- return
- }
- if _, ok := wrapType[btFrom.String()]; ok { // wrapperspb.StringValue -> string
- copyAny(baseValue(from).FieldByName("Value"), to)
- return
- }
- if btFrom.Kind() == reflect.Struct && btTo.Kind() == reflect.Struct {
- copyStruct(baseValue(from), baseValue(to))
- return
- }
- if btFrom.Kind() == reflect.Slice && btTo.Kind() == reflect.Slice {
- copySlice(baseValue(from), baseValue(to))
- return
- }
- if btFrom.Kind() == reflect.Map && btTo.Kind() == reflect.Map {
- copyMap(baseValue(from), baseValue(to))
- return
- }
- if btTo.Kind() == reflect.String {
- if isBaseNil(to) {
- to.Set(getBaseZeroValue(baseType(to.Type())))
- }
- setBaseValue(reflect.ValueOf(toString(from)), to)
- return
- }
- if toNumber(from, to) {
- return
- }
-
-}
-
-func setBaseValue(from, to reflect.Value) {
- if isBaseNil(from) {
- return
- }
- var l int
- t := to.Type()
- for t.Kind() == reflect.Ptr {
- l++
- t = t.Elem()
- }
- v := baseValue(from)
- for i := 0; i < l; i++ {
- t := reflect.New(v.Type())
- t.Elem().Set(v)
- v = t
- }
- to.Set(v)
-}
-
-func getBaseZeroValue(t reflect.Type) reflect.Value {
- var l int
- for t.Kind() == reflect.Ptr {
- l++
- t = t.Elem()
- }
- v := reflect.New(t)
- if l == 0 {
- v = v.Elem()
- } else {
- for i := 1; i < l; i++ {
- t := reflect.New(v.Type())
- t.Elem().Set(v)
- v = t
- }
- }
- r := reflect.New(v.Type()).Elem()
- r.Set(v)
- return r
-}
-
-func isBaseNil(v reflect.Value) bool {
- for {
- switch v.Kind() {
- case reflect.Ptr:
- v = v.Elem()
- case reflect.Invalid:
- return true
- default:
- return isNil(v)
- }
- }
-}
-
-func baseType(t reflect.Type) reflect.Type {
- for t.Kind() == reflect.Ptr {
- t = t.Elem()
- }
- return t
-}
-
-func typeEq(t1, t2 reflect.Type) bool {
- return t1.String() == t2.String()
-}
-
-func isNil(value reflect.Value) bool {
- switch value.Kind() {
- case reflect.Chan, reflect.Func, reflect.Map, reflect.Pointer, reflect.UnsafePointer, reflect.Interface, reflect.Slice:
- return value.IsNil()
- }
- return false
-}
-
-func baseValue(value reflect.Value) reflect.Value {
- for value.Kind() == reflect.Ptr {
- value = value.Elem()
- }
- return value
-}
-
-func copyStruct(from, to reflect.Value) {
- toType := to.Type()
- fromType := from.Type()
- n := to.NumField()
- for i := 0; i < n; i++ {
- toFieldType := toType.Field(i)
- if _, found := fromType.FieldByName(toFieldType.Name); !found {
- continue
- }
- copyAny(from.FieldByName(toFieldType.Name), to.Field(i))
- }
-}
-
-func copySlice(from, to reflect.Value) {
- size := from.Len()
- temp := reflect.MakeSlice(to.Type(), 0, size)
- elemTo := to.Type().Elem()
- for i := 0; i < size; i++ {
- var itemTo reflect.Value
- if item := from.Index(i); isBaseNil(item) {
- itemTo = reflect.Zero(elemTo)
- } else {
- itemTo = getBaseZeroValue(elemTo)
- copyAny(from.Index(i), itemTo)
- }
- temp = reflect.Append(temp, itemTo)
- }
- to.Set(temp)
-}
-
-func copyMap(from, to reflect.Value) {
- to.Set(reflect.MakeMap(to.Type()))
- toTypeKey := to.Type().Key()
- toTypeVal := to.Type().Elem()
- for r := from.MapRange(); r.Next(); {
- key := getBaseZeroValue(toTypeKey)
- copyAny(r.Key(), key)
- var val reflect.Value
- fVal := r.Value()
- if isBaseNil(fVal) {
- val = reflect.Zero(toTypeVal)
- } else {
- val = getBaseZeroValue(toTypeVal)
- copyAny(fVal, val)
- }
- to.SetMapIndex(key, val)
- }
-}
-
-func toString(value reflect.Value) string {
- if value.Kind() == reflect.Slice {
- switch value.Type().String() {
- case "[]uint8": // []byte -> []uint8
- return string(value.Interface().([]uint8))
- case "[]int32": // []rune -> []int32
- return string(value.Interface().([]int32))
- }
- }
- return fmt.Sprint(value.Interface())
-}
-
-func toNumber(from, to reflect.Value) bool {
- initTo := func() {
- if isBaseNil(to) {
- to.Set(getBaseZeroValue(to.Type()))
- }
- }
- switch baseValue(from).Kind() {
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- switch baseValue(to).Kind() {
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- initTo()
- baseValue(to).SetInt(baseValue(from).Int())
- return true
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
- initTo()
- baseValue(to).SetUint(uint64(baseValue(from).Int()))
- return true
- case reflect.Float64, reflect.Float32:
- initTo()
- baseValue(to).SetFloat(float64(baseValue(from).Int()))
- return true
- }
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
- switch baseValue(to).Kind() {
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- initTo()
- baseValue(to).SetInt(int64(baseValue(from).Uint()))
- return true
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
- initTo()
- baseValue(to).SetInt(int64(baseValue(from).Uint()))
- return true
- case reflect.Float64, reflect.Float32:
- initTo()
- baseValue(to).SetFloat(float64(baseValue(from).Uint()))
- return true
- }
- case reflect.Float64, reflect.Float32:
- switch baseValue(to).Kind() {
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- initTo()
- baseValue(to).SetInt(int64(baseValue(from).Float()))
- return true
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
- initTo()
- baseValue(to).SetUint(uint64(baseValue(from).Float()))
- return true
- case reflect.Float64, reflect.Float32:
- initTo()
- baseValue(to).SetFloat(baseValue(from).Float())
- return true
- }
- }
- return false
-}
-
-func typeName(v interface{}) string {
- return reflect.TypeOf(v).String()
-}
-
-var wrapType = map[string]struct{}{
- typeName(wrapperspb.DoubleValue{}): {},
- typeName(wrapperspb.FloatValue{}): {},
- typeName(wrapperspb.Int64Value{}): {},
- typeName(wrapperspb.UInt64Value{}): {},
- typeName(wrapperspb.Int32Value{}): {},
- typeName(wrapperspb.UInt32Value{}): {},
- typeName(wrapperspb.BoolValue{}): {},
- typeName(wrapperspb.StringValue{}): {},
- typeName(wrapperspb.BytesValue{}): {},
-}
diff --git a/internal/api2rpc/gin.go b/internal/api2rpc/gin.go
deleted file mode 100644
index 3a66ce355..000000000
--- a/internal/api2rpc/gin.go
+++ /dev/null
@@ -1,98 +0,0 @@
-package api2rpc
-
-import (
- "context"
- "github.com/gin-gonic/gin"
-)
-
-//func KickGroupMember(c *gin.Context) {
-// // 默认 全部自动
-// //var api ApiBind[apistruct.KickGroupMemberReq, apistruct.KickGroupMemberResp] = NewGin[apistruct.KickGroupMemberReq, apistruct.KickGroupMemberResp](c)
-// var api ApiBind[apistruct.KickGroupMemberReq, apistruct.KickGroupMemberResp] = nil
-// var client func(conn *grpc.ClientConn) group.GroupClient = nil
-// var rpcFn func(ctx context.Context, in *group.KickGroupMemberReq, opts ...grpc.CallOption) (*group.KickGroupMemberResp, error) = nil
-// //NewRpc(api, client, rpcFn).Name("group").Call()
-// NewRpc(api, client, rpcFn).Name("group").Call()
-//
-// // 可以自定义编辑请求和响应
-// //a := NewRpc(NewGin[apistruct.KickGroupMemberReq, apistruct.KickGroupMemberResp](c), "", group.NewGroupClient, group.GroupClient.KickGroupMember)
-// //a.Before(func(apiReq *apistruct.KickGroupMemberReq, rpcReq *group.KickGroupMemberReq, bind func() error) error {
-// // return bind()
-// //}).After(func(rpcResp *group.KickGroupMemberResp, apiResp *apistruct.KickGroupMemberResp, bind func() error) error {
-// // return bind()
-// //}).Execute()
-//}
-//
-
-func NewGin[A, B any](c *gin.Context) ApiBind[A, B] {
- return &ginApiBind[A, B]{
- c: c,
- }
-}
-
-type ginApiBind[A, B any] struct {
- c *gin.Context
-}
-
-func (g *ginApiBind[A, B]) OperationID() string {
- return g.c.GetHeader("operationID")
-}
-
-func (g *ginApiBind[A, B]) OpUserID() (string, error) {
- return "", nil
-}
-
-func (g *ginApiBind[A, B]) Bind(a *A) error {
- return g.c.BindJSON(a)
-}
-
-func (g *ginApiBind[A, B]) Resp(resp *B, err error) {
- if err == nil {
- g.Write(resp)
- } else {
- g.Error(err)
- }
-}
-
-func (g *ginApiBind[A, B]) Error(err error) {
- //TODO implement me
-}
-
-func (g *ginApiBind[A, B]) Write(b *B) {
- //TODO implement me
-}
-
-func (g *ginApiBind[A, B]) Context() context.Context {
- return g.c
-}
-
-func NewGin1(c *gin.Context) Api {
- return &ginApi{
- c: c,
- }
-}
-
-type ginApi struct {
- c *gin.Context
-}
-
-func (g *ginApi) OperationID() string {
- return g.c.GetHeader("operationID")
-}
-
-func (g *ginApi) OpUserID() string {
- return g.c.MustGet("opUserID").(string)
-}
-
-func (g *ginApi) Context() context.Context {
- return g.c
-}
-
-func (g *ginApi) Bind(req any) error {
- return g.c.BindJSON(req)
-}
-
-func (g *ginApi) Resp(resp any, err error) {
- //TODO implement me
- panic("implement me")
-}
diff --git a/internal/api2rpc/new1.go b/internal/api2rpc/new1.go
deleted file mode 100644
index 7f5d1a0b8..000000000
--- a/internal/api2rpc/new1.go
+++ /dev/null
@@ -1,49 +0,0 @@
-package api2rpc
-
-import (
- "context"
- "github.com/gin-gonic/gin"
- "google.golang.org/grpc"
-)
-
-type FUNC[E, C, D any] func(client E, ctx context.Context, req *C, options ...grpc.CallOption) (*D, error)
-
-// Call1 TEST
-func Call1[A, B, C, D, E any](
- apiReq *A,
- apiResp *B,
- rpc FUNC[E, C, D],
- //client func() (E, error),
- c *gin.Context,
- before func(apiReq *A, rpcReq *C, bind func() error) error,
- after func(rpcResp *D, apiResp *B, bind func() error) error,
-) {
-
-}
-
-func Call2[C, D, E any](
- rpc func(client E, ctx context.Context, req *C, options ...grpc.CallOption) (*D, error),
- client func() (E, error),
- c *gin.Context,
-) {
-
-}
-
-func Call3[C, D, E any](
- rpc func(client E, ctx context.Context, req *C, options ...grpc.CallOption) (*D, error),
- //client func() (E, error),
- c *gin.Context,
-) {
-
-}
-
-func Call4[C, D, E any](
- rpc func(client E, ctx context.Context, req *C, options ...grpc.CallOption) (*D, error),
- c *gin.Context,
-) {
-
-}
-
-func Call10[A, B, C, D, E any](apiReq A, apiResp B, client func() (E, error), call func(client E, rpcReq C) (D, error)) {
-
-}
diff --git a/internal/api2rpc/rpc.go b/internal/api2rpc/rpc.go
deleted file mode 100644
index 58a95e3c4..000000000
--- a/internal/api2rpc/rpc.go
+++ /dev/null
@@ -1,114 +0,0 @@
-package api2rpc
-
-import (
- "context"
- "google.golang.org/grpc"
- "reflect"
-)
-
-var nameMap = map[string]string{}
-
-func getName[T any]() string {
- var t T
- return reflect.TypeOf(&t).Elem().Name()
-}
-
-// NewRpc A: apiReq B: apiResp C: rpcReq D: rpcResp Z: rpcClient (group.GroupClient)
-func NewRpc[A, B any, C, D any, Z any](bind ApiBind[A, B], client func(conn *grpc.ClientConn) Z, rpc func(client Z, ctx context.Context, req *C, options ...grpc.CallOption) (*D, error)) *RpcXXXX[A, B, C, D, Z] {
- return &RpcXXXX[A, B, C, D, Z]{
- bind: bind,
- client: client,
- rpc: rpc,
- }
-}
-
-type RpcXXXX[A, B any, C, D any, Z any] struct {
- bind ApiBind[A, B]
- name string
- client func(conn *grpc.ClientConn) Z
- rpc func(client Z, ctx context.Context, req *C, options ...grpc.CallOption) (*D, error)
- before func(apiReq *A, rpcReq *C, bind func() error) error
- after func(rpcResp *D, apiResp *B, bind func() error) error
-}
-
-func (a *RpcXXXX[A, B, C, D, Z]) Name(name string) *RpcXXXX[A, B, C, D, Z] {
- a.name = name
- return a
-}
-
-func (a *RpcXXXX[A, B, C, D, Z]) Before(fn func(apiReq *A, rpcReq *C, bind func() error) error) *RpcXXXX[A, B, C, D, Z] {
- a.before = fn
- return a
-}
-
-func (a *RpcXXXX[A, B, C, D, Z]) After(fn func(rpcResp *D, apiResp *B, bind func() error) error) *RpcXXXX[A, B, C, D, Z] {
- a.after = fn
- return a
-}
-
-func (a *RpcXXXX[A, B, C, D, Z]) defaultCopyReq(apiReq *A, rpcReq *C) error {
- CopyAny(apiReq, rpcReq)
- return nil
-}
-
-func (a *RpcXXXX[A, B, C, D, Z]) defaultCopyResp(rpcResp *D, apiResp *B) error {
- CopyAny(rpcResp, apiResp)
- return nil
-}
-
-func (a *RpcXXXX[A, B, C, D, Z]) getZtype() string {
- return ""
-}
-
-func (a *RpcXXXX[A, B, C, D, Z]) GetGrpcConn() (*grpc.ClientConn, error) {
- if a.name == "" {
- a.name = nameMap[getName[Z]()]
- }
- // todo 获取连接
-
- return nil, nil // todo
-}
-
-func (a *RpcXXXX[A, B, C, D, Z]) execute() (*B, error) {
- var apiReq A
- if err := a.bind.Bind(&apiReq); err != nil {
- return nil, err
- }
- opID := a.bind.OperationID()
- userID, err := a.bind.OpUserID()
- if err != nil {
- return nil, err
- }
- _, _ = opID, userID
- var rpcReq C
- if a.before == nil {
- err = a.defaultCopyReq(&apiReq, &rpcReq)
- } else {
- err = a.before(&apiReq, &rpcReq, func() error { return a.defaultCopyReq(&apiReq, &rpcReq) })
- }
- if err != nil {
- return nil, err
- }
- conn, err := a.GetGrpcConn()
- if err != nil {
- return nil, err
- }
- rpcResp, err := a.rpc(a.client(conn), a.bind.Context(), &rpcReq)
- if err != nil {
- return nil, err
- }
- var apiResp B
- if a.after == nil {
- err = a.defaultCopyResp(rpcResp, &apiResp)
- } else {
- err = a.after(rpcResp, &apiResp, func() error { return a.defaultCopyResp(rpcResp, &apiResp) })
- }
- if err != nil {
- return nil, err
- }
- return &apiResp, nil
-}
-
-func (a *RpcXXXX[A, B, C, D, Z]) Call() {
- a.bind.Resp(a.execute())
-}
diff --git a/internal/api2rpc/rpc1.go b/internal/api2rpc/rpc1.go
deleted file mode 100644
index d1ee6448a..000000000
--- a/internal/api2rpc/rpc1.go
+++ /dev/null
@@ -1,104 +0,0 @@
-package api2rpc
-
-import (
- "OpenIM/pkg/errs"
- "context"
- "github.com/gin-gonic/gin"
- "google.golang.org/grpc"
-)
-
-type rpcFunc[E, C, D any] func(client E, ctx context.Context, req *C, options ...grpc.CallOption) (*D, error)
-
-func New[A, B, C, D, E any](apiReq *A, apiResp *B, rpc func(client E, ctx context.Context, req *C, options ...grpc.CallOption) (*D, error)) RpcCall[A, B, C, D, E] {
- return &rpcCall[A, B, C, D, E]{
- apiReq: apiReq,
- apiResp: apiResp,
- rpcFn: rpc,
- }
-}
-
-type rpcCall[A, B, C, D any, E any] struct {
- apiReq *A
- apiResp *B
- rpcFn func(client E, ctx context.Context, req *C, options ...grpc.CallOption) (*D, error)
- before func(apiReq *A, rpcReq *C, bind func() error) error
- after func(rpcResp *D, apiResp *B, bind func() error) error
-}
-
-func (r *rpcCall[A, B, C, D, E]) Before(fn func(apiReq *A, rpcReq *C, bind func() error) error) RpcCall[A, B, C, D, E] {
- r.before = fn
- return r
-}
-
-func (r *rpcCall[A, B, C, D, E]) After(fn func(rpcResp *D, apiResp *B, bind func() error) error) RpcCall[A, B, C, D, E] {
- r.after = fn
- return r
-}
-
-func (r *rpcCall[A, B, C, D, E]) Call(c *gin.Context, client func() (E, error)) {
- var resp baseResp
- err := r.call(c, client)
- if err == nil {
- resp.Data = r.apiResp
- } else {
- cerr, ok := err.(errs.Coderr)
- if ok {
- resp.ErrCode = int32(cerr.Code())
- resp.ErrMsg = cerr.Msg()
- resp.ErrDtl = cerr.Detail()
- } else {
- resp.ErrCode = 10000
- resp.ErrMsg = err.Error()
- }
- }
-}
-
-func (r *rpcCall[A, B, C, D, E]) defaultCopyReq(rpcReq *C) error {
- if r.apiReq != nil {
- CopyAny(r.apiReq, rpcReq)
- }
- return nil
-}
-
-func (r *rpcCall[A, B, C, D, E]) defaultCopyResp(rpcResp *D) error {
- if r.apiResp != nil {
- CopyAny(rpcResp, r.apiResp)
- }
- return nil
-}
-
-func (r *rpcCall[A, B, C, D, E]) call(c *gin.Context, client func() (E, error)) error {
- if err := c.BindJSON(r.apiReq); err != nil {
- return err
- }
- var err error
- var rpcReq C
- if r.before == nil {
- err = r.defaultCopyReq(&rpcReq)
- } else {
- err = r.before(r.apiReq, &rpcReq, func() error { return r.defaultCopyReq(&rpcReq) })
- }
- if err != nil {
- return err
- }
- cli, err := client()
- if err != nil {
- return err
- }
- rpcResp, err := r.rpcFn(cli, c, &rpcReq)
- if err != nil {
- return err
- }
- var apiResp B
- if r.after == nil {
- return r.defaultCopyResp(rpcResp)
- } else {
- return r.after(rpcResp, &apiResp, func() error { return r.defaultCopyResp(rpcResp) })
- }
-}
-
-type RpcCall[A, B, C, D, E any] interface {
- Before(fn func(apiReq *A, rpcReq *C, bind func() error) error) RpcCall[A, B, C, D, E]
- After(fn func(rpcResp *D, apiResp *B, bind func() error) error) RpcCall[A, B, C, D, E]
- Call(c *gin.Context, client func() (E, error))
-}