mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-12-03 10:52:33 +08:00
update set pin friends
This commit is contained in:
parent
4cd2713fd6
commit
738bb8a925
@ -92,3 +92,6 @@ func (o *FriendApi) GetFriendIDs(c *gin.Context) {
|
|||||||
func (o *FriendApi) GetSpecifiedFriendsInfo(c *gin.Context) {
|
func (o *FriendApi) GetSpecifiedFriendsInfo(c *gin.Context) {
|
||||||
a2r.Call(friend.FriendClient.GetSpecifiedFriendsInfo, o.Client, c)
|
a2r.Call(friend.FriendClient.GetSpecifiedFriendsInfo, o.Client, c)
|
||||||
}
|
}
|
||||||
|
func (o *FriendApi) SetPinFriends(c *gin.Context) {
|
||||||
|
a2r.Call(friend.FriendClient.PinFriends, o.Client, c)
|
||||||
|
}
|
||||||
|
|||||||
@ -98,6 +98,7 @@ func NewGinRouter(discov discoveryregistry.SvcDiscoveryRegistry, rdb redis.Unive
|
|||||||
friendRouterGroup.POST("/is_friend", f.IsFriend)
|
friendRouterGroup.POST("/is_friend", f.IsFriend)
|
||||||
friendRouterGroup.POST("/get_friend_id", f.GetFriendIDs)
|
friendRouterGroup.POST("/get_friend_id", f.GetFriendIDs)
|
||||||
friendRouterGroup.POST("/get_specified_friends_info", f.GetSpecifiedFriendsInfo)
|
friendRouterGroup.POST("/get_specified_friends_info", f.GetSpecifiedFriendsInfo)
|
||||||
|
friendRouterGroup.POST("/set_pin_friend", f.SetPinFriends)
|
||||||
}
|
}
|
||||||
g := NewGroupApi(*groupRpc)
|
g := NewGroupApi(*groupRpc)
|
||||||
groupRouterGroup := r.Group("/group", ParseToken)
|
groupRouterGroup := r.Group("/group", ParseToken)
|
||||||
|
|||||||
@ -434,3 +434,37 @@ func (s *friendServer) GetSpecifiedFriendsInfo(ctx context.Context, req *pbfrien
|
|||||||
}
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
func (s *friendServer) PinFriends(
|
||||||
|
ctx context.Context,
|
||||||
|
req *pbfriend.PinFriendsReq,
|
||||||
|
) (*pbfriend.PinFriendsResp, error) {
|
||||||
|
if len(req.FriendUserIDs) == 0 {
|
||||||
|
return nil, errs.ErrArgs.Wrap("friendIDList is empty")
|
||||||
|
}
|
||||||
|
if utils.Duplicate(req.FriendUserIDs) {
|
||||||
|
return nil, errs.ErrArgs.Wrap("friendIDList repeated")
|
||||||
|
}
|
||||||
|
var isPinned bool
|
||||||
|
if req.IsPinned != nil {
|
||||||
|
isPinned = req.IsPinned.Value
|
||||||
|
} else {
|
||||||
|
return nil, errs.ErrArgs.Wrap("isPinned is nil")
|
||||||
|
}
|
||||||
|
|
||||||
|
//檢查是不是在好友列表裏
|
||||||
|
_, err := s.friendDatabase.FindFriendsWithError(ctx, req.OwnerUserID, req.FriendUserIDs)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
//全部置頂
|
||||||
|
//把所有friendslist的isPinned都設置為true
|
||||||
|
for _, friendID := range req.FriendUserIDs {
|
||||||
|
if err := s.friendDatabase.UpdateFriendPinStatus(ctx, req.OwnerUserID, friendID, isPinned); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := &pbfriend.PinFriendsResp{}
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|||||||
@ -58,6 +58,7 @@ type FriendDatabase interface {
|
|||||||
FindFriendsWithError(ctx context.Context, ownerUserID string, friendUserIDs []string) (friends []*relation.FriendModel, err error)
|
FindFriendsWithError(ctx context.Context, ownerUserID string, friendUserIDs []string) (friends []*relation.FriendModel, err error)
|
||||||
FindFriendUserIDs(ctx context.Context, ownerUserID string) (friendUserIDs []string, err error)
|
FindFriendUserIDs(ctx context.Context, ownerUserID string) (friendUserIDs []string, err error)
|
||||||
FindBothFriendRequests(ctx context.Context, fromUserID, toUserID string) (friends []*relation.FriendRequestModel, err error)
|
FindBothFriendRequests(ctx context.Context, fromUserID, toUserID string) (friends []*relation.FriendRequestModel, err error)
|
||||||
|
UpdateFriendPinStatus(ctx context.Context, ownerUserID string, friendUserID string, isPinned bool) (err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type friendDatabase struct {
|
type friendDatabase struct {
|
||||||
@ -298,3 +299,9 @@ func (f *friendDatabase) FindFriendUserIDs(ctx context.Context, ownerUserID stri
|
|||||||
func (f *friendDatabase) FindBothFriendRequests(ctx context.Context, fromUserID, toUserID string) (friends []*relation.FriendRequestModel, err error) {
|
func (f *friendDatabase) FindBothFriendRequests(ctx context.Context, fromUserID, toUserID string) (friends []*relation.FriendRequestModel, err error) {
|
||||||
return f.friendRequest.FindBothFriendRequests(ctx, fromUserID, toUserID)
|
return f.friendRequest.FindBothFriendRequests(ctx, fromUserID, toUserID)
|
||||||
}
|
}
|
||||||
|
func (f *friendDatabase) UpdateFriendPinStatus(ctx context.Context, ownerUserID string, friendUserID string, isPinned bool) (err error) {
|
||||||
|
if err := f.friend.UpdatePinStatus(ctx, ownerUserID, friendUserID, isPinned); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return f.cache.DelFriend(ownerUserID, friendUserID).ExecDel(ctx)
|
||||||
|
}
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package mgo
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"github.com/OpenIMSDK/tools/errs"
|
||||||
|
|
||||||
"github.com/OpenIMSDK/tools/mgoutil"
|
"github.com/OpenIMSDK/tools/mgoutil"
|
||||||
"github.com/OpenIMSDK/tools/pagination"
|
"github.com/OpenIMSDK/tools/pagination"
|
||||||
@ -129,3 +130,17 @@ func (f *FriendMgo) FindFriendUserIDs(ctx context.Context, ownerUserID string) (
|
|||||||
filter := bson.M{"owner_user_id": ownerUserID}
|
filter := bson.M{"owner_user_id": ownerUserID}
|
||||||
return mgoutil.Find[string](ctx, f.coll, filter, options.Find().SetProjection(bson.M{"_id": 0, "friend_user_id": 1}))
|
return mgoutil.Find[string](ctx, f.coll, filter, options.Find().SetProjection(bson.M{"_id": 0, "friend_user_id": 1}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdatePinStatus update friend's pin status
|
||||||
|
func (f *FriendMgo) UpdatePinStatus(ctx context.Context, ownerUserID string, friendUserID string, isPinned bool) (err error) {
|
||||||
|
|
||||||
|
filter := bson.M{"owner_user_id": ownerUserID, "friend_user_id": friendUserID}
|
||||||
|
update := bson.M{"$set": bson.M{"is_pinned": isPinned}}
|
||||||
|
|
||||||
|
_, err = f.coll.UpdateOne(ctx, filter, update)
|
||||||
|
if err != nil {
|
||||||
|
return errs.Wrap(err, "update pin error")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@ -56,4 +56,6 @@ type FriendModelInterface interface {
|
|||||||
FindInWhoseFriends(ctx context.Context, friendUserID string, pagination pagination.Pagination) (total int64, friends []*FriendModel, err error)
|
FindInWhoseFriends(ctx context.Context, friendUserID string, pagination pagination.Pagination) (total int64, friends []*FriendModel, err error)
|
||||||
// FindFriendUserIDs retrieves a list of friend user IDs for a given owner.
|
// FindFriendUserIDs retrieves a list of friend user IDs for a given owner.
|
||||||
FindFriendUserIDs(ctx context.Context, ownerUserID string) (friendUserIDs []string, err error)
|
FindFriendUserIDs(ctx context.Context, ownerUserID string) (friendUserIDs []string, err error)
|
||||||
|
// UpdatePinStatus update friend's pin status
|
||||||
|
UpdatePinStatus(ctx context.Context, ownerUserID string, friendUserID string, isPinned bool) (err error)
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user