Files
open-im-server/pkg/common/convert/friend.go
T

88 lines
3.4 KiB
Go
Raw Normal View History

2023-04-21 20:29:08 +08:00
package convert
import (
"context"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation"
"github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws"
2023-04-26 11:19:49 +08:00
"github.com/OpenIMSDK/Open-IM-Server/pkg/utils"
2023-04-21 20:29:08 +08:00
)
2023-04-23 14:21:36 +08:00
func FriendPb2DB(friend *sdkws.FriendInfo) *relation.FriendModel {
2023-04-21 20:29:08 +08:00
dbFriend := &relation.FriendModel{}
utils.CopyStructFields(dbFriend, friend)
dbFriend.FriendUserID = friend.FriendUser.UserID
dbFriend.CreateTime = utils.UnixSecondToTime(friend.CreateTime)
2023-04-23 14:21:36 +08:00
return dbFriend
2023-04-21 20:29:08 +08:00
}
2023-04-23 16:47:41 +08:00
func FriendDB2Pb(ctx context.Context, friendDB *relation.FriendModel, getUsers func(ctx context.Context, userIDs []string) (map[string]*sdkws.UserInfo, error)) (*sdkws.FriendInfo, error) {
2023-04-23 14:21:36 +08:00
pbfriend := &sdkws.FriendInfo{FriendUser: &sdkws.UserInfo{}}
2023-04-21 20:29:08 +08:00
utils.CopyStructFields(pbfriend, friendDB)
2023-04-23 16:47:41 +08:00
users, err := getUsers(ctx, []string{friendDB.FriendUserID})
2023-04-21 20:29:08 +08:00
if err != nil {
return nil, err
}
2023-04-23 16:47:41 +08:00
pbfriend.FriendUser.UserID = users[friendDB.FriendUserID].UserID
pbfriend.FriendUser.Nickname = users[friendDB.FriendUserID].Nickname
pbfriend.FriendUser.FaceURL = users[friendDB.FriendUserID].FaceURL
pbfriend.FriendUser.Ex = users[friendDB.FriendUserID].Ex
2023-04-21 20:29:08 +08:00
pbfriend.CreateTime = friendDB.CreateTime.Unix()
return pbfriend, nil
}
2023-04-23 16:47:41 +08:00
func FriendsDB2Pb(ctx context.Context, friendsDB []*relation.FriendModel, getUsers func(ctx context.Context, userIDs []string) (map[string]*sdkws.UserInfo, error)) (friendsPb []*sdkws.FriendInfo, err error) {
var userID []string
for _, friendDB := range friendsDB {
userID = append(userID, friendDB.FriendUserID)
}
users, err := getUsers(ctx, userID)
if err != nil {
return nil, err
}
for _, friend := range friendsDB {
friendPb := &sdkws.FriendInfo{FriendUser: &sdkws.UserInfo{}}
utils.CopyStructFields(friendPb, friend)
friendPb.FriendUser.UserID = users[friend.FriendUserID].UserID
friendPb.FriendUser.Nickname = users[friend.FriendUserID].Nickname
friendPb.FriendUser.FaceURL = users[friend.FriendUserID].FaceURL
friendPb.FriendUser.Ex = users[friend.FriendUserID].Ex
friendPb.CreateTime = friend.CreateTime.Unix()
friendsPb = append(friendsPb, friendPb)
}
return friendsPb, nil
}
2023-05-15 17:06:28 +08:00
func FriendRequestDB2Pb(ctx context.Context, friendRequests []*relation.FriendRequestModel, getUsers func(ctx context.Context, userIDs []string) (map[string]*sdkws.UserInfo, error)) ([]*sdkws.FriendRequest, error) {
2023-05-15 16:52:39 +08:00
userIDMap := make(map[string]struct{})
2023-04-23 16:47:41 +08:00
for _, friendRequest := range friendRequests {
2023-05-15 16:52:39 +08:00
userIDMap[friendRequest.ToUserID] = struct{}{}
userIDMap[friendRequest.FromUserID] = struct{}{}
2023-04-23 16:47:41 +08:00
}
2023-05-15 16:52:39 +08:00
users, err := getUsers(ctx, utils.Keys(userIDMap))
2023-04-23 16:47:41 +08:00
if err != nil {
return nil, err
}
2023-05-15 17:06:28 +08:00
res := make([]*sdkws.FriendRequest, 0, len(friendRequests))
2023-04-23 16:47:41 +08:00
for _, friendRequest := range friendRequests {
2023-05-15 17:06:28 +08:00
toUser := users[friendRequest.ToUserID]
fromUser := users[friendRequest.FromUserID]
res = append(res, &sdkws.FriendRequest{
FromUserID: friendRequest.FromUserID,
FromNickname: fromUser.Nickname,
FromFaceURL: fromUser.FaceURL,
ToUserID: friendRequest.ToUserID,
ToNickname: toUser.Nickname,
ToFaceURL: toUser.FaceURL,
HandleResult: friendRequest.HandleResult,
ReqMsg: friendRequest.ReqMsg,
CreateTime: friendRequest.CreateTime.UnixMilli(),
HandlerUserID: friendRequest.HandlerUserID,
HandleMsg: friendRequest.HandleMsg,
HandleTime: friendRequest.HandleTime.UnixMilli(),
Ex: friendRequest.Ex,
})
2023-04-23 16:47:41 +08:00
}
2023-05-15 17:06:28 +08:00
return res, nil
2023-04-23 16:47:41 +08:00
}