diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index 2711c056c..906acceaf 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -1,6 +1,7 @@ package user import ( + "Open_IM/internal/common/convert" chat "Open_IM/internal/rpc/msg" "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" @@ -9,6 +10,7 @@ import ( "Open_IM/pkg/common/log" promePkg "Open_IM/pkg/common/prometheus" "Open_IM/pkg/common/token_verify" + "Open_IM/pkg/common/tracelog" "Open_IM/pkg/getcdv3" pbFriend "Open_IM/pkg/proto/friend" pbGroup "Open_IM/pkg/proto/group" @@ -171,7 +173,7 @@ func (s *userServer) GetUsersInfo(ctx context.Context, req *pbUser.GetUsersInfoR return nil, err } for _, v := range users { - n, err := utils.NewDBUser(v).Convert() + n, err := convert.NewDBUser(v).Convert() if err != nil { return nil, err } @@ -194,7 +196,7 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI } oldNickname = u.Nickname } - user, err := utils.NewPBUser(req.UserInfo).Convert() + user, err := convert.NewPBUser(req.UserInfo).Convert() if err != nil { return nil, err } @@ -207,23 +209,23 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI return nil, err } client := pbFriend.NewFriendClient(etcdConn) - newReq := &pbFriend.GetFriendListReq{UserID: req.UserInfo.UserID} - rpcResp, err := client.GetFriendList(context.Background(), newReq) + newReq := &pbFriend.GetFriendsReq{UserID: req.UserInfo.UserID} + rpcResp, err := client.GetFriends(context.Background(), newReq) if err != nil { return nil, err } go func() { - for _, v := range rpcResp.FriendInfoList { - chat.FriendInfoUpdatedNotification(utils.OperationID(ctx), req.UserInfo.UserID, v.FriendUser.UserID, utils.OpUserID(ctx)) + for _, v := range rpcResp.FriendsInfo { + chat.FriendInfoUpdatedNotification(tracelog.GetOperationID(ctx), req.UserInfo.UserID, v.FriendUser.UserID, tracelog.GetOpUserID(ctx)) } }() - chat.UserInfoUpdatedNotification(utils.OperationID(ctx), utils.OpUserID(ctx), req.UserInfo.UserID) + chat.UserInfoUpdatedNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), req.UserInfo.UserID) if req.UserInfo.FaceURL != "" { - s.SyncJoinedGroupMemberFaceURL(ctx, req.UserInfo.UserID, req.UserInfo.FaceURL, utils.OperationID(ctx), utils.OpUserID(ctx)) + s.SyncJoinedGroupMemberFaceURL(ctx, req.UserInfo.UserID, req.UserInfo.FaceURL, tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx)) } if req.UserInfo.Nickname != "" { - s.SyncJoinedGroupMemberNickname(ctx, req.UserInfo.UserID, req.UserInfo.Nickname, oldNickname, utils.OperationID(ctx), utils.OpUserID(ctx)) + s.SyncJoinedGroupMemberNickname(ctx, req.UserInfo.UserID, req.UserInfo.Nickname, oldNickname, tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx)) } return &resp, nil } @@ -236,13 +238,13 @@ func (s *userServer) SetGlobalRecvMessageOpt(ctx context.Context, req *pbUser.Se if err != nil { return nil, err } - chat.UserInfoUpdatedNotification(utils.OperationID(ctx), req.UserID, req.UserID) + chat.UserInfoUpdatedNotification(tracelog.GetOperationID(ctx), req.UserID, req.UserID) return &resp, nil } func (s *userServer) AccountCheck(ctx context.Context, req *pbUser.AccountCheckReq) (*pbUser.AccountCheckResp, error) { resp := pbUser.AccountCheckResp{} - err := token_verify.CheckManagerUserID(ctx, utils.OpUserID(ctx)) + err := token_verify.CheckManagerUserID(ctx, tracelog.GetOpUserID(ctx)) if err != nil { return nil, err } @@ -277,7 +279,7 @@ func (s *userServer) GetUsers(ctx context.Context, req *pbUser.GetUsersReq) (*pb return nil, err } resp.Total = 1 - u1, err := utils.NewDBUser(u).Convert() + u1, err := convert.NewDBUser(u).Convert() if err != nil { return nil, err } @@ -292,7 +294,7 @@ func (s *userServer) GetUsers(ctx context.Context, req *pbUser.GetUsersReq) (*pb } resp.Total = int32(total) for _, v := range usersDB { - u1, err := utils.NewDBUser(v).Convert() + u1, err := convert.NewDBUser(v).Convert() if err != nil { return nil, err } @@ -306,7 +308,7 @@ func (s *userServer) GetUsers(ctx context.Context, req *pbUser.GetUsersReq) (*pb } resp.Total = int32(total) for _, v := range usersDB { - u1, err := utils.NewDBUser(v).Convert() + u1, err := convert.NewDBUser(v).Convert() if err != nil { return nil, err } @@ -323,7 +325,7 @@ func (s *userServer) GetUsers(ctx context.Context, req *pbUser.GetUsersReq) (*pb resp.Total = int32(total) for _, userDB := range usersDB { - u, err := utils.NewDBUser(userDB).Convert() + u, err := convert.NewDBUser(userDB).Convert() if err != nil { return nil, err } diff --git a/pkg/common/db/controller/black.go b/pkg/common/db/controller/black.go index 9b45b577c..6ca049ef4 100644 --- a/pkg/common/db/controller/black.go +++ b/pkg/common/db/controller/black.go @@ -3,6 +3,7 @@ package controller import ( "Open_IM/pkg/common/db/relation" "context" + "errors" "gorm.io/gorm" ) @@ -12,9 +13,9 @@ type BlackInterface interface { // Delete 删除黑名单 Delete(ctx context.Context, blacks []*relation.Black) (err error) // FindOwnerBlacks 获取黑名单列表 - FindOwnerBlacks(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (blackList []*relation.Black, err error) + FindOwnerBlacks(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (blacks []*relation.Black, total int64, err error) // CheckIn 检查user2是否在user1的黑名单列表中(inUser1Blacks==true) 检查user1是否在user2的黑名单列表中(inUser2Blacks==true) - CheckIn(ctx context.Context, ownerUserID, blackUserID string) (inUser1Blacks bool, inUser2Blacks bool, err error) + CheckIn(ctx context.Context, userID1, userID2 string) (inUser1Blacks bool, inUser2Blacks bool, err error) } type BlackController struct { @@ -27,18 +28,22 @@ func NewBlackController(db *gorm.DB) *BlackController { // Create 增加黑名单 func (b *BlackController) Create(ctx context.Context, blacks []*relation.Black) (err error) { + return b.database.Create(ctx, blacks) } // Delete 删除黑名单 func (b *BlackController) Delete(ctx context.Context, blacks []*relation.Black) (err error) { + return b.database.Delete(ctx, blacks) } // FindOwnerBlacks 获取黑名单列表 -func (b *BlackController) FindOwnerBlacks(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (blackList []*relation.Black, err error) { +func (b *BlackController) FindOwnerBlacks(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (blackList []*relation.Black, total int64, err error) { + return b.database.FindOwnerBlacks(ctx, ownerUserID, pageNumber, showNumber) } // CheckIn 检查user2是否在user1的黑名单列表中(inUser1Blacks==true) 检查user1是否在user2的黑名单列表中(inUser2Blacks==true) -func (b *BlackController) CheckIn(ctx context.Context, ownerUserID, blackUserID string) (inUser1Blacks bool, inUser2Blacks bool, err error) { +func (b *BlackController) CheckIn(ctx context.Context, userID1, userID2 string) (inUser1Blacks bool, inUser2Blacks bool, err error) { + return b.database.CheckIn(ctx, userID1, userID2) } type BlackDatabaseInterface interface { @@ -47,10 +52,9 @@ type BlackDatabaseInterface interface { // Delete 删除黑名单 Delete(ctx context.Context, blacks []*relation.Black) (err error) // FindOwnerBlacks 获取黑名单列表 - FindOwnerBlacks(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (blackList []*relation.Black, err error) + FindOwnerBlacks(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (blacks []*relation.Black, total int64, err error) // CheckIn 检查user2是否在user1的黑名单列表中(inUser1Blacks==true) 检查user1是否在user2的黑名单列表中(inUser2Blacks==true) - CheckIn(ctx context.Context, ownerUserID, blackUserID string) (inUser1Blacks bool, inUser2Blacks bool, err error) -} + CheckIn(ctx context.Context, userID1, userID2 string) (inUser1Blacks bool, inUser2Blacks bool, err error) } type BlackDatabase struct { @@ -67,16 +71,40 @@ func NewBlackDatabase(db *gorm.DB) *BlackDatabase { // Create 增加黑名单 func (b *BlackDatabase) Create(ctx context.Context, blacks []*relation.Black) (err error) { + return b.sqlDB.Create(ctx, blacks) } // Delete 删除黑名单 func (b *BlackDatabase) Delete(ctx context.Context, blacks []*relation.Black) (err error) { + return b.sqlDB.Delete(ctx, blacks) } // FindOwnerBlacks 获取黑名单列表 -func (b *BlackDatabase) FindOwnerBlacks(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (blackList []*relation.Black, err error) { +func (b *BlackDatabase) FindOwnerBlacks(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (blacks []*relation.Black, total int64, err error) { + return b.sqlDB.FindOwnerBlacks(ctx, ownerUserID, pageNumber, showNumber) } // CheckIn 检查user2是否在user1的黑名单列表中(inUser1Blacks==true) 检查user1是否在user2的黑名单列表中(inUser2Blacks==true) -func (b *BlackDatabase) CheckIn(ctx context.Context, ownerUserID, blackUserID string) (inUser1Blacks bool, inUser2Blacks bool, err error) { +func (b *BlackDatabase) CheckIn(ctx context.Context, userID1, userID2 string) (inUser1Blacks bool, inUser2Blacks bool, err error) { + _, err = b.sqlDB.Take(ctx, userID1, userID2) + if err != nil { + if errors.Unwrap(err) != gorm.ErrRecordNotFound { + return + } + inUser1Blacks = false + } else { + inUser1Blacks = true + } + + inUser2Blacks = true + _, err = b.sqlDB.Take(ctx, userID2, userID1) + if err != nil { + if errors.Unwrap(err) != gorm.ErrRecordNotFound { + return + } + inUser2Blacks = false + } else { + inUser2Blacks = true + } + return } diff --git a/pkg/common/db/relation/black.go b/pkg/common/db/relation/black.go index dded6ee97..e666ea81d 100644 --- a/pkg/common/db/relation/black.go +++ b/pkg/common/db/relation/black.go @@ -71,44 +71,14 @@ func (b *Black) Take(ctx context.Context, ownerUserID, blockUserID string) (blac return black, utils.Wrap(b.DB.Where("owner_user_id = ? and block_user_id = ?", ownerUserID, blockUserID).Take(black).Error, "") } -func (b *Black) FindByOwnerUserID(ctx context.Context, ownerUserID string) (blackList []*Black, err error) { +func (b *Black) FindOwnerBlacks(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (blacks []*Black, total int64, err error) { defer func() { - tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID, "blackList", blackList) + tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID, "blacks", blacks) }() - return blackList, utils.Wrap(GroupMemberDB.Where("owner_user_id = ?", ownerUserID).Find(&blackList).Error, "") -} - -func InsertInToUserBlackList(ctx context.Context, black Black) (err error) { - defer tracelog.SetCtxDebug(ctx, utils.GetSelfFuncName(), err, "black", black) - black.CreateTime = time.Now() - err = BlackDB.Create(black).Error - return err -} - -func CheckBlack(ownerUserID, blockUserID string) error { - var black Black - return BlackDB.Where("owner_user_id=? and block_user_id=?", ownerUserID, blockUserID).Find(&black).Error -} - -func RemoveBlackList(ownerUserID, blockUserID string) error { - err := BlackDB.Where("owner_user_id=? and block_user_id=?", ownerUserID, blockUserID).Delete(Black{}).Error - return utils.Wrap(err, "RemoveBlackList failed") -} - -func GetBlackListByUserID(ownerUserID string) ([]Black, error) { - var blackListUsersInfo []Black - err := BlackDB.Where("owner_user_id=?", ownerUserID).Find(&blackListUsersInfo).Error + err = b.DB.Model(b).Count(&total).Error if err != nil { - return nil, err + return nil, 0, utils.Wrap(err, "") } - return blackListUsersInfo, nil -} - -func GetBlackIDListByUserID(ownerUserID string) ([]string, error) { - var blackIDList []string - err := b.db.Where("owner_user_id=?", ownerUserID).Pluck("block_user_id", &blackIDList).Error - if err != nil { - return nil, err - } - return blackIDList, nil + err = utils.Wrap(b.DB.Limit(int(showNumber)).Offset(int(pageNumber*showNumber)).Find(&blacks).Error, "") + return }