Merge remote-tracking branch 'origin/errcode' into errcode

test-errcode
withchao 2 years ago
commit 56a89ad33b

@ -4,9 +4,8 @@ import (
chat "Open_IM/internal/rpc/msg" chat "Open_IM/internal/rpc/msg"
"Open_IM/pkg/common/config" "Open_IM/pkg/common/config"
"Open_IM/pkg/common/constant" "Open_IM/pkg/common/constant"
"Open_IM/pkg/common/db" "Open_IM/pkg/common/db/controller"
imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model" "Open_IM/pkg/common/db/relation"
rocksCache "Open_IM/pkg/common/db/rocks_cache"
"Open_IM/pkg/common/log" "Open_IM/pkg/common/log"
promePkg "Open_IM/pkg/common/prometheus" promePkg "Open_IM/pkg/common/prometheus"
"Open_IM/pkg/common/token_verify" "Open_IM/pkg/common/token_verify"
@ -24,6 +23,7 @@ import (
grpcPrometheus "github.com/grpc-ecosystem/go-grpc-prometheus" grpcPrometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
utils2 "Open_IM/internal/utils"
"google.golang.org/grpc" "google.golang.org/grpc"
"gorm.io/gorm" "gorm.io/gorm"
) )
@ -33,16 +33,31 @@ type userServer struct {
rpcRegisterName string rpcRegisterName string
etcdSchema string etcdSchema string
etcdAddr []string etcdAddr []string
controller.UserInterface
} }
func NewUserServer(port int) *userServer { func NewUserServer(port int) *userServer {
log.NewPrivateLog(constant.LogFileName) log.NewPrivateLog(constant.LogFileName)
return &userServer{ u := userServer{
rpcPort: port, rpcPort: port,
rpcRegisterName: config.Config.RpcRegisterName.OpenImUserName, rpcRegisterName: config.Config.RpcRegisterName.OpenImUserName,
etcdSchema: config.Config.Etcd.EtcdSchema, etcdSchema: config.Config.Etcd.EtcdSchema,
etcdAddr: config.Config.Etcd.EtcdAddr, etcdAddr: config.Config.Etcd.EtcdAddr,
} }
//mysql init
var mysql relation.Mysql
var model relation.User
err := mysql.InitConn().AutoMigrateModel(&model)
if err != nil {
panic("db init err:" + err.Error())
}
if mysql.GormConn() != nil {
model.DB = mysql.GormConn()
} else {
panic("db init err:" + "conn is nil")
}
u.UserInterface = controller.NewUserController(model.DB)
return &u
} }
func (s *userServer) Run() { func (s *userServer) Run() {
@ -124,25 +139,19 @@ func syncPeerUserConversation(conversation *pbConversation.Conversation, operati
} }
func (s *userServer) GetUserInfo(ctx context.Context, req *pbUser.GetUserInfoReq) (*pbUser.GetUserInfoResp, error) { func (s *userServer) GetUserInfo(ctx context.Context, req *pbUser.GetUserInfoReq) (*pbUser.GetUserInfoResp, error) {
log.NewInfo(req.OperationID, "GetUserInfo args ", req.String()) resp := &pbUser.GetUserInfoResp{}
var userInfoList []*sdkws.UserInfo users, err := s.Find(ctx, req.UserIDList)
if len(req.UserIDList) > 0 { if err != nil {
for _, userID := range req.UserIDList { return nil, err
var userInfo sdkws.UserInfo }
user, err := rocksCache.GetUserInfoFromCache(userID) for _, v := range users {
if err != nil { n, err := utils2.NewDBUser(v).Convert()
log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), userID) if err != nil {
continue return nil, err
}
utils.CopyStructFields(&userInfo, user)
userInfo.BirthStr = utils.TimeToString(user.Birth)
userInfoList = append(userInfoList, &userInfo)
} }
} else { resp.UserInfoList = append(resp.UserInfoList, n)
return &pbUser.GetUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrArgs.ErrCode, ErrMsg: constant.ErrArgs.ErrMsg}}, nil
} }
log.NewInfo(req.OperationID, "GetUserInfo rpc return ", pbUser.GetUserInfoResp{CommonResp: &pbUser.CommonResp{}, UserInfoList: userInfoList}) return resp, nil
return &pbUser.GetUserInfoResp{CommonResp: &pbUser.CommonResp{}, UserInfoList: userInfoList}, nil
} }
func (s *userServer) BatchSetConversations(ctx context.Context, req *pbUser.BatchSetConversationsReq) (*pbUser.BatchSetConversationsResp, error) { func (s *userServer) BatchSetConversations(ctx context.Context, req *pbUser.BatchSetConversationsReq) (*pbUser.BatchSetConversationsResp, error) {
@ -395,41 +404,32 @@ func (s *userServer) AccountCheck(_ context.Context, req *pbUser.AccountCheckReq
} }
func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserInfoReq) (*pbUser.UpdateUserInfoResp, error) { func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserInfoReq) (*pbUser.UpdateUserInfoResp, error) {
log.NewInfo(req.OperationID, "UpdateUserInfo args ", req.String()) resp := pbUser.UpdateUserInfoResp{}
if !token_verify.CheckAccess(req.OpUserID, req.UserInfo.UserID) { err := token_verify.CheckAccessV3(ctx, req.UserInfo.UserID)
log.NewError(req.OperationID, "CheckAccess false ", req.OpUserID, req.UserInfo.UserID) if err != nil {
return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil return nil, err
} }
oldNickname := "" oldNickname := ""
if req.UserInfo.Nickname != "" { if req.UserInfo.Nickname != "" {
u, err := imdb.GetUserByUserID(req.UserInfo.UserID) u, err := s.Take(ctx, req.UserInfo.UserID)
if err == nil {
oldNickname = u.Nickname
}
}
var user imdb.User
utils.CopyStructFields(&user, req.UserInfo)
if req.UserInfo.BirthStr != "" {
time, err := utils.TimeStringToTime(req.UserInfo.BirthStr)
if err != nil { if err != nil {
log.NewError(req.OperationID, "TimeStringToTime failed ", err.Error(), req.UserInfo.BirthStr) return nil, err
return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrArgs.ErrCode, ErrMsg: "TimeStringToTime failed:" + err.Error()}}, nil
} }
user.Birth = time oldNickname = u.Nickname
} }
err := imdb.UpdateUserInfo(user) user, err := utils2.NewPBUser(req.UserInfo).Convert()
if err != nil { if err != nil {
log.NewError(req.OperationID, "UpdateUserInfo failed ", err.Error(), user) return nil, err
return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
} }
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName, req.OperationID) err = s.Update(ctx, []*relation.User{user})
if etcdConn == nil { if err != nil {
errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil" return nil, err
log.NewError(req.OperationID, errMsg) }
return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrInternal.ErrCode, ErrMsg: errMsg}}, nil etcdConn, err := getcdv3.GetConn(ctx, config.Config.RpcRegisterName.OpenImFriendName)
if err != nil {
return nil, err
} }
client := pbFriend.NewFriendClient(etcdConn) client := pbFriend.NewFriendClient(etcdConn)
@ -644,84 +644,3 @@ func (s *userServer) AddUser(ctx context.Context, req *pbUser.AddUserReq) (*pbUs
} }
return resp, nil return resp, nil
} }
func (s *userServer) BlockUser(ctx context.Context, req *pbUser.BlockUserReq) (*pbUser.BlockUserResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
resp := &pbUser.BlockUserResp{CommonResp: &pbUser.CommonResp{}}
err := imdb.BlockUser(req.UserID, req.EndDisableTime)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "BlockUser", err.Error(), req.UserID, req.EndDisableTime)
resp.CommonResp.ErrCode = constant.ErrDB.ErrCode
resp.CommonResp.ErrMsg = err.Error()
return resp, nil
}
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String())
return resp, nil
}
func (s *userServer) UnBlockUser(ctx context.Context, req *pbUser.UnBlockUserReq) (*pbUser.UnBlockUserResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
resp := &pbUser.UnBlockUserResp{CommonResp: &pbUser.CommonResp{}}
err := imdb.UnBlockUser(req.UserID)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "unBlockUser", err.Error())
resp.CommonResp.ErrCode = constant.ErrDB.ErrCode
resp.CommonResp.ErrMsg = err.Error()
return resp, nil
}
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String())
return resp, nil
}
func (s *userServer) GetBlockUsers(ctx context.Context, req *pbUser.GetBlockUsersReq) (resp *pbUser.GetBlockUsersResp, err error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
resp = &pbUser.GetBlockUsersResp{CommonResp: &pbUser.CommonResp{}, Pagination: &sdkws.ResponsePagination{ShowNumber: req.Pagination.ShowNumber, CurrentPage: req.Pagination.PageNumber}}
var blockUsers []imdb.BlockUserInfo
if req.UserID != "" {
blockUser, err := imdb.GetBlockUserByID(req.UserID)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return resp, nil
}
log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), req.UserID)
resp.CommonResp.ErrCode = constant.ErrDB.ErrCode
resp.CommonResp.ErrMsg = err.Error()
return resp, nil
}
blockUsers = append(blockUsers, blockUser)
resp.UserNums = 1
} else {
blockUsers, err = imdb.GetBlockUsers(req.Pagination.ShowNumber, req.Pagination.PageNumber)
if err != nil {
log.Error(req.OperationID, utils.GetSelfFuncName(), "GetBlockUsers", err.Error(), req.Pagination.ShowNumber, req.Pagination.PageNumber)
resp.CommonResp.ErrCode = constant.ErrDB.ErrCode
resp.CommonResp.ErrMsg = err.Error()
return resp, nil
}
nums, err := imdb.GetBlockUsersNumCount()
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetBlockUsersNumCount failed", err.Error())
resp.CommonResp.ErrCode = constant.ErrDB.ErrCode
resp.CommonResp.ErrMsg = err.Error()
return resp, nil
}
resp.UserNums = nums
}
for _, v := range blockUsers {
resp.BlockUsers = append(resp.BlockUsers, &pbUser.BlockUser{
UserInfo: &sdkws.UserInfo{
FaceURL: v.User.FaceURL,
Nickname: v.User.Nickname,
UserID: v.User.UserID,
PhoneNumber: v.User.PhoneNumber,
Email: v.User.Email,
Gender: v.User.Gender,
},
BeginDisableTime: (v.BeginDisableTime).String(),
EndDisableTime: (v.EndDisableTime).String(),
})
}
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
return resp, nil
}

@ -1,24 +1,69 @@
package controller package controller
import ( import (
"Open_IM/pkg/common/db/mysql" "Open_IM/pkg/common/db/relation"
"context" "context"
"gorm.io/gorm"
) )
type UserModel struct { type UserInterface interface {
db *relation.User Find(ctx context.Context, userIDs []string) (users []*relation.User, err error)
Create(ctx context.Context, users []*relation.User) error
Take(ctx context.Context, userID string) (user *relation.User, err error)
Update(ctx context.Context, users []*relation.User) (err error)
} }
func NewGroupUser(ctx context.Context) *UserModel { type UserController struct {
var userModel UserModel database UserDatabaseInterface
userModel.db = relation.NewUserDB()
return &userModel
} }
func (u *UserModel) Find(ctx context.Context, userIDs []string) (users []*relation.User, err error) { func (u *UserController) Find(ctx context.Context, userIDs []string) (users []*relation.User, err error) {
return u.db.Find(ctx, userIDs) return u.database.Find(ctx, userIDs)
}
func (u *UserController) Create(ctx context.Context, users []*relation.User) error {
return u.database.Create(ctx, users)
}
func (u *UserController) Take(ctx context.Context, userID string) (user *relation.User, err error) {
return u.database.Take(ctx, userID)
}
func (u *UserController) Update(ctx context.Context, users []*relation.User) (err error) {
return u.database.Update(ctx, users)
}
func NewUserController(db *gorm.DB) UserInterface {
controller := &UserController{database: newUserDatabase(db)}
return controller
}
type UserDatabaseInterface interface {
Find(ctx context.Context, userIDs []string) (users []*relation.User, err error)
Create(ctx context.Context, users []*relation.User) error
Take(ctx context.Context, userID string) (user *relation.User, err error)
Update(ctx context.Context, users []*relation.User) (err error)
} }
func (u *UserModel) Create(ctx context.Context, users []*relation.User) error { type UserDatabase struct {
return u.db.Create(ctx, users) sqlDB *relation.User
}
func newUserDatabase(db *gorm.DB) UserDatabaseInterface {
sqlDB := relation.NewUserDB(db)
database := &UserDatabase{
sqlDB: sqlDB,
}
return database
}
func (u *UserDatabase) Find(ctx context.Context, userIDs []string) (users []*relation.User, err error) {
return u.sqlDB.Find(ctx, userIDs)
}
func (u *UserDatabase) Create(ctx context.Context, users []*relation.User) error {
return u.sqlDB.Create(ctx, users)
}
func (u *UserDatabase) Take(ctx context.Context, userID string) (user *relation.User, err error) {
return u.sqlDB.Take(ctx, userID)
}
func (u *UserDatabase) Update(ctx context.Context, users []*relation.User) (err error) {
return u.sqlDB.Update(ctx, users)
} }

@ -25,9 +25,9 @@ type User struct {
DB *gorm.DB `gorm:"-" json:"-"` DB *gorm.DB `gorm:"-" json:"-"`
} }
func NewUserDB() *User { func NewUserDB(db *gorm.DB) *User {
var user User var user User
user.DB = initMysqlDB(&user) user.DB = db
return &user return &user
} }

@ -4,66 +4,48 @@ import "Open-IM-Server/pkg/proto/conversation/conversation.proto";
option go_package = "Open_IM/pkg/proto/user;user"; option go_package = "Open_IM/pkg/proto/user;user";
package user; package user;
message CommonResp{
int32 errCode = 1;
string errMsg = 2;
}
message GetAllUserIDReq{ message GetAllUserIDReq{
string opUserID = 1; server_api_params.RequestPagination pagination = 1;
string operationID = 2;
} }
message GetAllUserIDResp{ message GetAllUserIDResp{
CommonResp CommonResp = 1; int32 total = 1;
repeated string UserIDList = 2; repeated string UserIDList = 2;
} }
message AccountCheckReq{ message AccountCheckReq{
repeated string CheckUserIDList = 1; repeated string checkUserIDs = 1;
string OpUserID = 2;
string OperationID = 3;
} }
message AccountCheckResp{ message AccountCheckResp{
CommonResp commonResp = 1;
message SingleUserStatus { message SingleUserStatus {
string userID = 1; string userID = 1;
string accountStatus = 2; string accountStatus = 2;
} }
repeated SingleUserStatus ResultList = 2; repeated SingleUserStatus results = 1;
} }
message GetUserInfoReq{ message GetUsersInfoReq{
repeated string userIDList = 1; repeated string userIDs = 1;
string OpUserID = 2;
string OperationID = 3;
} }
message GetUserInfoResp{ message GetUsersInfoResp{
CommonResp commonResp = 1; repeated server_api_params.UserInfo usersInfo = 1;
repeated server_api_params.UserInfo UserInfoList = 3;
} }
message UpdateUserInfoReq{ message UpdateUserInfoReq{
server_api_params.UserInfo UserInfo = 1; server_api_params.UserInfo userInfo = 1;
string OpUserID = 2;
string operationID = 3;
} }
message UpdateUserInfoResp{ message UpdateUserInfoResp{
CommonResp commonResp = 1;
} }
message SetGlobalRecvMessageOptReq{ message SetGlobalRecvMessageOptReq{
string userID = 1; string userID = 1;
string operationID = 2;
int32 globalRecvMsgOpt = 3; int32 globalRecvMsgOpt = 3;
} }
message SetGlobalRecvMessageOptResp{ message SetGlobalRecvMessageOptResp{
CommonResp commonResp = 1;
} }
message SetConversationReq{ message SetConversationReq{
@ -73,7 +55,7 @@ message SetConversationReq{
} }
message SetConversationResp{ message SetConversationResp{
CommonResp commonResp = 1;
} }
message SetRecvMsgOptReq { message SetRecvMsgOptReq {
@ -85,7 +67,7 @@ message SetRecvMsgOptReq {
} }
message SetRecvMsgOptResp { message SetRecvMsgOptResp {
CommonResp commonResp = 1;
} }
message GetConversationReq{ message GetConversationReq{
@ -95,7 +77,6 @@ message GetConversationReq{
} }
message GetConversationResp{ message GetConversationResp{
CommonResp commonResp = 1;
conversation.Conversation Conversation = 2; conversation.Conversation Conversation = 2;
} }
@ -106,7 +87,6 @@ message GetConversationsReq{
} }
message GetConversationsResp{ message GetConversationsResp{
CommonResp commonResp = 1;
repeated conversation.Conversation Conversations = 2; repeated conversation.Conversation Conversations = 2;
} }
@ -116,7 +96,6 @@ message GetAllConversationsReq{
} }
message GetAllConversationsResp{ message GetAllConversationsResp{
CommonResp commonResp = 1;
repeated conversation.Conversation Conversations = 2; repeated conversation.Conversation Conversations = 2;
} }
@ -128,30 +107,21 @@ message BatchSetConversationsReq{
} }
message BatchSetConversationsResp{ message BatchSetConversationsResp{
CommonResp commonResp = 1;
repeated string Success = 2; repeated string Success = 2;
repeated string Failed = 3; repeated string Failed = 3;
} }
message GetUsersReq { message GetUsersReq {
string operationID = 1;
server_api_params.RequestPagination pagination = 2; server_api_params.RequestPagination pagination = 2;
string userName = 3; string userName = 3;
string userID = 4; string userID = 4;
string content = 5; string content = 5;
} }
message CmsUser {
server_api_params.UserInfo user = 1;
bool isBlock = 2;
}
message GetUsersResp{ message GetUsersResp{
CommonResp commonResp = 1; int32 total = 1;
repeated CmsUser userList = 2; repeated server_api_params.UserInfo users = 2;
server_api_params.ResponsePagination Pagination = 3;
int32 totalNums = 4;
} }
message AddUserReq{ message AddUserReq{
@ -160,7 +130,6 @@ message AddUserReq{
} }
message AddUserResp{ message AddUserResp{
CommonResp CommonResp = 1;
} }
@ -199,7 +168,6 @@ message BlockUser {
} }
message GetBlockUsersResp{ message GetBlockUsersResp{
CommonResp CommonResp = 1;
repeated BlockUser BlockUsers = 2; repeated BlockUser BlockUsers = 2;
server_api_params.ResponsePagination Pagination = 3; server_api_params.ResponsePagination Pagination = 3;
int32 UserNums = 4; int32 UserNums = 4;
@ -207,26 +175,15 @@ message GetBlockUsersResp{
service user { service user {
rpc GetUserInfo(GetUserInfoReq) returns(GetUserInfoResp); //
rpc GetUsersInfo(GetUsersInfoReq) returns(GetUsersInfoResp);
//
rpc UpdateUserInfo(UpdateUserInfoReq) returns(UpdateUserInfoResp); rpc UpdateUserInfo(UpdateUserInfoReq) returns(UpdateUserInfoResp);
//
rpc SetGlobalRecvMessageOpt(SetGlobalRecvMessageOptReq) returns(SetGlobalRecvMessageOptResp); rpc SetGlobalRecvMessageOpt(SetGlobalRecvMessageOptReq) returns(SetGlobalRecvMessageOptResp);
rpc GetAllUserID(GetAllUserIDReq)returns(GetAllUserIDResp); //userID
rpc AccountCheck(AccountCheckReq)returns(AccountCheckResp); rpc AccountCheck(AccountCheckReq)returns(AccountCheckResp);
rpc GetConversation(GetConversationReq)returns(GetConversationResp); //userID
rpc GetAllConversations(GetAllConversationsReq)returns(GetAllConversationsResp);
rpc GetConversations(GetConversationsReq)returns(GetConversationsResp);
rpc BatchSetConversations(BatchSetConversationsReq)returns(BatchSetConversationsResp);
rpc SetConversation(SetConversationReq)returns(SetConversationResp);
rpc SetRecvMsgOpt(SetRecvMsgOptReq)returns(SetRecvMsgOptResp);
rpc GetUsers(GetUsersReq) returns (GetUsersResp); rpc GetUsers(GetUsersReq) returns (GetUsersResp);
rpc AddUser(AddUserReq) returns (AddUserResp);
rpc BlockUser(BlockUserReq) returns (BlockUserResp);
rpc UnBlockUser(UnBlockUserReq) returns (UnBlockUserResp);
rpc GetBlockUsers(GetBlockUsersReq) returns (GetBlockUsersResp);
} }

Loading…
Cancel
Save