Files
open-im-server/internal/api/conversation/conversation.go
T

329 lines
14 KiB
Go
Raw Normal View History

2021-12-07 14:28:07 +08:00
package conversation
2021-12-29 11:31:51 +08:00
import (
api "Open_IM/pkg/base_info"
"Open_IM/pkg/common/config"
"Open_IM/pkg/common/log"
"Open_IM/pkg/grpc-etcdv3/getcdv3"
2022-04-24 16:55:47 +08:00
pbConversation "Open_IM/pkg/proto/conversation"
2022-03-11 17:37:01 +08:00
pbUser "Open_IM/pkg/proto/user"
2021-12-29 11:31:51 +08:00
"Open_IM/pkg/utils"
"context"
"github.com/gin-gonic/gin"
"net/http"
"strings"
)
2021-12-07 15:44:12 +08:00
2022-03-11 17:37:01 +08:00
func SetConversation(c *gin.Context) {
var (
2022-03-16 18:02:26 +08:00
req api.SetConversationReq
resp api.SetConversationResp
2022-03-11 17:37:01 +08:00
reqPb pbUser.SetConversationReq
)
if err := c.BindJSON(&req); err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
2021-12-29 11:31:51 +08:00
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
return
}
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req)
2022-08-21 23:25:39 +08:00
reqPb.Conversation = &pbConversation.Conversation{}
2022-03-11 17:37:01 +08:00
err := utils.CopyStructFields(&reqPb, req)
err = utils.CopyStructFields(reqPb.Conversation, req.Conversation)
if err != nil {
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
}
2022-08-17 12:12:54 +08:00
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID)
2022-06-16 14:09:28 +08:00
if etcdConn == nil {
2022-08-17 12:12:54 +08:00
errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
2022-06-16 14:09:28 +08:00
log.NewError(req.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
2022-03-11 17:37:01 +08:00
client := pbUser.NewUserClient(etcdConn)
respPb, err := client.SetConversation(context.Background(), &reqPb)
2022-04-24 16:55:47 +08:00
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error())
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetAllConversationMsgOpt rpc failed, " + err.Error()})
return
}
resp.ErrMsg = respPb.CommonResp.ErrMsg
resp.ErrCode = respPb.CommonResp.ErrCode
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
c.JSON(http.StatusOK, resp)
}
func ModifyConversationField(c *gin.Context) {
var (
req api.ModifyConversationFieldReq
resp api.ModifyConversationFieldResp
reqPb pbConversation.ModifyConversationFieldReq
)
if err := c.BindJSON(&req); err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
return
}
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req)
2022-04-24 16:55:47 +08:00
reqPb.Conversation = &pbConversation.Conversation{}
err := utils.CopyStructFields(&reqPb, req)
err = utils.CopyStructFields(reqPb.Conversation, req.Conversation)
if err != nil {
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
}
2022-08-17 12:12:54 +08:00
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName, req.OperationID)
2022-06-16 14:09:28 +08:00
if etcdConn == nil {
2022-08-17 12:12:54 +08:00
errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
2022-06-16 14:09:28 +08:00
log.NewError(req.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
2022-04-24 16:55:47 +08:00
client := pbConversation.NewConversationClient(etcdConn)
respPb, err := client.ModifyConversationField(context.Background(), &reqPb)
2022-03-11 17:37:01 +08:00
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error())
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetAllConversationMsgOpt rpc failed, " + err.Error()})
2021-12-29 11:31:51 +08:00
return
}
2022-03-11 17:37:01 +08:00
resp.ErrMsg = respPb.CommonResp.ErrMsg
resp.ErrCode = respPb.CommonResp.ErrCode
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
c.JSON(http.StatusOK, resp)
}
func BatchSetConversations(c *gin.Context) {
var (
2022-03-16 18:02:26 +08:00
req api.BatchSetConversationsReq
resp api.BatchSetConversationsResp
2022-03-11 17:37:01 +08:00
reqPb pbUser.BatchSetConversationsReq
)
if err := c.BindJSON(&req); err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
return
}
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req)
2022-03-11 17:37:01 +08:00
if err := utils.CopyStructFields(&reqPb, req); err != nil {
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
}
2022-08-17 12:12:54 +08:00
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID)
2022-06-16 14:09:28 +08:00
if etcdConn == nil {
2022-08-17 12:12:54 +08:00
errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
2022-06-16 14:09:28 +08:00
log.NewError(req.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
2022-03-11 17:37:01 +08:00
client := pbUser.NewUserClient(etcdConn)
respPb, err := client.BatchSetConversations(context.Background(), &reqPb)
2021-12-29 11:31:51 +08:00
if err != nil {
2022-03-11 17:37:01 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error())
2021-12-29 11:31:51 +08:00
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetAllConversationMsgOpt rpc failed, " + err.Error()})
return
}
2022-03-11 17:37:01 +08:00
if err := utils.CopyStructFields(&resp.Data, respPb); err != nil {
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
2021-12-29 12:22:10 +08:00
}
2022-03-11 17:37:01 +08:00
resp.ErrMsg = respPb.CommonResp.ErrMsg
resp.ErrCode = respPb.CommonResp.ErrCode
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
2021-12-29 11:31:51 +08:00
c.JSON(http.StatusOK, resp)
}
2021-12-07 14:28:07 +08:00
2022-06-29 18:48:17 +08:00
// @Summary 获取用户所有会话
// @Description 获取用户所有会话
// @Tags 会话相关
// @ID GetAllConversations
// @Accept json
// @Param token header string true "im token"
// @Param req body api.GetAllConversationsReq true "ownerUserID为要获取的用户ID"
// @Produce json
// @Success 0 {object} api.GetAllConversationsResp
2022-07-01 15:36:44 +08:00
// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
2022-06-29 18:48:17 +08:00
// @Router /msg/get_all_conversations [post]
2022-03-11 17:37:01 +08:00
func GetAllConversations(c *gin.Context) {
var (
2022-03-16 18:02:26 +08:00
req api.GetAllConversationsReq
resp api.GetAllConversationsResp
2022-03-11 17:37:01 +08:00
reqPb pbUser.GetAllConversationsReq
)
if err := c.BindJSON(&req); err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
2021-12-29 11:31:51 +08:00
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
return
}
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req)
2022-03-11 17:37:01 +08:00
if err := utils.CopyStructFields(&reqPb, req); err != nil {
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
2021-12-29 11:31:51 +08:00
}
2022-08-17 12:12:54 +08:00
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID)
2022-06-16 14:09:28 +08:00
if etcdConn == nil {
2022-08-17 12:12:54 +08:00
errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
2022-06-16 14:09:28 +08:00
log.NewError(req.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
2022-03-11 17:37:01 +08:00
client := pbUser.NewUserClient(etcdConn)
respPb, err := client.GetAllConversations(context.Background(), &reqPb)
2021-12-29 11:31:51 +08:00
if err != nil {
2022-03-11 17:37:01 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error())
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetAllConversationMsgOpt rpc failed, " + err.Error()})
2021-12-29 11:31:51 +08:00
return
}
2022-03-11 17:37:01 +08:00
resp.ErrMsg = respPb.CommonResp.ErrMsg
resp.ErrCode = respPb.CommonResp.ErrCode
if err := utils.CopyStructFields(&resp.Conversations, respPb.Conversations); err != nil {
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed, ", err.Error())
2021-12-29 12:22:10 +08:00
}
2022-03-11 17:37:01 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
2021-12-29 11:31:51 +08:00
c.JSON(http.StatusOK, resp)
2021-12-07 14:28:07 +08:00
}
2022-06-29 18:48:17 +08:00
// @Summary 根据会话ID获取会话
// @Description 根据会话ID获取会话
// @Tags 会话相关
// @ID GetConversation
// @Accept json
// @Param token header string true "im token"
// @Param req body api.GetConversationReq true "ownerUserID为要获取的用户ID<br>conversationID为要获取的会话ID"
// @Produce json
// @Success 0 {object} api.GetConversationResp
2022-07-01 15:36:44 +08:00
// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
2022-06-29 18:48:17 +08:00
// @Router /msg/get_conversation [post]
2022-03-11 17:37:01 +08:00
func GetConversation(c *gin.Context) {
var (
2022-03-16 18:02:26 +08:00
req api.GetConversationReq
resp api.GetConversationResp
2022-03-11 17:37:01 +08:00
reqPb pbUser.GetConversationReq
)
if err := c.BindJSON(&req); err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
2021-12-29 11:31:51 +08:00
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
return
}
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req)
2022-03-11 17:37:01 +08:00
if err := utils.CopyStructFields(&reqPb, req); err != nil {
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
}
2022-08-17 12:12:54 +08:00
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID)
2022-06-16 14:09:28 +08:00
if etcdConn == nil {
2022-08-17 12:12:54 +08:00
errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
2022-06-16 14:09:28 +08:00
log.NewError(req.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
2022-03-11 17:37:01 +08:00
client := pbUser.NewUserClient(etcdConn)
respPb, err := client.GetConversation(context.Background(), &reqPb)
if err != nil {
2022-03-31 14:50:02 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetConversation rpc failed, ", reqPb.String(), err.Error())
2022-03-11 17:37:01 +08:00
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetAllConversationMsgOpt rpc failed, " + err.Error()})
return
}
resp.ErrMsg = respPb.CommonResp.ErrMsg
resp.ErrCode = respPb.CommonResp.ErrCode
if err := utils.CopyStructFields(&resp.Conversation, respPb.Conversation); err != nil {
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
}
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
c.JSON(http.StatusOK, resp)
}
2022-06-29 18:48:17 +08:00
// @Summary 根据会话ID列表获取会话
// @Description 根据会话ID列表获取会话
// @Tags 会话相关
// @ID GetConversations
// @Accept json
// @Param token header string true "im token"
// @Param req body api.GetConversationsReq true "ownerUserID为要获取的用户ID<br>conversationIDs为要获取的会话ID列表"
// @Produce json
// @Success 0 {object} api.GetConversationsResp
2022-07-01 15:36:44 +08:00
// @Failure 500 {object} api.Swagger500Resp "errCode为500 一般为服务器内部错误"
// @Failure 400 {object} api.Swagger400Resp "errCode为400 一般为参数输入错误, token未带上等"
2022-06-29 18:48:17 +08:00
// @Router /msg/get_conversations [post]
2022-03-11 17:37:01 +08:00
func GetConversations(c *gin.Context) {
var (
2022-03-16 18:02:26 +08:00
req api.GetConversationsReq
resp api.GetConversationsResp
2022-03-11 17:37:01 +08:00
reqPb pbUser.GetConversationsReq
)
if err := c.BindJSON(&req); err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
2021-12-29 11:31:51 +08:00
return
}
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req)
2022-03-11 17:37:01 +08:00
if err := utils.CopyStructFields(&reqPb, req); err != nil {
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
}
2022-08-17 12:12:54 +08:00
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID)
2022-06-16 14:09:28 +08:00
if etcdConn == nil {
2022-08-17 12:12:54 +08:00
errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
2022-06-16 14:09:28 +08:00
log.NewError(req.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
2022-03-11 17:37:01 +08:00
client := pbUser.NewUserClient(etcdConn)
respPb, err := client.GetConversations(context.Background(), &reqPb)
2021-12-29 11:31:51 +08:00
if err != nil {
2022-03-11 17:37:01 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation rpc failed, ", reqPb.String(), err.Error())
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetAllConversationMsgOpt rpc failed, " + err.Error()})
2021-12-29 11:31:51 +08:00
return
}
2022-03-11 17:37:01 +08:00
resp.ErrMsg = respPb.CommonResp.ErrMsg
resp.ErrCode = respPb.CommonResp.ErrCode
if err := utils.CopyStructFields(&resp.Conversations, respPb.Conversations); err != nil {
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
2021-12-29 12:22:10 +08:00
}
2022-03-11 17:37:01 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
c.JSON(http.StatusOK, resp)
}
2022-03-16 18:02:26 +08:00
func SetRecvMsgOpt(c *gin.Context) {
2022-03-11 17:37:01 +08:00
var (
2022-03-16 18:02:26 +08:00
req api.SetRecvMsgOptReq
resp api.SetRecvMsgOptResp
reqPb pbUser.SetRecvMsgOptReq
2022-03-11 17:37:01 +08:00
)
2022-03-16 18:02:26 +08:00
if err := c.BindJSON(&req); err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "bind json failed", err.Error())
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "bind json failed " + err.Error()})
return
}
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req)
2022-03-16 18:02:26 +08:00
if err := utils.CopyStructFields(&reqPb, req); err != nil {
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", err.Error())
}
2022-08-17 12:12:54 +08:00
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID)
2022-06-16 14:09:28 +08:00
if etcdConn == nil {
2022-08-17 12:12:54 +08:00
errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
2022-06-16 14:09:28 +08:00
log.NewError(req.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
2022-03-16 18:02:26 +08:00
client := pbUser.NewUserClient(etcdConn)
respPb, err := client.SetRecvMsgOpt(context.Background(), &reqPb)
if err != nil {
2022-03-31 14:50:02 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetRecvMsgOpt rpc failed, ", reqPb.String(), err.Error())
2022-03-16 18:02:26 +08:00
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": "GetAllConversationMsgOpt rpc failed, " + err.Error()})
return
}
resp.ErrMsg = respPb.CommonResp.ErrMsg
resp.ErrCode = respPb.CommonResp.ErrCode
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
2021-12-29 11:31:51 +08:00
c.JSON(http.StatusOK, resp)
2021-12-07 14:28:07 +08:00
}
2022-03-25 18:46:27 +08:00
//Deprecated
func SetReceiveMessageOpt(c *gin.Context) {
}
//Deprecated
func GetReceiveMessageOpt(c *gin.Context) {
}
//Deprecated
func GetAllConversationMessageOpt(c *gin.Context) {
}