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)) -}