From 6a37072b9a4d5abc7e54e570a0e344f16562ff79 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 29 Dec 2021 11:31:51 +0800 Subject: [PATCH 1/2] conversation update --- cmd/open_im_api/main.go | 2 +- internal/api/conversation/conversation.go | 280 ++++++---------- internal/api/manage/management_chat.go | 384 +++++++++++++--------- internal/rpc/user/user.go | 4 +- internal/utils/jwt_token_test.go | 2 +- pkg/base_info/conversation_api_struct.go | 29 ++ pkg/base_info/manage_api_struct.go | 80 ----- pkg/common/token_verify/jwt_token.go | 3 +- pkg/proto/user/user.pb.go | 156 ++++----- pkg/proto/user/user.proto | 2 +- 10 files changed, 447 insertions(+), 495 deletions(-) diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index 773b8be7d..aa49378b1 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -94,7 +94,7 @@ func main() { conversationGroup := r.Group("/conversation") { conversationGroup.POST("/set_receive_message_opt", conversation.SetReceiveMessageOpt) - // conversationGroup.POST("/get_receive_message_opt", conversation.GetReceiveMessageOpt) + conversationGroup.POST("/get_receive_message_opt", conversation.GetReceiveMessageOpt) conversationGroup.POST("/get_all_conversation_message_opt", conversation.GetAllConversationMessageOpt) } diff --git a/internal/api/conversation/conversation.go b/internal/api/conversation/conversation.go index 1d47c2c70..38030279e 100644 --- a/internal/api/conversation/conversation.go +++ b/internal/api/conversation/conversation.go @@ -1,192 +1,106 @@ package conversation -import "github.com/gin-gonic/gin" - -// -//type paramsSetReceiveMessageOpt struct { -// OperationID string `json:"operationID" binding:"required"` -// Option *int32 `json:"option" binding:"required"` -// ConversationIdList []string `json:"conversationIdList" binding:"required"` -//} -// -//type OptResult struct { -// ConversationId string `json:"conversationId" binding:"required"` -// Result int32 `json:"result" binding:"required"` -//} -// -//type SetReceiveMessageOptResp struct { -// ErrCode int32 `json:"errCode"` -// ErrMsg string `json:"errMsg"` -// Data []OptResult `json:"data"` -//} -// -//type paramGetReceiveMessageOpt struct { -// ConversationIdList []string `json:"conversationIdList" binding:"required"` -// OperationID string `json:"operationID" binding:"required"` -//} -// -//type GetReceiveMessageOptResp struct { -// SetReceiveMessageOptResp -//} -// -//type paramGetAllConversationMessageOpt struct { -// OperationID string `json:"operationID" binding:"required"` -//} -// -//type GetAllConversationMessageOptResp struct { -// SetReceiveMessageOptResp -//} -// -////CopyStructFields +import ( + api "Open_IM/pkg/base_info" + "Open_IM/pkg/common/config" + "Open_IM/pkg/common/log" + "Open_IM/pkg/common/token_verify" + "Open_IM/pkg/grpc-etcdv3/getcdv3" + "Open_IM/pkg/proto/user" + rpc "Open_IM/pkg/proto/user" + "Open_IM/pkg/utils" + "context" + "github.com/gin-gonic/gin" + "net/http" + "strings" +) func GetAllConversationMessageOpt(c *gin.Context) { + params := api.GetAllConversationMessageOptReq{} + if err := c.BindJSON(¶ms); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()}) + return + } + req := &rpc.GetAllConversationMsgOptReq{} + utils.CopyStructFields(req, ¶ms) + var ok bool + ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token")) + if !ok { + log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token")) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"}) + return + } + log.NewInfo(params.OperationID, "GetAllConversationMessageOpt args ", req.String()) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + client := user.NewUserClient(etcdConn) + RpcResp, err := client.GetAllConversationMsgOpt(context.Background(), req) + if err != nil { + log.NewError(params.OperationID, "GetAllConversationMsgOpt rpc failed, ", req, err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetAllConversationMsgOpt rpc failed, " + err.Error()}) + return + } + resp := api.GetAllConversationMessageOptResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}} + resp.ConversationOptResultList = RpcResp.ConversationOptResultList + log.NewInfo(req.OperationID, "GetAllConversationMsgOpt api return: ", resp) + c.JSON(http.StatusOK, resp) +} +func GetReceiveMessageOpt(c *gin.Context) { + params := api.GetReceiveMessageOptReq{} + if err := c.BindJSON(¶ms); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()}) + return + } + req := &rpc.GetReceiveMessageOptReq{} + utils.CopyStructFields(req, ¶ms) + var ok bool + ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token")) + if !ok { + log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token")) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"}) + return + } + log.NewInfo(params.OperationID, "GetReceiveMessageOpt args ", req.String()) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + client := user.NewUserClient(etcdConn) + RpcResp, err := client.GetReceiveMessageOpt(context.Background(), req) + if err != nil { + log.NewError(params.OperationID, "GetReceiveMessageOpt rpc failed, ", req, err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetReceiveMessageOpt rpc failed, " + err.Error()}) + return + } + resp := api.GetReceiveMessageOptResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}} + resp.ConversationOptResultList = RpcResp.ConversationOptResultList + log.NewInfo(req.OperationID, "GetReceiveMessageOpt api return: ", resp) + c.JSON(http.StatusOK, resp) } -//func GetAllConversationMessageOpt(c *gin.Context) { -// params := paramGetAllConversationMessageOpt{} -// if err := c.BindJSON(¶ms); err != nil { -// log.NewError(params.OperationID, "bind json failed ", err.Error(), c) -// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()}) -// return -// } -// -// claims, err := token_verify.ParseToken(c.Request.Header.Get("token")) -// if err != nil { -// log.NewError(params.OperationID, "ParseToken failed, ", err.Error(), c.Request.Header.Get("token")) -// c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": "ParseToken failed, " + err.Error()}) -// return -// } -// -// req := &user.GetAllConversationMsgOptReq{ -// UId: claims.UID, -// OperationID: params.OperationID, -// } -// log.NewInfo(req.OperationID, "GetAllConversationMsgOpt req: ", req) -// etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) -// client := user.NewUserClient(etcdConn) -// resp, err := client.GetAllConversationMsgOpt(context.Background(), req) -// if err != nil { -// log.NewError(params.OperationID, "GetAllConversationMsgOpt rpc failed, ", req, err.Error()) -// c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": "GetAllConversationMsgOpt rpc failed, " + err.Error()}) -// return -// } -// var ginResp GetAllConversationMessageOptResp -// ginResp.ErrCode = resp.ErrCode -// ginResp.ErrMsg = resp.ErrMsg -// for _, v := range resp.ConversationOptResult { -// var opt OptResult -// err := utils.CopyStructFields(&opt, *v, "ConversationId", "Result") -// if err != nil { -// log.NewError(req.OperationID, "CopyStructFields failed ", err.Error()) -// continue -// } -// ginResp.Data = append(ginResp.Data, opt) -// } -// log.NewInfo(req.OperationID, "GetAllConversationMsgOpt resp: ", ginResp, req) -// c.JSON(http.StatusOK, ginResp) -//} -// -//func GetReceiveMessageOpt(c *gin.Context) { -// params := paramGetReceiveMessageOpt{} -// if err := c.BindJSON(¶ms); err != nil { -// log.NewError(params.OperationID, "bind json failed ", err.Error(), c) -// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()}) -// return -// } -// -// claims, err := token_verify.ParseToken(c.Request.Header.Get("token")) -// if err != nil { -// log.NewError(params.OperationID, "ParseToken failed, ", err.Error(), c.Request.Header.Get("token")) -// c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": "ParseToken failed, " + err.Error()}) -// return -// } -// -// req := &user.GetReceiveMessageOptReq{ -// UId: claims.UID, -// ConversationId: params.ConversationIdList, -// OperationID: params.OperationID, -// } -// log.NewInfo(req.OperationID, "GetReceiveMessageOptReq req: ", req) -// etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) -// client := user.NewUserClient(etcdConn) -// resp, err := client.GetReceiveMessageOpt(context.Background(), req) -// if err != nil { -// log.NewError(params.OperationID, "GetReceiveMessageOpt rpc failed, ", req, err.Error()) -// c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": "GetReceiveMessageOpt rpc failed, " + err.Error()}) -// return -// } -// log.NewInfo(req.OperationID, "GetReceiveMessageOptReq req: ", req, resp) -// var ginResp GetReceiveMessageOptResp -// ginResp.ErrCode = resp.ErrCode -// ginResp.ErrMsg = resp.ErrMsg -// -// for _, v := range resp.ConversationOptResult { -// var opt OptResult -// log.NewInfo("CopyStructFields begin ", v, req.OperationID) -// err := utils.CopyStructFields(&opt, *v, "ConversationId", "Result") -// log.NewInfo("CopyStructFields end ", v, req.OperationID) -// if err != nil { -// log.NewError(req.OperationID, "CopyStructFields failed ", err.Error()) -// continue -// } -// ginResp.Data = append(ginResp.Data, opt) -// } -// log.NewInfo(req.OperationID, "GetReceiveMessageOpt resp: ", ginResp) -// c.JSON(http.StatusOK, ginResp) -//} -// func SetReceiveMessageOpt(c *gin.Context) { - + params := api.SetReceiveMessageOptReq{} + if err := c.BindJSON(¶ms); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()}) + return + } + req := &rpc.SetReceiveMessageOptReq{} + utils.CopyStructFields(req, ¶ms) + var ok bool + ok, req.OpUserID = token_verify.GetUserIDFromToken(c.Request.Header.Get("token")) + if !ok { + log.NewError(req.OperationID, "GetUserIDFromToken false ", c.Request.Header.Get("token")) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "GetUserIDFromToken failed"}) + return + } + log.NewInfo(params.OperationID, "SetReceiveMessageOpt args ", req.String()) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) + client := user.NewUserClient(etcdConn) + RpcResp, err := client.SetReceiveMessageOpt(context.Background(), req) + if err != nil { + log.NewError(params.OperationID, "SetReceiveMessageOpt rpc failed, ", req, err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "SetReceiveMessageOpt rpc failed, " + err.Error()}) + return + } + resp := api.SetReceiveMessageOptResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}} + resp.OptResultList = RpcResp.OptResultList + log.NewInfo(req.OperationID, "SetReceiveMessageOpt api return: ", resp) + c.JSON(http.StatusOK, resp) } - -//func SetReceiveMessageOpt(c *gin.Context) { -// params := paramsSetReceiveMessageOpt{} -// if err := c.BindJSON(¶ms); err != nil { -// log.NewError(params.OperationID, "bind json failed ", err.Error(), c) -// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()}) -// return -// } -// -// claims, err := token_verify.ParseToken(c.Request.Header.Get("token")) -// if err != nil { -// log.NewError(params.OperationID, "ParseToken failed, ", err.Error(), c.Request.Header.Get("token")) -// c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": "ParseToken failed, " + err.Error()}) -// return -// } -// -// req := &user.SetReceiveMessageOptReq{ -// UId: claims.UID, -// Opt: *params.Option, -// ConversationId: params.ConversationIdList, -// OperationID: params.OperationID, -// } -// log.NewInfo(req.OperationID, "SetReceiveMessageOpt req: ", req) -// etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName) -// client := user.NewUserClient(etcdConn) -// resp, err := client.SetReceiveMessageOpt(context.Background(), req) -// if err != nil { -// log.NewError(params.OperationID, "SetReceiveMessageOpt rpc failed, ", req, err.Error()) -// c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": "SetReceiveMessageOpt rpc failed, " + err.Error()}) -// return -// } -// log.NewInfo(req.OperationID, "SetReceiveMessageOpt req: ", req, resp) -// ginResp := SetReceiveMessageOptResp{ -// ErrCode: resp.ErrCode, -// ErrMsg: resp.ErrMsg, -// } -// -// for _, v := range resp.OptResult { -// var opt OptResult -// log.NewDebug("CopyStructFields begin ", v, req.OperationID) -// err := utils.CopyStructFields(&opt, *v, "ConversationId", "Result") -// log.NewDebug("CopyStructFields end ", v, req.OperationID) -// if err != nil { -// log.NewError(req.OperationID, "CopyStructFields failed ", err.Error()) -// continue -// } -// ginResp.Data = append(ginResp.Data, opt) -// } -// log.NewInfo(req.OperationID, "SetReceiveMessageOpt resp: ", ginResp) -// c.JSON(http.StatusOK, ginResp) -//} diff --git a/internal/api/manage/management_chat.go b/internal/api/manage/management_chat.go index 1bb2a9961..f547b9b92 100644 --- a/internal/api/manage/management_chat.go +++ b/internal/api/manage/management_chat.go @@ -6,166 +6,254 @@ */ package manage -import "github.com/gin-gonic/gin" +import ( + "Open_IM/pkg/common/config" + "Open_IM/pkg/common/constant" + "Open_IM/pkg/common/log" + "Open_IM/pkg/common/token_verify" + "Open_IM/pkg/grpc-etcdv3/getcdv3" + pbChat "Open_IM/pkg/proto/chat" + open_im_sdk "Open_IM/pkg/proto/sdk_ws" + "Open_IM/pkg/utils" + "context" + "github.com/gin-gonic/gin" + "github.com/go-playground/validator/v10" + "github.com/mitchellh/mapstructure" + "net/http" + "strings" +) + +var validate *validator.Validate + +func newUserSendMsgReq(params *ManagementSendMsgReq) *pbChat.SendMsgReq { + var newContent string + switch params.ContentType { + case constant.Text: + newContent = params.Content["text"].(string) + case constant.Picture: + fallthrough + case constant.Custom: + fallthrough + case constant.Voice: + fallthrough + case constant.File: + newContent = utils.StructToJsonString(params.Content) + default: + } + options := make(map[string]bool, 2) + if params.IsOnlineOnly { + utils.SetSwitchFromOptions(options, constant.IsOfflinePush, false) + utils.SetSwitchFromOptions(options, constant.IsHistory, false) + utils.SetSwitchFromOptions(options, constant.IsPersistent, false) + } + pbData := pbChat.SendMsgReq{ + OperationID: params.OperationID, + MsgData: &open_im_sdk.MsgData{ + SendID: params.SendID, + RecvID: params.RecvID, + GroupID: params.GroupID, + ClientMsgID: utils.GetMsgID(params.SendID), + SenderPlatformID: params.SenderPlatformID, + SenderNickname: params.SenderNickname, + SenderFaceURL: params.SenderFaceURL, + SessionType: params.SessionType, + MsgFrom: constant.SysMsgType, + ContentType: params.ContentType, + Content: []byte(newContent), + ForceList: params.ForceList, + CreateTime: utils.GetCurrentTimestampByNano(), + Options: options, + OfflinePushInfo: params.OfflinePushInfo, + }, + } + return &pbData +} +func init() { + validate = validator.New() +} -// -//var validate *validator.Validate -// -// -//func newUserSendMsgReq(params *paramsManagementSendMsg) *pbChat.SendMsgReq { -// var newContent string -// switch params.ContentType { -// case constant.Text: -// newContent = params.Content["text"].(string) -// case constant.Picture: -// fallthrough -// case constant.Custom: -// fallthrough -// case constant.Voice: -// fallthrough -// case constant.File: -// newContent = utils.StructToJsonString(params.Content) -// default: -// } -// options := make(map[string]bool, 2) -// if params.IsOnlineOnly { -// utils.SetSwitchFromOptions(options, constant.IsOfflinePush, false) -// utils.SetSwitchFromOptions(options, constant.IsHistory, false) -// utils.SetSwitchFromOptions(options, constant.IsPersistent, false) -// } -// pbData := pbChat.SendMsgReq{ -// OperationID: params.OperationID, -// MsgData: &open_im_sdk.MsgData{ -// SendID: params.SendID, -// RecvID: params.RecvID, -// GroupID: params.GroupID, -// ClientMsgID: utils.GetMsgID(params.SendID), -// SenderPlatformID: params.SenderPlatformID, -// SenderNickName: params.SenderNickName, -// SenderFaceURL: params.SenderFaceURL, -// SessionType: params.SessionType, -// MsgFrom: constant.SysMsgType, -// ContentType: params.ContentType, -// Content: []byte(newContent), -// ForceList: params.ForceList, -// CreateTime: utils.GetCurrentTimestampByNano(), -// Options: options, -// OfflinePushInfo: params.OfflinePushInfo, -// }, -// } -// return &pbData -//} -//func init() { -// validate = validator.New() -//} func ManagementSendMsg(c *gin.Context) { + var data interface{} + params := ManagementSendMsgReq{} + if err := c.BindJSON(¶ms); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) + log.ErrorByKv("json unmarshal err", c.PostForm("operationID"), "err", err.Error(), "content", c.PostForm("content")) + return + } + switch params.ContentType { + case constant.Text: + data = TextElem{} + case constant.Picture: + data = PictureElem{} + case constant.Voice: + data = SoundElem{} + case constant.Video: + data = VideoElem{} + case constant.File: + data = FileElem{} + //case constant.AtText: + // data = AtElem{} + //case constant.Merger: + // data = + //case constant.Card: + //case constant.Location: + case constant.Custom: + data = CustomElem{} + //case constant.Revoke: + //case constant.HasReadReceipt: + //case constant.Typing: + //case constant.Quote: + default: + c.JSON(http.StatusBadRequest, gin.H{"errCode": 404, "errMsg": "contentType err"}) + log.ErrorByKv("contentType err", c.PostForm("operationID"), "content", c.PostForm("content")) + return + } + if err := mapstructure.WeakDecode(params.Content, &data); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": err.Error()}) + log.ErrorByKv("content to Data struct err", "", "err", err.Error()) + return + } else if err := validate.Struct(data); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"errCode": 403, "errMsg": err.Error()}) + log.ErrorByKv("data args validate err", "", "err", err.Error()) + return + } + + token := c.Request.Header.Get("token") + claims, err := token_verify.ParseToken(token) + if err != nil { + log.NewError(params.OperationID, "parse token failed", err.Error()) + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "parse token failed", "sendTime": 0, "MsgID": ""}) + } + if !utils.IsContain(claims.UID, config.Config.Manager.AppManagerUid) { + c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "not authorized", "sendTime": 0, "MsgID": ""}) + return + + } + switch params.SessionType { + case constant.SingleChatType: + if len(params.RecvID) == 0 { + log.NewError(params.OperationID, "recvID is a null string") + c.JSON(http.StatusBadRequest, gin.H{"errCode": 405, "errMsg": "recvID is a null string", "sendTime": 0, "MsgID": ""}) + } + case constant.GroupChatType: + if len(params.GroupID) == 0 { + log.NewError(params.OperationID, "groupID is a null string") + c.JSON(http.StatusBadRequest, gin.H{"errCode": 405, "errMsg": "groupID is a null string", "sendTime": 0, "MsgID": ""}) + } + + } + log.InfoByKv("Ws call success to ManagementSendMsgReq", params.OperationID, "Parameters", params) + + pbData := newUserSendMsgReq(¶ms) + log.Info("", "", "api ManagementSendMsg call start..., [data: %s]", pbData.String()) + + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + client := pbChat.NewChatClient(etcdConn) + + log.Info("", "", "api ManagementSendMsg call, api call rpc...") + + reply, err := client.SendMsg(context.Background(), pbData) + if err != nil { + log.NewError(params.OperationID, "call delete UserSendMsg rpc server failed", err.Error()) + c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call UserSendMsg rpc server failed"}) + return + } + log.Info("", "", "api ManagementSendMsg call end..., [data: %s] [reply: %s]", pbData.String(), reply.String()) + + c.JSON(http.StatusOK, gin.H{ + "errCode": reply.ErrCode, + "errMsg": reply.ErrMsg, + "sendTime": reply.SendTime, + "msgID": reply.ClientMsgID, + }) } -//func ManagementSendMsg(c *gin.Context) { -// var data interface{} -// params := paramsManagementSendMsg{} -// if err := c.BindJSON(¶ms); err != nil { -// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) -// log.ErrorByKv("json unmarshal err", c.PostForm("operationID"), "err", err.Error(), "content", c.PostForm("content")) -// return -// } -// switch params.ContentType { -// case constant.Text: -// data = TextElem{} -// case constant.Picture: -// data = PictureElem{} -// case constant.Voice: -// data = SoundElem{} -// case constant.Video: -// data = VideoElem{} -// case constant.File: -// data = FileElem{} -// //case constant.AtText: -// // data = AtElem{} -// //case constant.Merger: -// // data = -// //case constant.Card: -// //case constant.Location: -// case constant.Custom: -// data = CustomElem{} -// //case constant.Revoke: -// //case constant.HasReadReceipt: -// //case constant.Typing: -// //case constant.Quote: -// default: -// c.JSON(http.StatusBadRequest, gin.H{"errCode": 404, "errMsg": "contentType err"}) -// log.ErrorByKv("contentType err", c.PostForm("operationID"), "content", c.PostForm("content")) -// return -// } -// if err := mapstructure.WeakDecode(params.Content, &data); err != nil { -// c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": err.Error()}) -// log.ErrorByKv("content to Data struct err", "", "err", err.Error()) -// return -// } else if err := validate.Struct(data); err != nil { -// c.JSON(http.StatusBadRequest, gin.H{"errCode": 403, "errMsg": err.Error()}) -// log.ErrorByKv("data args validate err", "", "err", err.Error()) -// return -// } -// -// token := c.Request.Header.Get("token") -// claims, err := token_verify.ParseToken(token) -// if err != nil { -// log.NewError(params.OperationID, "parse token failed", err.Error()) -// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "parse token failed", "sendTime": 0, "MsgID": ""}) -// } -// if !utils.IsContain(claims.UID, config.Config.Manager.AppManagerUid) { -// c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "not authorized", "sendTime": 0, "MsgID": ""}) -// return -// -// } -// switch params.SessionType { -// case constant.SingleChatType: -// if len(params.RecvID) == 0 { -// log.NewError(params.OperationID, "recvID is a null string") -// c.JSON(http.StatusBadRequest, gin.H{"errCode": 405, "errMsg": "recvID is a null string", "sendTime": 0, "MsgID": ""}) -// } -// case constant.GroupChatType: -// if len(params.GroupID) == 0 { -// log.NewError(params.OperationID, "groupID is a null string") -// c.JSON(http.StatusBadRequest, gin.H{"errCode": 405, "errMsg": "groupID is a null string", "sendTime": 0, "MsgID": ""}) -// } -// -// } -// log.InfoByKv("Ws call success to ManagementSendMsgReq", params.OperationID, "Parameters", params) -// -// pbData := newUserSendMsgReq(¶ms) -// log.Info("", "", "api ManagementSendMsg call start..., [data: %s]", pbData.String()) // -// etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) -// client := pbChat.NewChatClient(etcdConn) -// -// log.Info("", "", "api ManagementSendMsg call, api call rpc...") -// -// reply, err := client.SendMsg(context.Background(), pbData) -// if err != nil { -// log.NewError(params.OperationID, "call delete UserSendMsg rpc server failed", err.Error()) -// c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call UserSendMsg rpc server failed"}) -// return -// } -// log.Info("", "", "api ManagementSendMsg call end..., [data: %s] [reply: %s]", pbData.String(), reply.String()) -// -// c.JSON(http.StatusOK, gin.H{ -// "errCode": reply.ErrCode, -// "errMsg": reply.ErrMsg, -// "sendTime": reply.SendTime, -// "msgID": reply.ClientMsgID, -// }) -// -//} - //type MergeElem struct { // Title string `json:"title"` // AbstractList []string `json:"abstractList"` // MultiMessage []*MsgStruct `json:"multiMessage"` //} - +// //type QuoteElem struct { // Text string `json:"text"` // QuoteMessage *MsgStruct `json:"quoteMessage"` //} +type ManagementSendMsgReq struct { + OperationID string `json:"operationID" binding:"required"` + SendID string `json:"sendID" binding:"required"` + RecvID string `json:"recvID" ` + GroupID string `json:"groupID" ` + SenderNickname string `json:"senderNickname" ` + SenderFaceURL string `json:"senderFaceURL" ` + SenderPlatformID int32 `json:"senderPlatformID"` + ForceList []string `json:"forceList" ` + Content map[string]interface{} `json:"content" binding:"required"` + ContentType int32 `json:"contentType" binding:"required"` + SessionType int32 `json:"sessionType" binding:"required"` + IsOnlineOnly bool `json:"isOnlineOnly"` + OfflinePushInfo *open_im_sdk.OfflinePushInfo `json:"offlinePushInfo"` +} + +type PictureBaseInfo struct { + UUID string `mapstructure:"uuid"` + Type string `mapstructure:"type" validate:"required"` + Size int64 `mapstructure:"size" validate:"required"` + Width int32 `mapstructure:"width" validate:"required"` + Height int32 `mapstructure:"height" validate:"required"` + Url string `mapstructure:"url" validate:"required"` +} + +type PictureElem struct { + SourcePath string `mapstructure:"sourcePath"` + SourcePicture PictureBaseInfo `mapstructure:"sourcePicture" validate:"required"` + BigPicture PictureBaseInfo `mapstructure:"bigPicture" ` + SnapshotPicture PictureBaseInfo `mapstructure:"snapshotPicture"` +} +type SoundElem struct { + UUID string `mapstructure:"uuid"` + SoundPath string `mapstructure:"soundPath"` + SourceURL string `mapstructure:"sourceUrl"` + DataSize int64 `mapstructure:"dataSize"` + Duration int64 `mapstructure:"duration"` +} +type VideoElem struct { + VideoPath string `mapstructure:"videoPath"` + VideoUUID string `mapstructure:"videoUUID"` + VideoURL string `mapstructure:"videoUrl"` + VideoType string `mapstructure:"videoType"` + VideoSize int64 `mapstructure:"videoSize"` + Duration int64 `mapstructure:"duration"` + SnapshotPath string `mapstructure:"snapshotPath"` + SnapshotUUID string `mapstructure:"snapshotUUID"` + SnapshotSize int64 `mapstructure:"snapshotSize"` + SnapshotURL string `mapstructure:"snapshotUrl"` + SnapshotWidth int32 `mapstructure:"snapshotWidth"` + SnapshotHeight int32 `mapstructure:"snapshotHeight"` +} +type FileElem struct { + FilePath string `mapstructure:"filePath"` + UUID string `mapstructure:"uuid"` + SourceURL string `mapstructure:"sourceUrl"` + FileName string `mapstructure:"fileName"` + FileSize int64 `mapstructure:"fileSize"` +} +type AtElem struct { + Text string `mapstructure:"text"` + AtUserList []string `mapstructure:"atUserList"` + IsAtSelf bool `mapstructure:"isAtSelf"` +} +type LocationElem struct { + Description string `mapstructure:"description"` + Longitude float64 `mapstructure:"longitude"` + Latitude float64 `mapstructure:"latitude"` +} +type CustomElem struct { + Data string `mapstructure:"data" validate:"required"` + Description string `mapstructure:"description"` + Extension string `mapstructure:"extension"` +} +type TextElem struct { + Text string `mapstructure:"text" validate:"required"` +} diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index ad480d6db..783f6b1f3 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -112,9 +112,9 @@ func (s *userServer) SetReceiveMessageOpt(ctx context.Context, req *pbUser.SetRe func (s *userServer) GetReceiveMessageOpt(ctx context.Context, req *pbUser.GetReceiveMessageOptReq) (*pbUser.GetReceiveMessageOptResp, error) { log.NewInfo(req.OperationID, "GetReceiveMessageOpt args ", req.String()) - m, err := db.DB.GetMultiConversationMsgOpt(req.FromUserID, req.ConversationId) + m, err := db.DB.GetMultiConversationMsgOpt(req.FromUserID, req.ConversationIdList) if err != nil { - log.NewError(req.OperationID, "GetMultiConversationMsgOpt failed ", err.Error(), req.FromUserID, req.ConversationId) + log.NewError(req.OperationID, "GetMultiConversationMsgOpt failed ", err.Error(), req.FromUserID, req.ConversationIdList) return &pbUser.GetReceiveMessageOptResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil } resp := pbUser.GetReceiveMessageOptResp{CommonResp: &pbUser.CommonResp{}} diff --git a/internal/utils/jwt_token_test.go b/internal/utils/jwt_token_test.go index 2c6550d87..571836d39 100644 --- a/internal/utils/jwt_token_test.go +++ b/internal/utils/jwt_token_test.go @@ -68,7 +68,7 @@ func Test_ParseRedisInterfaceToken(t *testing.T) { config.Config.TokenPolicy.AccessExpire = -80 tokenString, _, _ = token_verify.CreateToken(uid, platform) claims, err = token_verify.ParseRedisInterfaceToken([]uint8(tokenString)) - assert.Equal(t, err, constant.TokenExpired) + assert.Equal(t, err, constant.ExpiredToken) assert.Nil(t, claims) } diff --git a/pkg/base_info/conversation_api_struct.go b/pkg/base_info/conversation_api_struct.go index 7775a2f42..0bbb52a49 100644 --- a/pkg/base_info/conversation_api_struct.go +++ b/pkg/base_info/conversation_api_struct.go @@ -1 +1,30 @@ package base_info + +import "Open_IM/pkg/proto/user" + +type GetAllConversationMessageOptReq struct { + OperationID string `json:"operationID" binding:"required"` + FromUserID string `json:"fromUserID" binding:"required"` +} +type GetAllConversationMessageOptResp struct { + CommResp + ConversationOptResultList []*user.OptResult `json:"data"` +} +type GetReceiveMessageOptReq struct { + ConversationIdList []string `json:"conversationIdList" binding:"required"` + OperationID string `json:"operationID" binding:"required"` + FromUserID string `json:"fromUserID" binding:"required"` +} +type GetReceiveMessageOptResp struct { + CommResp + ConversationOptResultList []*user.OptResult `json:"data"` +} +type SetReceiveMessageOptReq struct { + OperationID string `json:"operationID" binding:"required"` + Opt *int32 `json:"opt" binding:"required"` + ConversationIdList []string `json:"conversationIdList" binding:"required"` +} +type SetReceiveMessageOptResp struct { + CommResp + OptResultList []*user.OptResult `json:"data"` +} diff --git a/pkg/base_info/manage_api_struct.go b/pkg/base_info/manage_api_struct.go index 862706187..070e2c72b 100644 --- a/pkg/base_info/manage_api_struct.go +++ b/pkg/base_info/manage_api_struct.go @@ -2,70 +2,9 @@ package base_info import ( pbRelay "Open_IM/pkg/proto/relay" - open_im_sdk "Open_IM/pkg/proto/sdk_ws" pbUser "Open_IM/pkg/proto/user" ) -type paramsManagementSendMsg struct { - OperationID string `json:"operationID" binding:"required"` - SendID string `json:"sendID" binding:"required"` - RecvID string `json:"recvID" ` - GroupID string `json:"groupID" ` - SenderNickName string `json:"senderNickName" ` - SenderFaceURL string `json:"senderFaceURL" ` - SenderPlatformID int32 `json:"senderPlatformID"` - ForceList []string `json:"forceList" ` - Content map[string]interface{} `json:"content" binding:"required"` - ContentType int32 `json:"contentType" binding:"required"` - SessionType int32 `json:"sessionType" binding:"required"` - IsOnlineOnly bool `json:"isOnlineOnly"` - OfflinePushInfo *open_im_sdk.OfflinePushInfo `json:"offlinePushInfo"` -} - -type PictureBaseInfo struct { - UUID string `mapstructure:"uuid"` - Type string `mapstructure:"type" validate:"required"` - Size int64 `mapstructure:"size" validate:"required"` - Width int32 `mapstructure:"width" validate:"required"` - Height int32 `mapstructure:"height" validate:"required"` - Url string `mapstructure:"url" validate:"required"` -} - -type PictureElem struct { - SourcePath string `mapstructure:"sourcePath"` - SourcePicture PictureBaseInfo `mapstructure:"sourcePicture" validate:"required"` - BigPicture PictureBaseInfo `mapstructure:"bigPicture" ` - SnapshotPicture PictureBaseInfo `mapstructure:"snapshotPicture"` -} -type SoundElem struct { - UUID string `mapstructure:"uuid"` - SoundPath string `mapstructure:"soundPath"` - SourceURL string `mapstructure:"sourceUrl"` - DataSize int64 `mapstructure:"dataSize"` - Duration int64 `mapstructure:"duration"` -} -type VideoElem struct { - VideoPath string `mapstructure:"videoPath"` - VideoUUID string `mapstructure:"videoUUID"` - VideoURL string `mapstructure:"videoUrl"` - VideoType string `mapstructure:"videoType"` - VideoSize int64 `mapstructure:"videoSize"` - Duration int64 `mapstructure:"duration"` - SnapshotPath string `mapstructure:"snapshotPath"` - SnapshotUUID string `mapstructure:"snapshotUUID"` - SnapshotSize int64 `mapstructure:"snapshotSize"` - SnapshotURL string `mapstructure:"snapshotUrl"` - SnapshotWidth int32 `mapstructure:"snapshotWidth"` - SnapshotHeight int32 `mapstructure:"snapshotHeight"` -} -type FileElem struct { - FilePath string `mapstructure:"filePath"` - UUID string `mapstructure:"uuid"` - SourceURL string `mapstructure:"sourceUrl"` - FileName string `mapstructure:"fileName"` - FileSize int64 `mapstructure:"fileSize"` -} - type DeleteUsersReq struct { OperationID string `json:"operationID" binding:"required"` DeleteUidList []string `json:"deleteUidList" binding:"required"` @@ -97,22 +36,3 @@ type AccountCheckResp struct { CommResp ResultList []*pbUser.AccountCheckResp_SingleUserStatus `json:"data"` } - -type AtElem struct { - Text string `mapstructure:"text"` - AtUserList []string `mapstructure:"atUserList"` - IsAtSelf bool `mapstructure:"isAtSelf"` -} -type LocationElem struct { - Description string `mapstructure:"description"` - Longitude float64 `mapstructure:"longitude"` - Latitude float64 `mapstructure:"latitude"` -} -type CustomElem struct { - Data string `mapstructure:"data" validate:"required"` - Description string `mapstructure:"description"` - Extension string `mapstructure:"extension"` -} -type TextElem struct { - Text string `mapstructure:"text" validate:"required"` -} diff --git a/pkg/common/token_verify/jwt_token.go b/pkg/common/token_verify/jwt_token.go index 519ecad63..50aecc8ae 100644 --- a/pkg/common/token_verify/jwt_token.go +++ b/pkg/common/token_verify/jwt_token.go @@ -51,7 +51,8 @@ func CreateToken(userID string, platformID int32) (string, int64, error) { } var deleteTokenKey []string for k, v := range m { - if v != constant.NormalToken { + _, err = GetClaimFromToken(k) + if err != nil || v != constant.NormalToken { deleteTokenKey = append(deleteTokenKey, k) } } diff --git a/pkg/proto/user/user.pb.go b/pkg/proto/user/user.pb.go index e81e474a9..892c0c982 100644 --- a/pkg/proto/user/user.pb.go +++ b/pkg/proto/user/user.pb.go @@ -36,7 +36,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} } func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (*CommonResp) ProtoMessage() {} func (*CommonResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_119cb27841530cfa, []int{0} + return fileDescriptor_user_0a10ad809f213986, []int{0} } func (m *CommonResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommonResp.Unmarshal(m, b) @@ -83,7 +83,7 @@ func (m *DeleteUsersReq) Reset() { *m = DeleteUsersReq{} } func (m *DeleteUsersReq) String() string { return proto.CompactTextString(m) } func (*DeleteUsersReq) ProtoMessage() {} func (*DeleteUsersReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_119cb27841530cfa, []int{1} + return fileDescriptor_user_0a10ad809f213986, []int{1} } func (m *DeleteUsersReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUsersReq.Unmarshal(m, b) @@ -136,7 +136,7 @@ func (m *DeleteUsersResp) Reset() { *m = DeleteUsersResp{} } func (m *DeleteUsersResp) String() string { return proto.CompactTextString(m) } func (*DeleteUsersResp) ProtoMessage() {} func (*DeleteUsersResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_119cb27841530cfa, []int{2} + return fileDescriptor_user_0a10ad809f213986, []int{2} } func (m *DeleteUsersResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteUsersResp.Unmarshal(m, b) @@ -182,7 +182,7 @@ func (m *GetAllUserIDReq) Reset() { *m = GetAllUserIDReq{} } func (m *GetAllUserIDReq) String() string { return proto.CompactTextString(m) } func (*GetAllUserIDReq) ProtoMessage() {} func (*GetAllUserIDReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_119cb27841530cfa, []int{3} + return fileDescriptor_user_0a10ad809f213986, []int{3} } func (m *GetAllUserIDReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllUserIDReq.Unmarshal(m, b) @@ -228,7 +228,7 @@ func (m *GetAllUserIDResp) Reset() { *m = GetAllUserIDResp{} } func (m *GetAllUserIDResp) String() string { return proto.CompactTextString(m) } func (*GetAllUserIDResp) ProtoMessage() {} func (*GetAllUserIDResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_119cb27841530cfa, []int{4} + return fileDescriptor_user_0a10ad809f213986, []int{4} } func (m *GetAllUserIDResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllUserIDResp.Unmarshal(m, b) @@ -275,7 +275,7 @@ func (m *AccountCheckReq) Reset() { *m = AccountCheckReq{} } func (m *AccountCheckReq) String() string { return proto.CompactTextString(m) } func (*AccountCheckReq) ProtoMessage() {} func (*AccountCheckReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_119cb27841530cfa, []int{5} + return fileDescriptor_user_0a10ad809f213986, []int{5} } func (m *AccountCheckReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckReq.Unmarshal(m, b) @@ -328,7 +328,7 @@ func (m *AccountCheckResp) Reset() { *m = AccountCheckResp{} } func (m *AccountCheckResp) String() string { return proto.CompactTextString(m) } func (*AccountCheckResp) ProtoMessage() {} func (*AccountCheckResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_119cb27841530cfa, []int{6} + return fileDescriptor_user_0a10ad809f213986, []int{6} } func (m *AccountCheckResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckResp.Unmarshal(m, b) @@ -374,7 +374,7 @@ func (m *AccountCheckResp_SingleUserStatus) Reset() { *m = AccountCheckR func (m *AccountCheckResp_SingleUserStatus) String() string { return proto.CompactTextString(m) } func (*AccountCheckResp_SingleUserStatus) ProtoMessage() {} func (*AccountCheckResp_SingleUserStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_user_119cb27841530cfa, []int{6, 0} + return fileDescriptor_user_0a10ad809f213986, []int{6, 0} } func (m *AccountCheckResp_SingleUserStatus) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AccountCheckResp_SingleUserStatus.Unmarshal(m, b) @@ -421,7 +421,7 @@ func (m *GetUserInfoReq) Reset() { *m = GetUserInfoReq{} } func (m *GetUserInfoReq) String() string { return proto.CompactTextString(m) } func (*GetUserInfoReq) ProtoMessage() {} func (*GetUserInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_119cb27841530cfa, []int{7} + return fileDescriptor_user_0a10ad809f213986, []int{7} } func (m *GetUserInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInfoReq.Unmarshal(m, b) @@ -474,7 +474,7 @@ func (m *GetUserInfoResp) Reset() { *m = GetUserInfoResp{} } func (m *GetUserInfoResp) String() string { return proto.CompactTextString(m) } func (*GetUserInfoResp) ProtoMessage() {} func (*GetUserInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_119cb27841530cfa, []int{8} + return fileDescriptor_user_0a10ad809f213986, []int{8} } func (m *GetUserInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetUserInfoResp.Unmarshal(m, b) @@ -521,7 +521,7 @@ func (m *UpdateUserInfoReq) Reset() { *m = UpdateUserInfoReq{} } func (m *UpdateUserInfoReq) String() string { return proto.CompactTextString(m) } func (*UpdateUserInfoReq) ProtoMessage() {} func (*UpdateUserInfoReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_119cb27841530cfa, []int{9} + return fileDescriptor_user_0a10ad809f213986, []int{9} } func (m *UpdateUserInfoReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInfoReq.Unmarshal(m, b) @@ -573,7 +573,7 @@ func (m *UpdateUserInfoResp) Reset() { *m = UpdateUserInfoResp{} } func (m *UpdateUserInfoResp) String() string { return proto.CompactTextString(m) } func (*UpdateUserInfoResp) ProtoMessage() {} func (*UpdateUserInfoResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_119cb27841530cfa, []int{10} + return fileDescriptor_user_0a10ad809f213986, []int{10} } func (m *UpdateUserInfoResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateUserInfoResp.Unmarshal(m, b) @@ -615,7 +615,7 @@ func (m *SetReceiveMessageOptReq) Reset() { *m = SetReceiveMessageOptReq func (m *SetReceiveMessageOptReq) String() string { return proto.CompactTextString(m) } func (*SetReceiveMessageOptReq) ProtoMessage() {} func (*SetReceiveMessageOptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_119cb27841530cfa, []int{11} + return fileDescriptor_user_0a10ad809f213986, []int{11} } func (m *SetReceiveMessageOptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetReceiveMessageOptReq.Unmarshal(m, b) @@ -682,7 +682,7 @@ func (m *OptResult) Reset() { *m = OptResult{} } func (m *OptResult) String() string { return proto.CompactTextString(m) } func (*OptResult) ProtoMessage() {} func (*OptResult) Descriptor() ([]byte, []int) { - return fileDescriptor_user_119cb27841530cfa, []int{12} + return fileDescriptor_user_0a10ad809f213986, []int{12} } func (m *OptResult) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OptResult.Unmarshal(m, b) @@ -728,7 +728,7 @@ func (m *SetReceiveMessageOptResp) Reset() { *m = SetReceiveMessageOptRe func (m *SetReceiveMessageOptResp) String() string { return proto.CompactTextString(m) } func (*SetReceiveMessageOptResp) ProtoMessage() {} func (*SetReceiveMessageOptResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_119cb27841530cfa, []int{13} + return fileDescriptor_user_0a10ad809f213986, []int{13} } func (m *SetReceiveMessageOptResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetReceiveMessageOptResp.Unmarshal(m, b) @@ -764,7 +764,7 @@ func (m *SetReceiveMessageOptResp) GetOptResultList() []*OptResult { type GetReceiveMessageOptReq struct { FromUserID string `protobuf:"bytes,1,opt,name=FromUserID" json:"FromUserID,omitempty"` - ConversationId []string `protobuf:"bytes,2,rep,name=conversationId" json:"conversationId,omitempty"` + ConversationIdList []string `protobuf:"bytes,2,rep,name=conversationIdList" json:"conversationIdList,omitempty"` OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"` OpUserID string `protobuf:"bytes,4,opt,name=OpUserID" json:"OpUserID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -776,7 +776,7 @@ func (m *GetReceiveMessageOptReq) Reset() { *m = GetReceiveMessageOptReq func (m *GetReceiveMessageOptReq) String() string { return proto.CompactTextString(m) } func (*GetReceiveMessageOptReq) ProtoMessage() {} func (*GetReceiveMessageOptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_119cb27841530cfa, []int{14} + return fileDescriptor_user_0a10ad809f213986, []int{14} } func (m *GetReceiveMessageOptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetReceiveMessageOptReq.Unmarshal(m, b) @@ -803,9 +803,9 @@ func (m *GetReceiveMessageOptReq) GetFromUserID() string { return "" } -func (m *GetReceiveMessageOptReq) GetConversationId() []string { +func (m *GetReceiveMessageOptReq) GetConversationIdList() []string { if m != nil { - return m.ConversationId + return m.ConversationIdList } return nil } @@ -836,7 +836,7 @@ func (m *GetReceiveMessageOptResp) Reset() { *m = GetReceiveMessageOptRe func (m *GetReceiveMessageOptResp) String() string { return proto.CompactTextString(m) } func (*GetReceiveMessageOptResp) ProtoMessage() {} func (*GetReceiveMessageOptResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_119cb27841530cfa, []int{15} + return fileDescriptor_user_0a10ad809f213986, []int{15} } func (m *GetReceiveMessageOptResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetReceiveMessageOptResp.Unmarshal(m, b) @@ -883,7 +883,7 @@ func (m *GetAllConversationMsgOptReq) Reset() { *m = GetAllConversationM func (m *GetAllConversationMsgOptReq) String() string { return proto.CompactTextString(m) } func (*GetAllConversationMsgOptReq) ProtoMessage() {} func (*GetAllConversationMsgOptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_user_119cb27841530cfa, []int{16} + return fileDescriptor_user_0a10ad809f213986, []int{16} } func (m *GetAllConversationMsgOptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllConversationMsgOptReq.Unmarshal(m, b) @@ -936,7 +936,7 @@ func (m *GetAllConversationMsgOptResp) Reset() { *m = GetAllConversation func (m *GetAllConversationMsgOptResp) String() string { return proto.CompactTextString(m) } func (*GetAllConversationMsgOptResp) ProtoMessage() {} func (*GetAllConversationMsgOptResp) Descriptor() ([]byte, []int) { - return fileDescriptor_user_119cb27841530cfa, []int{17} + return fileDescriptor_user_0a10ad809f213986, []int{17} } func (m *GetAllConversationMsgOptResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetAllConversationMsgOptResp.Unmarshal(m, b) @@ -1295,60 +1295,60 @@ var _User_serviceDesc = grpc.ServiceDesc{ Metadata: "user/user.proto", } -func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_119cb27841530cfa) } - -var fileDescriptor_user_119cb27841530cfa = []byte{ - // 825 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0xdf, 0x6e, 0xd3, 0x3e, - 0x14, 0x56, 0xd6, 0x6e, 0xbf, 0xf5, 0x74, 0x6b, 0xfb, 0xb3, 0xf6, 0x27, 0x04, 0x98, 0x3a, 0x0b, - 0x41, 0xb5, 0x8b, 0x14, 0x86, 0xb8, 0x00, 0x04, 0xd2, 0xe8, 0xb4, 0x68, 0x82, 0xaa, 0x28, 0xd3, - 0x6e, 0xb8, 0x99, 0x42, 0x63, 0x4a, 0xd5, 0x36, 0x0e, 0x71, 0xba, 0x09, 0x90, 0xb8, 0x81, 0xb7, - 0xe0, 0x82, 0xe7, 0xe0, 0x35, 0x78, 0x01, 0x5e, 0x05, 0xc5, 0x4e, 0x5a, 0x3b, 0x49, 0x5b, 0x54, - 0xb8, 0xe0, 0xa6, 0xaa, 0x3f, 0x1f, 0x1f, 0x7f, 0xdf, 0xe7, 0x63, 0xe7, 0x40, 0x75, 0xcc, 0x48, - 0xd0, 0x8c, 0x7e, 0x4c, 0x3f, 0xa0, 0x21, 0x45, 0xc5, 0xe8, 0xbf, 0xb1, 0xdf, 0xf1, 0x89, 0x77, - 0x71, 0xda, 0x6e, 0xfa, 0x83, 0x5e, 0x93, 0x4f, 0x34, 0x99, 0x3b, 0xb8, 0xb8, 0x62, 0xcd, 0x2b, - 0x26, 0x02, 0xf1, 0x53, 0x80, 0x16, 0x1d, 0x8d, 0xa8, 0x67, 0x13, 0xe6, 0x23, 0x1d, 0xfe, 0x23, - 0x41, 0xd0, 0xa2, 0x2e, 0xd1, 0xb5, 0xba, 0xd6, 0x58, 0xb5, 0x93, 0x21, 0xda, 0x81, 0x35, 0x12, - 0x04, 0x6d, 0xd6, 0xd3, 0x57, 0xea, 0x5a, 0xa3, 0x64, 0xc7, 0x23, 0xfc, 0x01, 0x2a, 0xc7, 0x64, - 0x48, 0x42, 0x72, 0xce, 0x48, 0xc0, 0x6c, 0xf2, 0x0e, 0x1d, 0x40, 0x6d, 0x8a, 0x9c, 0x1e, 0xbf, - 0xe8, 0xb3, 0x50, 0x5f, 0xa9, 0x17, 0x1a, 0x25, 0x3b, 0x83, 0x23, 0x03, 0xd6, 0x3b, 0xbe, 0x18, - 0xeb, 0x05, 0x9e, 0x77, 0x32, 0x46, 0x75, 0x28, 0x77, 0x7c, 0x12, 0x38, 0x61, 0x9f, 0x7a, 0xa7, - 0xc7, 0x7a, 0x91, 0x4f, 0xcb, 0x10, 0xa6, 0x50, 0x55, 0xf6, 0x66, 0x3e, 0xba, 0x2b, 0xcb, 0xe1, - 0x1a, 0xca, 0x87, 0x35, 0x93, 0x1b, 0x33, 0xc5, 0x6d, 0x59, 0xf2, 0x01, 0xd4, 0x4e, 0x9c, 0xfe, - 0x90, 0xb8, 0x59, 0xba, 0x69, 0x1c, 0x77, 0xa0, 0x6a, 0x91, 0xf0, 0x68, 0x38, 0x14, 0x58, 0xa4, - 0xd6, 0x80, 0x75, 0x9a, 0x28, 0xd0, 0x84, 0x02, 0x2a, 0x29, 0xa0, 0x92, 0x02, 0x61, 0x9c, 0x0c, - 0x61, 0x17, 0x6a, 0x6a, 0xc2, 0xa5, 0x24, 0xec, 0x01, 0x64, 0xc8, 0x4b, 0x08, 0x7e, 0x0f, 0xd5, - 0xa3, 0x6e, 0x97, 0x8e, 0xbd, 0xb0, 0xf5, 0x96, 0x74, 0x07, 0x11, 0xed, 0x06, 0x54, 0xf9, 0x7f, - 0x69, 0x9d, 0xc6, 0xd7, 0xa5, 0x61, 0xe5, 0x88, 0x56, 0xe6, 0x1f, 0x51, 0x21, 0x7b, 0x44, 0x3f, - 0x35, 0xa8, 0xa9, 0x7b, 0x0b, 0x85, 0xdd, 0xdf, 0x50, 0x38, 0x8d, 0x41, 0x16, 0x80, 0x4d, 0xd8, - 0x78, 0x18, 0x4e, 0x14, 0x96, 0x0f, 0xef, 0x88, 0x15, 0xe9, 0xec, 0xe6, 0x59, 0xdf, 0xeb, 0x0d, - 0x79, 0x49, 0x9c, 0x85, 0x4e, 0x38, 0x66, 0xb6, 0xb4, 0xd4, 0x78, 0x09, 0xb5, 0xf4, 0x7c, 0x54, - 0xda, 0x63, 0xf9, 0x00, 0xe3, 0x11, 0xba, 0x05, 0x9b, 0x8e, 0x48, 0x2e, 0x02, 0x63, 0xf9, 0x2a, - 0x88, 0x3d, 0xa8, 0x58, 0x24, 0xe4, 0x86, 0x78, 0x6f, 0x68, 0xe4, 0xed, 0x1e, 0xc0, 0x38, 0x6d, - 0xab, 0x84, 0xfc, 0xa1, 0xa3, 0x9f, 0x78, 0x0d, 0x4e, 0xf7, 0x5b, 0xca, 0xcf, 0x87, 0xb0, 0x91, - 0x64, 0xe0, 0x24, 0x0b, 0xdc, 0xd1, 0x6d, 0x93, 0x46, 0xef, 0x45, 0x7f, 0x74, 0xc1, 0xdc, 0x81, - 0x39, 0xd9, 0x42, 0x09, 0xc5, 0x5f, 0x34, 0xf8, 0xff, 0xdc, 0x77, 0x9d, 0xf8, 0x1e, 0xc7, 0x9a, - 0xef, 0xc1, 0x7a, 0x32, 0x8c, 0x09, 0xcc, 0x48, 0x36, 0x09, 0x5b, 0x64, 0x03, 0xcd, 0xda, 0x20, - 0xdf, 0x9c, 0x13, 0x40, 0x69, 0x16, 0xcb, 0x38, 0x81, 0xbf, 0x6b, 0xb0, 0x7b, 0x46, 0x42, 0x9b, - 0x74, 0x49, 0xff, 0x92, 0xb4, 0x09, 0x63, 0x4e, 0x8f, 0x74, 0xfc, 0x30, 0x3e, 0xc8, 0x93, 0x80, - 0x8e, 0x94, 0xdb, 0x2d, 0x21, 0xa8, 0x06, 0x05, 0xea, 0x87, 0x9c, 0xfc, 0xaa, 0x1d, 0xfd, 0x45, - 0x26, 0xa0, 0x2e, 0xf5, 0x2e, 0x49, 0xc0, 0x62, 0x9e, 0x13, 0x77, 0x4b, 0x76, 0xce, 0x4c, 0x5a, - 0x67, 0x31, 0xa3, 0x53, 0x71, 0x69, 0x55, 0x75, 0x09, 0x3f, 0x87, 0x12, 0x67, 0x1a, 0x55, 0x37, - 0xba, 0x0d, 0x15, 0x65, 0x03, 0x37, 0x26, 0x9c, 0x42, 0xa3, 0x6a, 0x0f, 0xf8, 0x8a, 0x98, 0x77, - 0x3c, 0xc2, 0x9f, 0x35, 0xd0, 0xf3, 0x8d, 0x58, 0xaa, 0xc2, 0x1e, 0xc0, 0x26, 0x4d, 0xb8, 0x49, - 0x97, 0xb6, 0x2a, 0x16, 0x4d, 0x68, 0xdb, 0x6a, 0x14, 0xfe, 0xa6, 0xc1, 0xae, 0xb5, 0xe4, 0x71, - 0x64, 0x1d, 0x10, 0x4f, 0x61, 0xda, 0x81, 0x85, 0xc5, 0xa5, 0x98, 0x5e, 0x4c, 0x99, 0xfe, 0x55, - 0x03, 0xdd, 0xfa, 0x7b, 0x3e, 0xb5, 0xe1, 0x9a, 0x4c, 0xaf, 0xa3, 0x78, 0x56, 0xc8, 0xf7, 0x6c, - 0xf6, 0x0a, 0xfc, 0x11, 0xae, 0x8b, 0x0f, 0x4a, 0x4b, 0x0a, 0x69, 0xb3, 0x5e, 0x8e, 0x85, 0x6e, - 0xc6, 0x42, 0x77, 0xf1, 0x17, 0x6b, 0xde, 0x17, 0x3b, 0x3a, 0xbc, 0x1b, 0xb3, 0x77, 0xff, 0x07, - 0xec, 0x39, 0xfc, 0x51, 0x04, 0xde, 0x19, 0xa1, 0x47, 0x50, 0x96, 0x5e, 0x51, 0xb4, 0x25, 0x72, - 0xa8, 0x0f, 0xb9, 0xb1, 0x9d, 0x83, 0x32, 0x1f, 0xb5, 0xa0, 0xa2, 0x3e, 0x3d, 0x68, 0x57, 0x04, - 0x66, 0x9e, 0x45, 0x43, 0xcf, 0x9f, 0x60, 0x7e, 0x44, 0x40, 0xea, 0x5d, 0x12, 0x02, 0x6a, 0x2b, - 0x95, 0x10, 0x48, 0x37, 0x39, 0x4f, 0x60, 0x43, 0xee, 0x1a, 0xd0, 0x94, 0xa7, 0xdc, 0x9a, 0x18, - 0x3b, 0x79, 0x30, 0xf3, 0xd1, 0x39, 0x6c, 0xe5, 0x5d, 0x74, 0x74, 0x53, 0xc4, 0xcf, 0x78, 0x0d, - 0x8d, 0xbd, 0x79, 0xd3, 0x22, 0xad, 0x35, 0x27, 0xad, 0x35, 0x3f, 0xed, 0xcc, 0x2b, 0xe5, 0xf0, - 0xeb, 0x96, 0x5b, 0x53, 0x68, 0x5f, 0x56, 0x98, 0x5b, 0xf1, 0x06, 0x5e, 0x14, 0x22, 0xfc, 0x94, - 0xbb, 0x88, 0xc4, 0xcf, 0x54, 0xcf, 0x94, 0xf8, 0x99, 0x6e, 0x38, 0x9e, 0x6d, 0xbe, 0x2a, 0x9b, - 0xbc, 0xf7, 0x7e, 0x1c, 0xfd, 0xbc, 0x5e, 0xe3, 0x8d, 0xf5, 0xfd, 0x5f, 0x01, 0x00, 0x00, 0xff, - 0xff, 0x24, 0xc8, 0xbf, 0xca, 0x94, 0x0b, 0x00, 0x00, +func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_0a10ad809f213986) } + +var fileDescriptor_user_0a10ad809f213986 = []byte{ + // 829 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0xcd, 0x6e, 0xd3, 0x4a, + 0x14, 0x96, 0x9b, 0xb4, 0xb7, 0x39, 0x69, 0x93, 0xdc, 0x51, 0x7f, 0x7c, 0x7d, 0xa1, 0x4a, 0x47, + 0x08, 0xa2, 0x2e, 0x1c, 0x28, 0x62, 0x01, 0x08, 0xa4, 0x92, 0xaa, 0x56, 0x05, 0x51, 0x90, 0xab, + 0x6e, 0xd8, 0x54, 0x26, 0x1e, 0x42, 0x94, 0xc4, 0x63, 0x3c, 0x4e, 0x2b, 0x40, 0x62, 0x03, 0x6f, + 0xc1, 0x82, 0x25, 0xcf, 0xc0, 0x6b, 0xf0, 0x02, 0xbc, 0x0a, 0xf2, 0x8c, 0x9d, 0xcc, 0xd8, 0x4e, + 0x82, 0x02, 0x0b, 0x36, 0x51, 0xe6, 0x9b, 0x33, 0x67, 0xbe, 0xef, 0x9b, 0x33, 0xe3, 0x03, 0xd5, + 0x31, 0x23, 0x41, 0x33, 0xfa, 0x31, 0xfd, 0x80, 0x86, 0x14, 0x15, 0xa3, 0xff, 0xc6, 0x7e, 0xc7, + 0x27, 0xde, 0xc5, 0x69, 0xbb, 0xe9, 0x0f, 0x7a, 0x4d, 0x3e, 0xd1, 0x64, 0xee, 0xe0, 0xe2, 0x8a, + 0x35, 0xaf, 0x98, 0x08, 0xc4, 0x8f, 0x01, 0x5a, 0x74, 0x34, 0xa2, 0x9e, 0x4d, 0x98, 0x8f, 0x74, + 0xf8, 0x87, 0x04, 0x41, 0x8b, 0xba, 0x44, 0xd7, 0xea, 0x5a, 0x63, 0xd5, 0x4e, 0x86, 0x68, 0x07, + 0xd6, 0x48, 0x10, 0xb4, 0x59, 0x4f, 0x5f, 0xa9, 0x6b, 0x8d, 0x92, 0x1d, 0x8f, 0xf0, 0x3b, 0xa8, + 0x1c, 0x93, 0x21, 0x09, 0xc9, 0x39, 0x23, 0x01, 0xb3, 0xc9, 0x1b, 0x74, 0x00, 0xb5, 0x29, 0x72, + 0x7a, 0xfc, 0xac, 0xcf, 0x42, 0x7d, 0xa5, 0x5e, 0x68, 0x94, 0xec, 0x0c, 0x8e, 0x0c, 0x58, 0xef, + 0xf8, 0x62, 0xac, 0x17, 0x78, 0xde, 0xc9, 0x18, 0xd5, 0xa1, 0xdc, 0xf1, 0x49, 0xe0, 0x84, 0x7d, + 0xea, 0x9d, 0x1e, 0xeb, 0x45, 0x3e, 0x2d, 0x43, 0x98, 0x42, 0x55, 0xd9, 0x9b, 0xf9, 0xe8, 0xb6, + 0x2c, 0x87, 0x6b, 0x28, 0x1f, 0xd6, 0x4c, 0x6e, 0xcc, 0x14, 0xb7, 0x65, 0xc9, 0x07, 0x50, 0x3b, + 0x71, 0xfa, 0x43, 0xe2, 0x66, 0xe9, 0xa6, 0x71, 0xdc, 0x81, 0xaa, 0x45, 0xc2, 0xa3, 0xe1, 0x50, + 0x60, 0x91, 0x5a, 0x03, 0xd6, 0x69, 0xa2, 0x40, 0x13, 0x0a, 0xa8, 0xa4, 0x80, 0x4a, 0x0a, 0x84, + 0x71, 0x32, 0x84, 0x5d, 0xa8, 0xa9, 0x09, 0x97, 0x92, 0xb0, 0x07, 0x90, 0x21, 0x2f, 0x21, 0xf8, + 0x2d, 0x54, 0x8f, 0xba, 0x5d, 0x3a, 0xf6, 0xc2, 0xd6, 0x6b, 0xd2, 0x1d, 0x44, 0xb4, 0x1b, 0x50, + 0xe5, 0xff, 0xa5, 0x75, 0x1a, 0x5f, 0x97, 0x86, 0x95, 0x23, 0x5a, 0x99, 0x7f, 0x44, 0x85, 0xec, + 0x11, 0xfd, 0xd0, 0xa0, 0xa6, 0xee, 0x2d, 0x14, 0x76, 0x7f, 0x41, 0xe1, 0x34, 0x06, 0x59, 0x00, + 0x36, 0x61, 0xe3, 0x61, 0x38, 0x51, 0x58, 0x3e, 0xbc, 0x25, 0x56, 0xa4, 0xb3, 0x9b, 0x67, 0x7d, + 0xaf, 0x37, 0xe4, 0x25, 0x71, 0x16, 0x3a, 0xe1, 0x98, 0xd9, 0xd2, 0x52, 0xe3, 0x39, 0xd4, 0xd2, + 0xf3, 0x51, 0x69, 0x8f, 0xe5, 0x03, 0x8c, 0x47, 0xe8, 0x06, 0x6c, 0x3a, 0x22, 0xb9, 0x08, 0x8c, + 0xe5, 0xab, 0x20, 0xf6, 0xa0, 0x62, 0x91, 0x90, 0x1b, 0xe2, 0xbd, 0xa2, 0x91, 0xb7, 0x7b, 0x00, + 0xe3, 0xb4, 0xad, 0x12, 0xf2, 0x9b, 0x8e, 0x7e, 0xe0, 0x35, 0x38, 0xdd, 0x6f, 0x29, 0x3f, 0xef, + 0xc3, 0x46, 0x92, 0x81, 0x93, 0x2c, 0x70, 0x47, 0xb7, 0x4d, 0x1a, 0xbd, 0x17, 0xfd, 0xd1, 0x05, + 0x73, 0x07, 0xe6, 0x64, 0x0b, 0x25, 0x14, 0x7f, 0xd2, 0xe0, 0xdf, 0x73, 0xdf, 0x75, 0xe2, 0x7b, + 0x1c, 0x6b, 0xbe, 0x03, 0xeb, 0xc9, 0x30, 0x26, 0x30, 0x23, 0xd9, 0x24, 0x6c, 0x91, 0x0d, 0x34, + 0x6b, 0x83, 0x7c, 0x73, 0x4e, 0x00, 0xa5, 0x59, 0x2c, 0xe3, 0x04, 0xfe, 0xa6, 0xc1, 0xee, 0x19, + 0x09, 0x6d, 0xd2, 0x25, 0xfd, 0x4b, 0xd2, 0x26, 0x8c, 0x39, 0x3d, 0xd2, 0xf1, 0xc3, 0xf8, 0x20, + 0x4f, 0x02, 0x3a, 0x52, 0x6e, 0xb7, 0x84, 0xa0, 0x1a, 0x14, 0xa8, 0x1f, 0x72, 0xf2, 0xab, 0x76, + 0xf4, 0x17, 0x99, 0x80, 0xba, 0xd4, 0xbb, 0x24, 0x01, 0x8b, 0x79, 0x4e, 0xdc, 0x2d, 0xd9, 0x39, + 0x33, 0x69, 0x9d, 0xc5, 0x8c, 0x4e, 0xc5, 0xa5, 0x55, 0xd5, 0x25, 0xfc, 0x14, 0x4a, 0x9c, 0x69, + 0x54, 0xdd, 0xe8, 0x26, 0x54, 0x94, 0x0d, 0xdc, 0x98, 0x70, 0x0a, 0x8d, 0xaa, 0x3d, 0xe0, 0x2b, + 0x62, 0xde, 0xf1, 0x08, 0x7f, 0xd4, 0x40, 0xcf, 0x37, 0x62, 0xa9, 0x0a, 0xbb, 0x07, 0x9b, 0x34, + 0xe1, 0x26, 0x5d, 0xda, 0xaa, 0x58, 0x34, 0xa1, 0x6d, 0xab, 0x51, 0xf8, 0xab, 0x06, 0xbb, 0xd6, + 0x92, 0xc7, 0x91, 0x36, 0xdf, 0x95, 0x9e, 0xc3, 0x9c, 0x99, 0xc5, 0x45, 0xa6, 0x98, 0x5f, 0x4c, + 0x99, 0xff, 0x59, 0x03, 0xdd, 0xfa, 0x73, 0x7e, 0xb5, 0xe1, 0x3f, 0x99, 0x62, 0x47, 0xf1, 0xae, + 0x90, 0xef, 0xdd, 0xec, 0x15, 0xf8, 0x3d, 0xfc, 0x2f, 0x3e, 0x2c, 0x2d, 0x29, 0xa4, 0xcd, 0x7a, + 0x39, 0x56, 0xba, 0x19, 0x2b, 0xdd, 0xc5, 0x5f, 0xae, 0x79, 0x5f, 0x6e, 0xfc, 0x45, 0x83, 0x6b, + 0xb3, 0x77, 0xff, 0x0b, 0xec, 0x39, 0xfc, 0x5e, 0x04, 0xde, 0x21, 0xa1, 0x07, 0x50, 0x96, 0x5e, + 0x53, 0xb4, 0x25, 0x72, 0xa8, 0x0f, 0xba, 0xb1, 0x9d, 0x83, 0x32, 0x1f, 0xb5, 0xa0, 0xa2, 0x3e, + 0x41, 0x68, 0x57, 0x04, 0x66, 0x9e, 0x47, 0x43, 0xcf, 0x9f, 0x60, 0x7e, 0x44, 0x40, 0xea, 0x61, + 0x12, 0x02, 0x6a, 0x4b, 0x95, 0x10, 0x48, 0x37, 0x3b, 0x8f, 0x60, 0x43, 0xee, 0x1e, 0xd0, 0x94, + 0xa7, 0xdc, 0xa2, 0x18, 0x3b, 0x79, 0x30, 0xf3, 0xd1, 0x39, 0x6c, 0xe5, 0x5d, 0x78, 0x74, 0x5d, + 0xc4, 0xcf, 0x78, 0x15, 0x8d, 0xbd, 0x79, 0xd3, 0x22, 0xad, 0x35, 0x27, 0xad, 0x35, 0x3f, 0xed, + 0xcc, 0x2b, 0xe5, 0xf0, 0xeb, 0x96, 0x5b, 0x53, 0x68, 0x5f, 0x56, 0x98, 0x5b, 0xf1, 0x06, 0x5e, + 0x14, 0x22, 0xfc, 0x94, 0xbb, 0x89, 0xc4, 0xcf, 0x54, 0xef, 0x94, 0xf8, 0x99, 0x6e, 0x3c, 0x9e, + 0x6c, 0xbe, 0x28, 0x9b, 0xbc, 0x07, 0x7f, 0x18, 0xfd, 0xbc, 0x5c, 0xe3, 0x0d, 0xf6, 0xdd, 0x9f, + 0x01, 0x00, 0x00, 0xff, 0xff, 0x88, 0x5d, 0x20, 0xc1, 0x9c, 0x0b, 0x00, 0x00, } diff --git a/pkg/proto/user/user.proto b/pkg/proto/user/user.proto index 2efd32ae4..7690167ed 100644 --- a/pkg/proto/user/user.proto +++ b/pkg/proto/user/user.proto @@ -86,7 +86,7 @@ message SetReceiveMessageOptResp{ message GetReceiveMessageOptReq{ string FromUserID = 1; - repeated string conversationId = 2; + repeated string conversationIdList = 2; string operationID = 3; string OpUserID = 4; } From ce6cd8070fa7b06ac947a86c777bbdfe2204d9fb Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 29 Dec 2021 11:32:20 +0800 Subject: [PATCH 2/2] conversation update --- go.mod | 1 + 1 file changed, 1 insertion(+) diff --git a/go.mod b/go.mod index 911f68c00..a53930ed5 100644 --- a/go.mod +++ b/go.mod @@ -31,6 +31,7 @@ require ( github.com/lestrrat-go/strftime v1.0.4 // indirect github.com/lib/pq v1.2.0 // indirect github.com/mattn/go-sqlite3 v1.14.6 // indirect + github.com/mitchellh/mapstructure v1.4.2 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 github.com/olivere/elastic/v7 v7.0.23 github.com/pierrec/lz4 v2.6.1+incompatible // indirect