Files
open-im-server/internal/rpc/user/user.go
T

839 lines
36 KiB
Go
Raw Normal View History

2021-12-27 16:48:05 +08:00
package user
import (
chat "Open_IM/internal/rpc/msg"
"Open_IM/pkg/common/config"
"Open_IM/pkg/common/constant"
"Open_IM/pkg/common/db"
imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model"
2022-08-07 22:37:27 +08:00
rocksCache "Open_IM/pkg/common/db/rocks_cache"
2022-02-12 17:13:31 +08:00
errors "Open_IM/pkg/common/http"
2021-12-27 16:48:05 +08:00
"Open_IM/pkg/common/log"
"Open_IM/pkg/common/token_verify"
"Open_IM/pkg/grpc-etcdv3/getcdv3"
2022-08-21 23:25:39 +08:00
pbConversation "Open_IM/pkg/proto/conversation"
2021-12-27 16:48:05 +08:00
pbFriend "Open_IM/pkg/proto/friend"
2022-08-16 11:49:20 +08:00
pbOrganization "Open_IM/pkg/proto/organization"
2021-12-28 15:33:47 +08:00
sdkws "Open_IM/pkg/proto/sdk_ws"
2021-12-27 16:48:05 +08:00
pbUser "Open_IM/pkg/proto/user"
"Open_IM/pkg/utils"
"context"
"net"
"strconv"
"strings"
2022-08-14 22:53:41 +08:00
"time"
2022-01-27 01:08:02 +08:00
"google.golang.org/grpc"
2021-12-27 16:48:05 +08:00
)
type userServer struct {
rpcPort int
rpcRegisterName string
etcdSchema string
etcdAddr []string
}
2021-12-28 15:33:47 +08:00
func NewUserServer(port int) *userServer {
2022-03-31 11:15:06 +08:00
log.NewPrivateLog(constant.LogFileName)
2021-12-28 15:33:47 +08:00
return &userServer{
rpcPort: port,
rpcRegisterName: config.Config.RpcRegisterName.OpenImUserName,
etcdSchema: config.Config.Etcd.EtcdSchema,
etcdAddr: config.Config.Etcd.EtcdAddr,
}
}
2021-12-27 16:48:05 +08:00
func (s *userServer) Run() {
2022-05-07 17:05:05 +08:00
log.NewInfo("0", "rpc user start...")
listenIP := ""
if config.Config.ListenIP == "" {
listenIP = "0.0.0.0"
} else {
listenIP = config.Config.ListenIP
}
address := listenIP + ":" + strconv.Itoa(s.rpcPort)
2021-12-27 16:48:05 +08:00
//listener network
2022-05-07 17:05:05 +08:00
listener, err := net.Listen("tcp", address)
2021-12-27 16:48:05 +08:00
if err != nil {
2022-05-10 09:09:37 +08:00
panic("listening err:" + err.Error() + s.rpcRegisterName)
2021-12-27 16:48:05 +08:00
}
2022-05-07 17:05:05 +08:00
log.NewInfo("0", "listen network success, address ", address, listener)
2021-12-27 16:48:05 +08:00
defer listener.Close()
//grpc server
srv := grpc.NewServer()
defer srv.GracefulStop()
//Service registers with etcd
pbUser.RegisterUserServer(srv, s)
2022-06-23 09:24:05 +08:00
rpcRegisterIP := config.Config.RpcRegisterIP
2022-05-07 17:05:05 +08:00
if config.Config.RpcRegisterIP == "" {
rpcRegisterIP, err = utils.GetLocalIP()
if err != nil {
log.Error("", "GetLocalIP failed ", err.Error())
}
}
err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName, 10)
2021-12-27 16:48:05 +08:00
if err != nil {
2022-05-07 17:05:05 +08:00
log.NewError("0", "RegisterEtcd failed ", err.Error(), s.etcdSchema, strings.Join(s.etcdAddr, ","), rpcRegisterIP, s.rpcPort, s.rpcRegisterName)
2021-12-27 16:48:05 +08:00
return
}
err = srv.Serve(listener)
if err != nil {
log.NewError("0", "Serve failed ", err.Error())
return
}
2021-12-28 15:33:47 +08:00
log.NewInfo("0", "rpc user success")
2021-12-27 16:48:05 +08:00
}
2022-08-21 23:25:39 +08:00
func syncPeerUserConversation(conversation *pbConversation.Conversation, operationID string) error {
2022-03-31 14:50:02 +08:00
peerUserConversation := db.Conversation{
OwnerUserID: conversation.UserID,
2022-04-20 18:47:21 +08:00
ConversationID: utils.GetConversationIDBySessionType(conversation.OwnerUserID, constant.SingleChatType),
2022-03-31 14:50:02 +08:00
ConversationType: constant.SingleChatType,
UserID: conversation.OwnerUserID,
GroupID: "",
RecvMsgOpt: 0,
UnreadCount: 0,
DraftTextTime: 0,
IsPinned: false,
IsPrivateChat: conversation.IsPrivateChat,
AttachedInfo: "",
Ex: "",
}
err := imdb.PeerUserSetConversation(peerUserConversation)
if err != nil {
log.NewError(operationID, utils.GetSelfFuncName(), "SetConversation error", err.Error())
return err
2022-03-29 15:35:03 +08:00
}
2022-03-31 14:50:02 +08:00
chat.ConversationSetPrivateNotification(operationID, conversation.OwnerUserID, conversation.UserID, conversation.IsPrivateChat)
2022-03-29 15:35:03 +08:00
return nil
}
2021-12-27 16:48:05 +08:00
func (s *userServer) GetUserInfo(ctx context.Context, req *pbUser.GetUserInfoReq) (*pbUser.GetUserInfoResp, error) {
log.NewInfo(req.OperationID, "GetUserInfo args ", req.String())
2022-08-08 20:01:29 +08:00
2021-12-27 16:48:05 +08:00
var userInfoList []*sdkws.UserInfo
if len(req.UserIDList) > 0 {
for _, userID := range req.UserIDList {
var userInfo sdkws.UserInfo
2022-07-14 12:08:28 +08:00
user, err := rocksCache.GetUserInfoFromCache(userID)
2021-12-27 16:48:05 +08:00
if err != nil {
log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), userID)
continue
}
utils.CopyStructFields(&userInfo, user)
2022-01-24 16:44:14 +08:00
userInfo.Birth = uint32(user.Birth.Unix())
2021-12-27 16:48:05 +08:00
userInfoList = append(userInfoList, &userInfo)
}
} else {
return &pbUser.GetUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrArgs.ErrCode, ErrMsg: constant.ErrArgs.ErrMsg}}, nil
}
2021-12-28 15:33:47 +08:00
log.NewInfo(req.OperationID, "GetUserInfo rpc return ", pbUser.GetUserInfoResp{CommonResp: &pbUser.CommonResp{}, UserInfoList: userInfoList})
return &pbUser.GetUserInfoResp{CommonResp: &pbUser.CommonResp{}, UserInfoList: userInfoList}, nil
2021-12-27 16:48:05 +08:00
}
2022-03-11 17:37:01 +08:00
func (s *userServer) BatchSetConversations(ctx context.Context, req *pbUser.BatchSetConversationsReq) (*pbUser.BatchSetConversationsResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
2022-03-31 14:50:02 +08:00
if req.NotificationType == 0 {
req.NotificationType = constant.ConversationOptChangeNotification
}
2022-03-11 17:37:01 +08:00
resp := &pbUser.BatchSetConversationsResp{}
for _, v := range req.Conversations {
conversation := db.Conversation{}
if err := utils.CopyStructFields(&conversation, v); err != nil {
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), v.String(), "CopyStructFields failed", err.Error())
}
2022-04-20 18:47:21 +08:00
//redis op
2022-03-11 17:37:01 +08:00
if err := db.DB.SetSingleConversationRecvMsgOpt(req.OwnerUserID, v.ConversationID, v.RecvMsgOpt); err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "cache failed, rpc return", err.Error())
resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}
return resp, nil
}
2022-08-21 17:33:40 +08:00
isUpdate, err := imdb.SetConversation(conversation)
if err != nil {
2022-03-11 17:37:01 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation error", err.Error())
resp.Failed = append(resp.Failed, v.ConversationID)
continue
}
2022-08-21 17:33:40 +08:00
if isUpdate {
err = rocksCache.DelConversationFromCache(v.OwnerUserID, v.ConversationID)
} else {
err = rocksCache.DelUserConversationIDListFromCache(v.OwnerUserID)
}
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), v.ConversationID, v.OwnerUserID)
}
2022-03-11 17:37:01 +08:00
resp.Success = append(resp.Success, v.ConversationID)
2022-07-20 21:26:52 +08:00
// if is set private msg operationthen peer user need to sync and set tips\
2022-03-31 14:50:02 +08:00
if v.ConversationType == constant.SingleChatType && req.NotificationType == constant.ConversationPrivateChatNotification {
if err := syncPeerUserConversation(v, req.OperationID); err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "syncPeerUserConversation", err.Error())
}
2022-03-29 17:33:06 +08:00
}
2021-12-27 16:48:05 +08:00
}
2022-03-31 14:50:02 +08:00
chat.ConversationChangeNotification(req.OperationID, req.OwnerUserID)
2022-03-11 17:37:01 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc return", resp.String())
resp.CommonResp = &pbUser.CommonResp{}
return resp, nil
}
func (s *userServer) GetAllConversations(ctx context.Context, req *pbUser.GetAllConversationsReq) (*pbUser.GetAllConversationsResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
2022-08-21 23:25:39 +08:00
resp := &pbUser.GetAllConversationsResp{Conversations: []*pbConversation.Conversation{}}
2022-08-21 17:33:40 +08:00
conversations, err := rocksCache.GetUserAllConversationList(req.OwnerUserID)
2022-05-10 10:44:43 +08:00
log.NewDebug(req.OperationID, "conversations: ", conversations)
2021-12-27 16:48:05 +08:00
if err != nil {
2022-03-11 17:37:01 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetConversations error", err.Error())
resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}
return resp, nil
2021-12-27 16:48:05 +08:00
}
2022-03-11 17:37:01 +08:00
if err = utils.CopyStructFields(&resp.Conversations, conversations); err != nil {
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields error", err.Error())
2021-12-27 16:48:05 +08:00
}
2022-03-11 17:37:01 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc return", resp.String())
resp.CommonResp = &pbUser.CommonResp{}
return resp, nil
2021-12-27 16:48:05 +08:00
}
2022-03-11 17:37:01 +08:00
func (s *userServer) GetConversation(ctx context.Context, req *pbUser.GetConversationReq) (*pbUser.GetConversationResp, error) {
2022-03-16 18:02:26 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
2022-08-21 23:25:39 +08:00
resp := &pbUser.GetConversationResp{Conversation: &pbConversation.Conversation{}}
2022-08-21 17:33:40 +08:00
conversation, err := rocksCache.GetConversationFromCache(req.OwnerUserID, req.ConversationID)
2022-05-10 10:44:43 +08:00
log.NewDebug("", utils.GetSelfFuncName(), "conversation", conversation)
2022-03-16 18:02:26 +08:00
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetConversation error", err.Error())
resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}
return resp, nil
}
if err := utils.CopyStructFields(resp.Conversation, &conversation); err != nil {
log.Debug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields error", conversation, err.Error())
}
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String())
resp.CommonResp = &pbUser.CommonResp{}
return resp, nil
2022-03-11 17:37:01 +08:00
}
func (s *userServer) GetConversations(ctx context.Context, req *pbUser.GetConversationsReq) (*pbUser.GetConversationsResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
2022-08-21 23:25:39 +08:00
resp := &pbUser.GetConversationsResp{Conversations: []*pbConversation.Conversation{}}
2022-08-21 17:33:40 +08:00
conversations, err := rocksCache.GetConversationsFromCache(req.OwnerUserID, req.ConversationIDs)
2022-05-10 10:44:43 +08:00
log.NewDebug("", utils.GetSelfFuncName(), "conversations", conversations)
2021-12-27 16:48:05 +08:00
if err != nil {
2022-03-11 17:37:01 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetConversations error", err.Error())
resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}
return resp, nil
2021-12-27 16:48:05 +08:00
}
2022-03-11 17:37:01 +08:00
if err := utils.CopyStructFields(&resp.Conversations, conversations); err != nil {
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", conversations, err.Error())
2021-12-27 16:48:05 +08:00
}
2022-03-11 17:37:01 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String())
resp.CommonResp = &pbUser.CommonResp{}
return resp, nil
2021-12-27 16:48:05 +08:00
}
2022-03-11 17:37:01 +08:00
func (s *userServer) SetConversation(ctx context.Context, req *pbUser.SetConversationReq) (*pbUser.SetConversationResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
2022-04-18 19:24:36 +08:00
resp := &pbUser.SetConversationResp{}
2022-03-31 14:50:02 +08:00
if req.NotificationType == 0 {
req.NotificationType = constant.ConversationOptChangeNotification
}
2022-04-18 19:24:36 +08:00
if req.Conversation.ConversationType == constant.GroupChatType {
groupInfo, err := imdb.GetGroupInfoByGroupID(req.Conversation.GroupID)
if err != nil {
log.NewError(req.OperationID, "GetGroupInfoByGroupID failed ", req.Conversation.GroupID, err.Error())
resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}
return resp, nil
}
2022-04-21 17:23:40 +08:00
if groupInfo.Status == constant.GroupStatusDismissed && !req.Conversation.IsNotInGroup {
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "group status is dismissed", groupInfo)
2022-04-18 19:24:36 +08:00
errMsg := "group status is dismissed"
resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}
return resp, nil
}
}
2022-03-11 17:37:01 +08:00
var conversation db.Conversation
if err := utils.CopyStructFields(&conversation, req.Conversation); err != nil {
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", *req.Conversation, err.Error())
2021-12-27 16:48:05 +08:00
}
2022-03-11 17:37:01 +08:00
if err := db.DB.SetSingleConversationRecvMsgOpt(req.Conversation.OwnerUserID, req.Conversation.ConversationID, req.Conversation.RecvMsgOpt); err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "cache failed, rpc return", err.Error())
resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}
return resp, nil
2021-12-27 16:48:05 +08:00
}
2022-08-21 17:33:40 +08:00
isUpdate, err := imdb.SetConversation(conversation)
2022-03-11 17:37:01 +08:00
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation error", err.Error())
resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}
return resp, nil
}
2022-08-21 17:33:40 +08:00
if isUpdate {
2022-08-21 22:04:33 +08:00
err = rocksCache.DelConversationFromCache(req.Conversation.OwnerUserID, req.Conversation.ConversationID)
2022-08-21 17:33:40 +08:00
} else {
err = rocksCache.DelUserConversationIDListFromCache(req.Conversation.OwnerUserID)
}
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.Conversation.ConversationID, req.Conversation.OwnerUserID)
}
2022-03-31 14:50:02 +08:00
// notification
if req.Conversation.ConversationType == constant.SingleChatType && req.NotificationType == constant.ConversationPrivateChatNotification {
//sync peer user conversation if conversation is singleChatType
if err := syncPeerUserConversation(req.Conversation, req.OperationID); err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "syncPeerUserConversation", err.Error())
resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}
return resp, nil
}
} else {
chat.ConversationChangeNotification(req.OperationID, req.Conversation.OwnerUserID)
2022-03-29 17:33:06 +08:00
}
2022-03-11 17:37:01 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc return", resp.String())
resp.CommonResp = &pbUser.CommonResp{}
return resp, nil
2021-12-27 16:48:05 +08:00
}
2022-03-11 17:37:01 +08:00
2022-03-16 18:02:26 +08:00
func (s *userServer) SetRecvMsgOpt(ctx context.Context, req *pbUser.SetRecvMsgOptReq) (*pbUser.SetRecvMsgOptResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
resp := &pbUser.SetRecvMsgOptResp{}
var conversation db.Conversation
if err := utils.CopyStructFields(&conversation, req); err != nil {
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "CopyStructFields failed", *req, err.Error())
}
if err := db.DB.SetSingleConversationRecvMsgOpt(req.OwnerUserID, req.ConversationID, req.RecvMsgOpt); err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "cache failed, rpc return", err.Error())
resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}
return resp, nil
}
2022-03-29 17:33:06 +08:00
stringList := strings.Split(req.ConversationID, "_")
if len(stringList) > 1 {
switch stringList[0] {
2022-06-22 19:48:35 +08:00
case "single":
2022-03-29 17:33:06 +08:00
conversation.UserID = stringList[1]
conversation.ConversationType = constant.SingleChatType
case "group":
conversation.GroupID = stringList[1]
conversation.ConversationType = constant.GroupChatType
}
}
2022-08-23 12:06:44 +08:00
isUpdate, err := imdb.SetRecvMsgOpt(conversation)
2022-03-16 18:02:26 +08:00
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetConversation error", err.Error())
resp.CommonResp = &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}
return resp, nil
2022-08-21 22:04:33 +08:00
}
2022-08-23 12:06:44 +08:00
if isUpdate {
err = rocksCache.DelConversationFromCache(conversation.OwnerUserID, conversation.ConversationID)
} else {
err = rocksCache.DelUserConversationIDListFromCache(conversation.OwnerUserID)
}
if err != nil {
2022-08-21 17:33:40 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), conversation.ConversationID, err.Error())
2022-03-16 18:02:26 +08:00
}
2022-03-31 14:50:02 +08:00
chat.ConversationChangeNotification(req.OperationID, req.OwnerUserID)
2022-03-16 20:37:37 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String())
2022-03-16 18:02:26 +08:00
resp.CommonResp = &pbUser.CommonResp{}
return resp, nil
}
2022-03-11 17:37:01 +08:00
2022-08-21 22:04:33 +08:00
func (s *userServer) DeleteUsers(_ context.Context, req *pbUser.DeleteUsersReq) (*pbUser.DeleteUsersResp, error) {
2021-12-27 16:48:05 +08:00
log.NewInfo(req.OperationID, "DeleteUsers args ", req.String())
2022-04-16 20:10:10 +08:00
if !token_verify.IsManagerUserID(req.OpUserID) {
log.NewError(req.OperationID, "IsManagerUserID false ", req.OpUserID)
2021-12-27 16:48:05 +08:00
return &pbUser.DeleteUsersResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, FailedUserIDList: req.DeleteUserIDList}, nil
}
var common pbUser.CommonResp
resp := pbUser.DeleteUsersResp{CommonResp: &common}
for _, userID := range req.DeleteUserIDList {
2021-12-30 11:50:20 +08:00
i := imdb.DeleteUser(userID)
if i == 0 {
2021-12-30 11:35:48 +08:00
log.NewError(req.OperationID, "delete user error", userID)
2021-12-27 16:48:05 +08:00
common.ErrCode = 201
common.ErrMsg = "some uid deleted failed"
resp.FailedUserIDList = append(resp.FailedUserIDList, userID)
}
}
log.NewInfo(req.OperationID, "DeleteUsers rpc return ", resp.String())
return &resp, nil
}
func (s *userServer) GetAllUserID(_ context.Context, req *pbUser.GetAllUserIDReq) (*pbUser.GetAllUserIDResp, error) {
2021-12-28 15:33:47 +08:00
log.NewInfo(req.OperationID, "GetAllUserID args ", req.String())
2022-04-16 20:10:10 +08:00
if !token_verify.IsManagerUserID(req.OpUserID) {
log.NewError(req.OperationID, "IsManagerUserID false ", req.OpUserID)
2021-12-27 16:48:05 +08:00
return &pbUser.GetAllUserIDResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
}
uidList, err := imdb.SelectAllUserID()
if err != nil {
log.NewError(req.OperationID, "SelectAllUserID false ", err.Error())
return &pbUser.GetAllUserIDResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
} else {
log.NewInfo(req.OperationID, "GetAllUserID rpc return ", pbUser.GetAllUserIDResp{CommonResp: &pbUser.CommonResp{}, UserIDList: uidList})
return &pbUser.GetAllUserIDResp{CommonResp: &pbUser.CommonResp{}, UserIDList: uidList}, nil
}
}
func (s *userServer) AccountCheck(_ context.Context, req *pbUser.AccountCheckReq) (*pbUser.AccountCheckResp, error) {
2021-12-28 15:33:47 +08:00
log.NewInfo(req.OperationID, "AccountCheck args ", req.String())
2022-04-16 20:10:10 +08:00
if !token_verify.IsManagerUserID(req.OpUserID) {
log.NewError(req.OperationID, "IsManagerUserID false ", req.OpUserID)
2021-12-27 16:48:05 +08:00
return &pbUser.AccountCheckResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
}
uidList, err := imdb.SelectSomeUserID(req.CheckUserIDList)
2021-12-29 18:09:55 +08:00
log.NewDebug(req.OperationID, "from db uid list is:", uidList)
2021-12-27 16:48:05 +08:00
if err != nil {
log.NewError(req.OperationID, "SelectSomeUserID failed ", err.Error(), req.CheckUserIDList)
return &pbUser.AccountCheckResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
} else {
var r []*pbUser.AccountCheckResp_SingleUserStatus
for _, v := range req.CheckUserIDList {
temp := new(pbUser.AccountCheckResp_SingleUserStatus)
temp.UserID = v
if utils.IsContain(v, uidList) {
temp.AccountStatus = constant.Registered
} else {
temp.AccountStatus = constant.UnRegistered
}
r = append(r, temp)
}
resp := pbUser.AccountCheckResp{CommonResp: &pbUser.CommonResp{ErrCode: 0, ErrMsg: ""}, ResultList: r}
log.NewInfo(req.OperationID, "AccountCheck rpc return ", resp.String())
return &resp, nil
}
}
func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserInfoReq) (*pbUser.UpdateUserInfoResp, error) {
2021-12-28 15:33:47 +08:00
log.NewInfo(req.OperationID, "UpdateUserInfo args ", req.String())
if !token_verify.CheckAccess(req.OpUserID, req.UserInfo.UserID) {
2021-12-27 16:48:05 +08:00
log.NewError(req.OperationID, "CheckAccess false ", req.OpUserID, req.UserInfo.UserID)
return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
}
oldNickname := ""
if req.UserInfo.Nickname != "" {
u, err := imdb.GetUserByUserID(req.UserInfo.UserID)
if err == nil {
oldNickname = u.Nickname
}
}
2022-02-14 00:02:15 +08:00
var user db.User
2021-12-27 16:48:05 +08:00
utils.CopyStructFields(&user, req.UserInfo)
2021-12-28 20:28:01 +08:00
if req.UserInfo.Birth != 0 {
2022-01-06 18:30:58 +08:00
user.Birth = utils.UnixSecondToTime(int64(req.UserInfo.Birth))
2021-12-28 20:28:01 +08:00
}
2022-06-16 19:26:09 +08:00
err := imdb.UpdateUserInfo(user)
if err != nil {
log.NewError(req.OperationID, "UpdateUserInfo failed ", err.Error(), user)
return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
2021-12-27 16:48:05 +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.OpenImFriendName, 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)
return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil
}
2021-12-27 16:48:05 +08:00
client := pbFriend.NewFriendClient(etcdConn)
newReq := &pbFriend.GetFriendListReq{
2021-12-28 15:33:47 +08:00
CommID: &pbFriend.CommID{OperationID: req.OperationID, FromUserID: req.UserInfo.UserID, OpUserID: req.OpUserID},
2021-12-27 16:48:05 +08:00
}
2022-07-14 12:08:28 +08:00
rpcResp, err := client.GetFriendList(context.Background(), newReq)
2021-12-27 16:48:05 +08:00
if err != nil {
log.NewError(req.OperationID, "GetFriendList failed ", err.Error(), newReq)
2022-07-14 12:08:28 +08:00
return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: 500, ErrMsg: err.Error()}}, nil
2021-12-27 16:48:05 +08:00
}
2022-07-14 12:08:28 +08:00
for _, v := range rpcResp.FriendInfoList {
2022-02-10 09:31:50 +08:00
log.Info(req.OperationID, "UserInfoUpdatedNotification ", req.UserInfo.UserID, v.FriendUser.UserID)
2022-01-16 18:58:07 +08:00
chat.UserInfoUpdatedNotification(req.OperationID, req.UserInfo.UserID, v.FriendUser.UserID)
2021-12-27 16:48:05 +08:00
}
2022-07-14 12:08:28 +08:00
if err := rocksCache.DelUserInfoFromCache(user.UserID); err != nil {
log.NewError(req.OperationID, "GetFriendList failed ", err.Error(), newReq)
return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: err.Error()}}, nil
}
2022-01-16 18:58:07 +08:00
chat.UserInfoUpdatedNotification(req.OperationID, req.UserInfo.UserID, req.OpUserID)
2022-02-10 09:31:50 +08:00
log.Info(req.OperationID, "UserInfoUpdatedNotification ", req.UserInfo.UserID, req.OpUserID)
2022-05-12 18:00:23 +08:00
if req.UserInfo.FaceURL != "" {
go s.SyncJoinedGroupMemberFaceURL(req.UserInfo.UserID, req.UserInfo.FaceURL, req.OperationID, req.OpUserID)
}
if req.UserInfo.Nickname != "" {
go s.SyncJoinedGroupMemberNickname(req.UserInfo.UserID, req.UserInfo.Nickname, oldNickname, req.OperationID, req.OpUserID)
}
2022-08-21 22:07:46 +08:00
etcdConn = getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOrganizationName, req.OperationID)
2022-08-16 11:49:20 +08:00
clientOrg := pbOrganization.NewOrganizationClient(etcdConn)
out, err := clientOrg.UpdateOrganizationUser(context.Background(), &pbOrganization.UpdateOrganizationUserReq{
OrganizationUser: &sdkws.OrganizationUser{
UserID: req.UserInfo.UserID,
Nickname: req.UserInfo.Nickname,
EnglishName: req.UserInfo.Nickname,
FaceURL: req.UserInfo.FaceURL,
Gender: req.UserInfo.Gender,
Mobile: req.UserInfo.PhoneNumber,
Telephone: req.UserInfo.PhoneNumber,
Birth: req.UserInfo.Birth,
Email: req.UserInfo.Email,
Ex: req.UserInfo.Ex,
},
OperationID: req.OperationID,
OpUserID: req.OpUserID,
})
if err != nil {
2022-08-16 12:57:20 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "UpdateOrganizationUser failed", err.Error())
2022-08-16 11:49:20 +08:00
} else {
2022-08-16 14:15:51 +08:00
if out.ErrCode != 0 {
2022-08-16 11:49:20 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "grpc resp: ", out)
}
}
2021-12-27 16:48:05 +08:00
return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{}}, nil
}
2022-06-16 19:33:35 +08:00
func (s *userServer) SetGlobalRecvMessageOpt(ctx context.Context, req *pbUser.SetGlobalRecvMessageOptReq) (*pbUser.SetGlobalRecvMessageOptResp, error) {
log.NewInfo(req.OperationID, "SetGlobalRecvMessageOpt args ", req.String())
2022-01-24 01:40:49 +08:00
2022-06-16 19:33:35 +08:00
var user db.User
user.UserID = req.UserID
m := make(map[string]interface{}, 1)
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), req.GlobalRecvMsgOpt, "set GlobalRecvMsgOpt")
m["global_recv_msg_opt"] = req.GlobalRecvMsgOpt
err := db.DB.SetUserGlobalMsgRecvOpt(user.UserID, req.GlobalRecvMsgOpt)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetGlobalRecvMessageOpt failed ", err.Error(), user)
return &pbUser.SetGlobalRecvMessageOptResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
}
err = imdb.UpdateUserInfoByMap(user, m)
if err != nil {
log.NewError(req.OperationID, "SetGlobalRecvMessageOpt failed ", err.Error(), user)
return &pbUser.SetGlobalRecvMessageOptResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
}
2022-08-11 20:04:15 +08:00
if err := rocksCache.DelUserInfoFromCache(user.UserID); err != nil {
log.NewError(req.OperationID, "DelUserInfoFromCache failed ", err.Error(), req.String())
return &pbUser.SetGlobalRecvMessageOptResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: err.Error()}}, nil
}
2022-06-16 19:33:35 +08:00
chat.UserInfoUpdatedNotification(req.OperationID, req.UserID, req.UserID)
return &pbUser.SetGlobalRecvMessageOptResp{CommonResp: &pbUser.CommonResp{}}, nil
}
2022-05-12 18:00:23 +08:00
func (s *userServer) SyncJoinedGroupMemberFaceURL(userID string, faceURL string, operationID string, opUserID string) {
2022-07-14 12:08:28 +08:00
joinedGroupIDList, err := rocksCache.GetJoinedGroupIDListFromCache(userID)
2022-05-12 18:00:23 +08:00
if err != nil {
log.NewWarn(operationID, "GetJoinedGroupIDListByUserID failed ", userID, err.Error())
return
}
2022-07-14 12:08:28 +08:00
for _, groupID := range joinedGroupIDList {
groupMemberInfo := db.GroupMember{UserID: userID, GroupID: groupID, FaceURL: faceURL}
if err := imdb.UpdateGroupMemberInfo(groupMemberInfo); err != nil {
log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), groupMemberInfo)
continue
}
2022-08-04 17:20:33 +08:00
//if err := rocksCache.DelAllGroupMembersInfoFromCache(groupID); err != nil {
// log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), groupID)
// continue
//}
if err := rocksCache.DelGroupMemberInfoFromCache(groupID, userID); err != nil {
log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), groupID, userID)
2022-07-14 12:08:28 +08:00
continue
}
chat.GroupMemberInfoSetNotification(operationID, opUserID, groupID, userID)
2022-05-12 18:00:23 +08:00
}
}
func (s *userServer) SyncJoinedGroupMemberNickname(userID string, newNickname, oldNickname string, operationID string, opUserID string) {
joinedGroupIDList, err := imdb.GetJoinedGroupIDListByUserID(userID)
if err != nil {
log.NewWarn(operationID, "GetJoinedGroupIDListByUserID failed ", userID, err.Error())
return
}
for _, v := range joinedGroupIDList {
member, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(v, userID)
if err != nil {
log.NewWarn(operationID, "GetGroupMemberInfoByGroupIDAndUserID failed ", err.Error(), v, userID)
continue
}
if member.Nickname == oldNickname {
groupMemberInfo := db.GroupMember{UserID: userID, GroupID: v, Nickname: newNickname}
if err := imdb.UpdateGroupMemberInfo(groupMemberInfo); err != nil {
log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), groupMemberInfo)
continue
}
2022-08-04 17:20:33 +08:00
//if err := rocksCache.DelAllGroupMembersInfoFromCache(v); err != nil {
// log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), v)
// continue
//}
if err := rocksCache.DelGroupMemberInfoFromCache(v, userID); err != nil {
log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), v)
}
chat.GroupMemberInfoSetNotification(operationID, opUserID, v, userID)
}
}
}
2022-02-08 20:24:59 +08:00
func (s *userServer) GetUsersByName(ctx context.Context, req *pbUser.GetUsersByNameReq) (*pbUser.GetUsersByNameResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req.String())
resp := &pbUser.GetUsersByNameResp{}
users, err := imdb.GetUserByName(req.UserName, req.Pagination.ShowNumber, req.Pagination.PageNumber)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUserByName failed", err.Error())
2022-02-12 17:13:31 +08:00
return resp, errors.WrapError(constant.ErrDB)
2022-02-08 20:24:59 +08:00
}
for _, user := range users {
isBlock, err := imdb.UserIsBlock(user.UserID)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error())
continue
}
resp.Users = append(resp.Users, &pbUser.User{
2022-08-07 22:37:27 +08:00
ProfilePhoto: user.FaceURL,
Nickname: user.Nickname,
UserId: user.UserID,
CreateTime: user.CreateTime.Format("2006-01-02 15:04:05"),
CreateIp: user.CreateIp,
IsBlock: isBlock,
Birth: user.Birth.Format("2006-01-02"),
PhoneNumber: user.PhoneNumber,
Email: user.Email,
LastLoginIp: user.LastLoginIp,
LastLoginTime: user.LastLoginTime.Format("2006-01-02 15:04:05"),
LoginTimes: user.LoginTimes,
Gender: user.Gender,
LoginLimit: user.LoginLimit,
2022-02-08 20:24:59 +08:00
})
}
2022-02-14 00:02:15 +08:00
user := db.User{Nickname: req.UserName}
2022-02-08 20:24:59 +08:00
userNums, err := imdb.GetUsersCount(user)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "", err.Error())
2022-02-12 17:13:31 +08:00
return resp, errors.WrapError(constant.ErrDB)
2022-02-08 20:24:59 +08:00
}
resp.UserNums = userNums
resp.Pagination = &sdkws.ResponsePagination{
CurrentPage: req.Pagination.PageNumber,
ShowNumber: req.Pagination.ShowNumber,
}
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
2022-02-12 17:13:31 +08:00
return resp, nil
2022-02-08 20:24:59 +08:00
}
2022-02-07 08:44:21 +08:00
func (s *userServer) GetUserById(ctx context.Context, req *pbUser.GetUserByIdReq) (*pbUser.GetUserByIdResp, error) {
2022-02-08 20:24:59 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req.String())
2022-02-07 08:44:21 +08:00
resp := &pbUser.GetUserByIdResp{User: &pbUser.User{}}
2022-01-24 01:40:49 +08:00
user, err := imdb.GetUserByUserID(req.UserId)
if err != nil {
2022-02-12 17:13:31 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
return resp, errors.WrapError(constant.ErrDB)
2022-01-24 01:40:49 +08:00
}
2022-01-27 18:31:31 +08:00
isBlock, err := imdb.UserIsBlock(req.UserId)
if err != nil {
2022-02-12 17:13:31 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "req", req.String())
return resp, errors.WrapError(constant.ErrDB)
2022-01-27 18:31:31 +08:00
}
2022-01-25 19:18:04 +08:00
resp.User = &pbUser.User{
2022-08-07 22:37:27 +08:00
ProfilePhoto: user.FaceURL,
Nickname: user.Nickname,
UserId: user.UserID,
CreateTime: user.CreateTime.Format("2006-01-02 15:04:05"),
CreateIp: user.CreateIp,
IsBlock: isBlock,
Birth: user.Birth.Format("2006-01-02"),
PhoneNumber: user.PhoneNumber,
Email: user.Email,
LastLoginIp: user.LastLoginIp,
LastLoginTime: user.LastLoginTime.Format("2006-01-02 15:04:05"),
LoginTimes: user.LoginTimes,
Gender: user.Gender,
LoginLimit: user.LoginLimit,
2022-01-25 19:18:04 +08:00
}
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String())
2022-01-24 01:40:49 +08:00
return resp, nil
}
func (s *userServer) GetUsers(ctx context.Context, req *pbUser.GetUsersReq) (*pbUser.GetUsersResp, error) {
2022-02-12 17:13:31 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
2022-01-27 01:08:02 +08:00
resp := &pbUser.GetUsersResp{User: []*pbUser.User{}}
2022-01-24 01:40:49 +08:00
users, err := imdb.GetUsers(req.Pagination.ShowNumber, req.Pagination.PageNumber)
if err != nil {
2022-05-10 10:44:43 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUsers failed", err.Error())
2022-02-12 17:13:31 +08:00
return resp, errors.WrapError(constant.ErrDB)
2022-01-24 01:40:49 +08:00
}
2022-08-19 21:37:39 +08:00
2022-01-24 01:40:49 +08:00
for _, v := range users {
2022-01-25 19:18:04 +08:00
isBlock, err := imdb.UserIsBlock(v.UserID)
if err == nil {
2022-08-19 21:37:39 +08:00
registerIP := ""
registerInfo, err := imdb.GetRegisterInfo(v.UserID)
if registerInfo != nil && err == nil {
registerIP = registerInfo.RegisterIP
}
2022-01-25 19:18:04 +08:00
user := &pbUser.User{
2022-08-07 22:37:27 +08:00
ProfilePhoto: v.FaceURL,
UserId: v.UserID,
CreateTime: v.CreateTime.Format("2006-01-02 15:04:05"),
CreateIp: v.CreateIp,
Nickname: v.Nickname,
Birth: v.Birth.Format("2006-01-02"),
PhoneNumber: v.PhoneNumber,
Email: v.Email,
IsBlock: isBlock,
LastLoginIp: v.LastLoginIp,
LastLoginTime: v.LastLoginTime.Format("2006-01-02 15:04:05"),
LoginTimes: v.LoginTimes,
Gender: v.Gender,
LoginLimit: v.LoginLimit,
2022-08-19 21:37:39 +08:00
RegisterIp: registerIP,
2022-01-25 19:18:04 +08:00
}
resp.User = append(resp.User, user)
2022-05-10 10:44:43 +08:00
} else {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "UserIsBlock failed", err.Error())
2022-01-25 19:18:04 +08:00
}
2022-01-24 01:40:49 +08:00
}
2022-02-14 00:02:15 +08:00
user := db.User{}
2022-02-08 20:24:59 +08:00
nums, err := imdb.GetUsersCount(user)
if err != nil {
2022-05-10 10:44:43 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetUsersCount failed", err.Error(), user)
2022-02-12 17:13:31 +08:00
return resp, errors.WrapError(constant.ErrDB)
2022-02-08 20:24:59 +08:00
}
resp.UserNums = nums
2022-02-14 00:02:15 +08:00
resp.Pagination = &sdkws.ResponsePagination{ShowNumber: req.Pagination.ShowNumber, CurrentPage: req.Pagination.PageNumber}
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String())
2022-01-24 01:40:49 +08:00
return resp, nil
}
func (s *userServer) ResignUser(ctx context.Context, req *pbUser.ResignUserReq) (*pbUser.ResignUserResp, error) {
log.NewInfo(req.OperationID, "ResignUser args ", req.String())
return &pbUser.ResignUserResp{}, nil
}
func (s *userServer) AlterUser(ctx context.Context, req *pbUser.AlterUserReq) (*pbUser.AlterUserResp, error) {
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
2022-01-27 01:08:02 +08:00
resp := &pbUser.AlterUserResp{}
2022-08-14 22:53:41 +08:00
birth, _ := time.ParseInLocation("2006-01-02", req.Birth, time.Local)
gender, gendererr := strconv.Atoi(req.Gender)
if gendererr != nil {
gender = 0
}
2022-02-14 00:02:15 +08:00
user := db.User{
2022-08-14 22:53:41 +08:00
PhoneNumber: req.PhoneNumber,
2022-01-27 01:08:02 +08:00
Nickname: req.Nickname,
Email: req.Email,
UserID: req.UserId,
2022-08-14 22:53:41 +08:00
Gender: int32(gender),
FaceURL: req.Photo,
Birth: birth,
2022-01-27 01:08:02 +08:00
}
if err := imdb.UpdateUserInfo(user); err != nil {
2022-02-12 17:13:31 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "UpdateUserInfo", err.Error())
return resp, errors.WrapError(constant.ErrDB)
2022-01-27 01:08:02 +08:00
}
2022-02-17 19:35:17 +08:00
chat.UserInfoUpdatedNotification(req.OperationID, req.UserId, req.OpUserId)
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String())
2022-01-27 01:08:02 +08:00
return resp, nil
2022-01-24 01:40:49 +08:00
}
func (s *userServer) AddUser(ctx context.Context, req *pbUser.AddUserReq) (*pbUser.AddUserResp, error) {
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
2022-01-25 19:18:04 +08:00
resp := &pbUser.AddUserResp{}
2022-08-14 22:53:41 +08:00
err := imdb.AddUser(req.UserId, req.PhoneNumber, req.Name, req.Email, req.Gender, req.Photo, req.Birth)
2022-01-25 19:18:04 +08:00
if err != nil {
2022-02-12 17:13:31 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "AddUser", err.Error())
return resp, errors.WrapError(constant.ErrDB)
2022-01-25 19:18:04 +08:00
}
return resp, nil
2022-01-24 01:40:49 +08:00
}
func (s *userServer) BlockUser(ctx context.Context, req *pbUser.BlockUserReq) (*pbUser.BlockUserResp, error) {
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
2022-01-25 19:18:04 +08:00
resp := &pbUser.BlockUserResp{}
err := imdb.BlockUser(req.UserId, req.EndDisableTime)
if err != nil {
2022-02-12 17:13:31 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "BlockUser", err.Error())
return resp, errors.WrapError(constant.ErrDB)
2022-01-25 19:18:04 +08:00
}
return resp, nil
2022-01-24 01:40:49 +08:00
}
func (s *userServer) UnBlockUser(ctx context.Context, req *pbUser.UnBlockUserReq) (*pbUser.UnBlockUserResp, error) {
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
2022-01-25 19:18:04 +08:00
resp := &pbUser.UnBlockUserResp{}
err := imdb.UnBlockUser(req.UserId)
if err != nil {
2022-02-12 17:13:31 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "unBlockUser", err.Error())
return resp, errors.WrapError(constant.ErrDB)
2022-01-25 19:18:04 +08:00
}
return resp, nil
2022-01-24 01:40:49 +08:00
}
func (s *userServer) GetBlockUsers(ctx context.Context, req *pbUser.GetBlockUsersReq) (*pbUser.GetBlockUsersResp, error) {
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
2022-01-25 19:18:04 +08:00
resp := &pbUser.GetBlockUsersResp{}
2022-01-26 18:43:01 +08:00
blockUsers, err := imdb.GetBlockUsers(req.Pagination.ShowNumber, req.Pagination.PageNumber)
2022-01-25 19:18:04 +08:00
if err != nil {
2022-02-12 17:13:31 +08:00
log.Error(req.OperationID, utils.GetSelfFuncName(), "GetBlockUsers", err.Error())
return resp, errors.WrapError(constant.ErrDB)
2022-01-25 19:18:04 +08:00
}
for _, v := range blockUsers {
2022-01-26 18:43:01 +08:00
resp.BlockUsers = append(resp.BlockUsers, &pbUser.BlockUser{
User: &pbUser.User{
ProfilePhoto: v.User.FaceURL,
Nickname: v.User.Nickname,
UserId: v.User.UserID,
IsBlock: true,
2022-08-15 20:33:09 +08:00
Birth: v.User.Birth.Format("2006-01-02"),
PhoneNumber: v.User.PhoneNumber,
Email: v.User.Email,
Gender: v.User.Gender,
2022-01-26 18:43:01 +08:00
},
BeginDisableTime: (v.BeginDisableTime).String(),
2022-01-27 01:08:02 +08:00
EndDisableTime: (v.EndDisableTime).String(),
2022-01-25 19:18:04 +08:00
})
}
resp.Pagination = &sdkws.ResponsePagination{}
resp.Pagination.ShowNumber = req.Pagination.ShowNumber
resp.Pagination.CurrentPage = req.Pagination.PageNumber
2022-02-08 20:24:59 +08:00
nums, err := imdb.GetBlockUsersNumCount()
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetBlockUsersNumCount failed", err.Error())
2022-02-12 17:13:31 +08:00
return resp, errors.WrapError(constant.ErrDB)
2022-02-08 20:24:59 +08:00
}
resp.UserNums = nums
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
2022-01-25 19:18:04 +08:00
return resp, nil
2022-01-24 01:40:49 +08:00
}
2022-01-26 18:43:01 +08:00
2022-02-07 08:44:21 +08:00
func (s *userServer) GetBlockUserById(_ context.Context, req *pbUser.GetBlockUserByIdReq) (*pbUser.GetBlockUserByIdResp, error) {
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
2022-02-07 08:44:21 +08:00
resp := &pbUser.GetBlockUserByIdResp{}
2022-01-27 01:08:02 +08:00
user, err := imdb.GetBlockUserById(req.UserId)
if err != nil {
2022-02-12 17:13:31 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetBlockUserById", err)
return resp, errors.WrapError(constant.ErrDB)
2022-01-26 18:43:01 +08:00
}
2022-02-07 08:44:21 +08:00
resp.BlockUser = &pbUser.BlockUser{
User: &pbUser.User{
ProfilePhoto: user.User.FaceURL,
Nickname: user.User.Nickname,
UserId: user.User.UserID,
IsBlock: true,
2022-08-15 20:33:09 +08:00
Birth: user.User.Birth.Format("2006-01-02"),
PhoneNumber: user.User.PhoneNumber,
Email: user.User.Email,
Gender: user.User.Gender,
2022-02-07 08:44:21 +08:00
},
BeginDisableTime: (user.BeginDisableTime).String(),
EndDisableTime: (user.EndDisableTime).String(),
}
2022-05-10 10:44:43 +08:00
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", req.String())
2022-01-26 18:43:01 +08:00
return resp, nil
2022-02-07 08:44:21 +08:00
}
2022-01-26 18:43:01 +08:00
2022-02-07 08:44:21 +08:00
func (s *userServer) DeleteUser(_ context.Context, req *pbUser.DeleteUserReq) (*pbUser.DeleteUserResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), req.String())
resp := &pbUser.DeleteUserResp{}
if row := imdb.DeleteUser(req.UserId); row == 0 {
2022-02-08 20:24:59 +08:00
log.NewError(req.OperationID, utils.GetSelfFuncName(), "delete failed", "delete rows:", row)
2022-02-12 17:13:31 +08:00
return resp, errors.WrapError(constant.ErrDB)
2022-02-07 08:44:21 +08:00
}
return resp, nil
2022-01-27 01:08:02 +08:00
}