mirror of
https://github.com/openimsdk/open-im-server.git
synced 2026-04-28 06:19:20 +08:00
feat: add error code for handled friend requests and improve error handling in friend operations (#3670)
* fix: performance issues with Kafka caused by encapsulating the MQ interface * fix: admin token in standalone mode * fix: full id version * fix: resolve deadlock in cache eviction and improve GetBatch implementation * refactor: replace LongConn with ClientConn interface and simplify message handling * refactor: replace LongConn with ClientConn interface and simplify message handling * fix: seq use $setOnInsert for min_seq in conversation update * feat: add error code for handled friend requests and improve error handling in friend operations
This commit is contained in:
@@ -70,6 +70,7 @@ const (
|
|||||||
BlockedByPeer = 1302 // Blocked by the peer
|
BlockedByPeer = 1302 // Blocked by the peer
|
||||||
NotPeersFriend = 1303 // Not the peer's friend
|
NotPeersFriend = 1303 // Not the peer's friend
|
||||||
RelationshipAlreadyError = 1304 // Already in a friend relationship
|
RelationshipAlreadyError = 1304 // Already in a friend relationship
|
||||||
|
FriendRequestHandled = 1305 // Friend request has already been handled
|
||||||
|
|
||||||
// Message error codes.
|
// Message error codes.
|
||||||
MessageHasReadDisable = 1401
|
MessageHasReadDisable = 1401
|
||||||
|
|||||||
@@ -51,10 +51,11 @@ var (
|
|||||||
|
|
||||||
ErrMessageHasReadDisable = errs.NewCodeError(MessageHasReadDisable, "MessageHasReadDisable")
|
ErrMessageHasReadDisable = errs.NewCodeError(MessageHasReadDisable, "MessageHasReadDisable")
|
||||||
|
|
||||||
ErrCanNotAddYourself = errs.NewCodeError(CanNotAddYourselfError, "CanNotAddYourselfError")
|
ErrCanNotAddYourself = errs.NewCodeError(CanNotAddYourselfError, "CanNotAddYourselfError")
|
||||||
ErrBlockedByPeer = errs.NewCodeError(BlockedByPeer, "BlockedByPeer")
|
ErrBlockedByPeer = errs.NewCodeError(BlockedByPeer, "BlockedByPeer")
|
||||||
ErrNotPeersFriend = errs.NewCodeError(NotPeersFriend, "NotPeersFriend")
|
ErrNotPeersFriend = errs.NewCodeError(NotPeersFriend, "NotPeersFriend")
|
||||||
ErrRelationshipAlready = errs.NewCodeError(RelationshipAlreadyError, "RelationshipAlreadyError")
|
ErrRelationshipAlready = errs.NewCodeError(RelationshipAlreadyError, "RelationshipAlreadyError")
|
||||||
|
ErrFriendRequestHandled = errs.NewCodeError(FriendRequestHandled, "FriendRequestHandled")
|
||||||
|
|
||||||
ErrMutedInGroup = errs.NewCodeError(MutedInGroup, "MutedInGroup")
|
ErrMutedInGroup = errs.NewCodeError(MutedInGroup, "MutedInGroup")
|
||||||
ErrMutedGroup = errs.NewCodeError(MutedGroup, "MutedGroup")
|
ErrMutedGroup = errs.NewCodeError(MutedGroup, "MutedGroup")
|
||||||
|
|||||||
@@ -16,9 +16,9 @@ package controller
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/openimsdk/open-im-server/v3/pkg/common/servererrs"
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/storage/database"
|
"github.com/openimsdk/open-im-server/v3/pkg/common/storage/database"
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/storage/database/mgo"
|
"github.com/openimsdk/open-im-server/v3/pkg/common/storage/database/mgo"
|
||||||
"github.com/openimsdk/open-im-server/v3/pkg/common/storage/model"
|
"github.com/openimsdk/open-im-server/v3/pkg/common/storage/model"
|
||||||
@@ -109,15 +109,13 @@ func (f *friendDatabase) CheckIn(ctx context.Context, userID1, userID2 string) (
|
|||||||
// Retrieve friend IDs of userID1 from the cache
|
// Retrieve friend IDs of userID1 from the cache
|
||||||
userID1FriendIDs, err := f.cache.GetFriendIDs(ctx, userID1)
|
userID1FriendIDs, err := f.cache.GetFriendIDs(ctx, userID1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("error retrieving friend IDs for user %s: %w", userID1, err)
|
return false, false, err
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Retrieve friend IDs of userID2 from the cache
|
// Retrieve friend IDs of userID2 from the cache
|
||||||
userID2FriendIDs, err := f.cache.GetFriendIDs(ctx, userID2)
|
userID2FriendIDs, err := f.cache.GetFriendIDs(ctx, userID2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("error retrieving friend IDs for user %s: %w", userID2, err)
|
return false, false, err
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if userID2 is in userID1's friend list and vice versa
|
// Check if userID2 is in userID1's friend list and vice versa
|
||||||
@@ -214,12 +212,12 @@ func (f *friendDatabase) RefuseFriendRequest(ctx context.Context, friendRequest
|
|||||||
// Attempt to retrieve the friend request from the database.
|
// Attempt to retrieve the friend request from the database.
|
||||||
fr, err := f.friendRequest.Take(ctx, friendRequest.FromUserID, friendRequest.ToUserID)
|
fr, err := f.friendRequest.Take(ctx, friendRequest.FromUserID, friendRequest.ToUserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to retrieve friend request from %s to %s: %w", friendRequest.FromUserID, friendRequest.ToUserID, err)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the friend request has already been handled.
|
// Check if the friend request has already been handled.
|
||||||
if fr.HandleResult != 0 {
|
if fr.HandleResult != 0 {
|
||||||
return fmt.Errorf("friend request from %s to %s has already been processed", friendRequest.FromUserID, friendRequest.ToUserID)
|
return servererrs.ErrFriendRequestHandled.WrapMsg("friend request has already been processed", "from", friendRequest.FromUserID, "to", friendRequest.ToUserID)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Log the action of refusing the friend request for debugging and auditing purposes.
|
// Log the action of refusing the friend request for debugging and auditing purposes.
|
||||||
@@ -232,7 +230,7 @@ func (f *friendDatabase) RefuseFriendRequest(ctx context.Context, friendRequest
|
|||||||
friendRequest.HandleResult = constant.FriendResponseRefuse
|
friendRequest.HandleResult = constant.FriendResponseRefuse
|
||||||
friendRequest.HandleTime = time.Now()
|
friendRequest.HandleTime = time.Now()
|
||||||
if err := f.friendRequest.Update(ctx, friendRequest); err != nil {
|
if err := f.friendRequest.Update(ctx, friendRequest); err != nil {
|
||||||
return fmt.Errorf("failed to update friend request from %s to %s as refused: %w", friendRequest.FromUserID, friendRequest.ToUserID, err)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -350,9 +348,9 @@ func (f *friendDatabase) PageFriendRequestToMe(ctx context.Context, userID strin
|
|||||||
func (f *friendDatabase) FindFriendsWithError(ctx context.Context, ownerUserID string, friendUserIDs []string) (friends []*model.Friend, err error) {
|
func (f *friendDatabase) FindFriendsWithError(ctx context.Context, ownerUserID string, friendUserIDs []string) (friends []*model.Friend, err error) {
|
||||||
friends, err = f.friend.FindFriends(ctx, ownerUserID, friendUserIDs)
|
friends, err = f.friend.FindFriends(ctx, ownerUserID, friendUserIDs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return nil, err
|
||||||
}
|
}
|
||||||
return
|
return friends, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *friendDatabase) FindFriendUserIDs(ctx context.Context, ownerUserID string) (friendUserIDs []string, err error) {
|
func (f *friendDatabase) FindFriendUserIDs(ctx context.Context, ownerUserID string) (friendUserIDs []string, err error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user