xy 1 dag sedan
förälder
incheckning
b61d8f41db

+ 1 - 1
bin/client_msg/common.proto

@@ -307,7 +307,7 @@ message ReqFriendList{
 message ResFriendList{
   bool success = 1;
   MsgError err_msg = 2;
-  repeated RequestAddFriendItem list = 3;
+  repeated UserInfo list = 3;
 }
 
 

+ 69 - 0
src/server/datacenter/users.go

@@ -1,9 +1,11 @@
 package usercenter
 
 import (
+	"database/sql"
 	"encoding/json"
 	"fmt"
 	mysqlmgr "server/db/mysql"
+	"strings"
 	"time"
 )
 
@@ -214,3 +216,70 @@ func UpdateCoinToDB(user_id string, coin int) error {
 	}
 	return nil
 }
+
+// GetAllFriend 获取用户的所有好友信息
+func (u *User) GetAllFriend() ([]*User, error) {
+	// 1. 获取好友ID列表
+	friendIDs, err := u.GetFriendIDs()
+	if err != nil {
+		return nil, fmt.Errorf("获取好友ID列表失败: %v", err)
+	}
+
+	// 如果没有好友,直接返回空列表
+	if len(friendIDs) == 0 {
+		return []*User{}, nil
+	}
+
+	// 2. 构建查询参数 (?,?,?...)
+	placeholders := strings.Repeat("?,", len(friendIDs)-1) + "?"
+	args := make([]interface{}, len(friendIDs))
+	for i, id := range friendIDs {
+		args[i] = id
+	}
+
+	// 3. 执行查询
+	query := fmt.Sprintf(`
+        SELECT id, create_time, user_id, friend_ids, head, coin, name, account 
+        FROM users 
+        WHERE user_id IN (%s)`, placeholders)
+
+	rows, err := mysqlmgr.Query(query, args...)
+	if err != nil {
+		return nil, fmt.Errorf("查询好友信息失败: %v", err)
+	}
+	defer rows.Close()
+
+	// 4. 解析结果
+	var friends []*User
+	for rows.Next() {
+		var friend User
+		var nullTime sql.NullTime
+		err := rows.Scan(
+			&friend.ID,
+			&nullTime,
+			&friend.UserID,
+			&friend.FriendIDs,
+			&friend.Head,
+			&friend.Coin,
+			&friend.Name,
+			&friend.Account,
+		)
+		if err != nil {
+			return nil, fmt.Errorf("解析好友数据失败: %v", err)
+		}
+
+		// 处理可能的NULL时间
+		if nullTime.Valid {
+			friend.CreateTime = nullTime.Time
+		}
+
+		friends = append(friends, &friend)
+	}
+
+	// 5. 检查遍历过程中是否出错
+	if err = rows.Err(); err != nil {
+		return nil, fmt.Errorf("结果遍历失败: %v", err)
+	}
+
+	return friends, nil
+}

+ 26 - 16
src/server/hall/friends/friends.go

@@ -13,33 +13,43 @@ import (
 func GetFriendsListByUserId(args []interface{}) {
 	m := args[0].(*msg.ReqFriendList)
 	a := args[1].(gate.Agent)
-	list, err := requestaddfriend.GetPendingRequests(m.UserId)
+	UserId := m.UserId
+	mysql_user_data, err := usercenter.GetUserByID(UserId)
 	if err != nil {
 		a.WriteMsg(&msg.ResFriendList{
 			Success: false,
 			ErrMsg: &msg.MsgError{
 				ErrorCode: 101,
-				ErrorMsg:  err.Error(),
+				ErrorMsg:  "error",
 			},
 		})
 		return
 	}
-	var temp = make([]*msg.RequestAddFriendItem, 0)
-	for _, v := range list {
-		temp = append(temp, &msg.RequestAddFriendItem{
-			Id:         int32(v.ID),
-			RequestID:  v.RequestID,
-			FromUserID: v.FromUserID,
-			ToUserID:   v.ToUserID,
-			Status:     int32(v.Status),
-			Message:    v.Message,
+	users, err := mysql_user_data.GetAllFriend()
+
+	if err == nil {
+		var temp = make([]*msg.UserInfo, 0)
+		for _, v := range users {
+			temp = append(temp, &msg.UserInfo{
+				UserId: v.UserID,
+				MHead:  v.Head,
+				Name:   v.Name,
+			})
+		}
+		a.WriteMsg(&msg.ResFriendList{
+			Success: true,
+			ErrMsg:  nil,
+			List:    temp,
+		})
+	} else {
+		a.WriteMsg(&msg.ResFriendList{
+			Success: false,
+			ErrMsg: &msg.MsgError{
+				ErrorCode: 101,
+				ErrorMsg:  "error",
+			},
 		})
 	}
-	a.WriteMsg(&msg.ResFriendList{
-		Success: true,
-		ErrMsg:  nil,
-		List:    temp,
-	})
 
 }
 

+ 9 - 9
src/server/msg/common.pb.go

@@ -2781,10 +2781,10 @@ func (x *ReqFriendList) GetUserId() string {
 }
 
 type ResFriendList struct {
-	state         protoimpl.MessageState  `protogen:"open.v1"`
-	Success       bool                    `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"`
-	ErrMsg        *MsgError               `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
-	List          []*RequestAddFriendItem `protobuf:"bytes,3,rep,name=list,proto3" json:"list,omitempty"`
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	Success       bool                   `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"`
+	ErrMsg        *MsgError              `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+	List          []*UserInfo            `protobuf:"bytes,3,rep,name=list,proto3" json:"list,omitempty"`
 	unknownFields protoimpl.UnknownFields
 	sizeCache     protoimpl.SizeCache
 }
@@ -2833,7 +2833,7 @@ func (x *ResFriendList) GetErrMsg() *MsgError {
 	return nil
 }
 
-func (x *ResFriendList) GetList() []*RequestAddFriendItem {
+func (x *ResFriendList) GetList() []*UserInfo {
 	if x != nil {
 		return x.List
 	}
@@ -3308,11 +3308,11 @@ const file_common_proto_rawDesc = "" +
 	"\x06Status\x18\x05 \x01(\x05R\x06Status\x12\x18\n" +
 	"\aMessage\x18\x06 \x01(\tR\aMessage\"(\n" +
 	"\rReqFriendList\x12\x17\n" +
-	"\auser_id\x18\x01 \x01(\tR\x06userId\"x\n" +
+	"\auser_id\x18\x01 \x01(\tR\x06userId\"l\n" +
 	"\rResFriendList\x12\x18\n" +
 	"\asuccess\x18\x01 \x01(\bR\asuccess\x12\"\n" +
-	"\aerr_msg\x18\x02 \x01(\v2\t.MsgErrorR\x06errMsg\x12)\n" +
-	"\x04list\x18\x03 \x03(\v2\x15.RequestAddFriendItemR\x04list\"<\n" +
+	"\aerr_msg\x18\x02 \x01(\v2\t.MsgErrorR\x06errMsg\x12\x1d\n" +
+	"\x04list\x18\x03 \x03(\v2\t.UserInfoR\x04list\"<\n" +
 	"\fReqAddFriend\x12\x1a\n" +
 	"\bToUserID\x18\x01 \x01(\tR\bToUserID\x12\x10\n" +
 	"\x03msg\x18\x02 \x01(\tR\x03msg\"5\n" +
@@ -3488,7 +3488,7 @@ var file_common_proto_depIdxs = []int32{
 	31, // 48: ResLudoRoomInfo.err_msg:type_name -> MsgError
 	8,  // 49: ResLudoRoomInfo.info:type_name -> RoomInfo
 	31, // 50: ResFriendList.err_msg:type_name -> MsgError
-	45, // 51: ResFriendList.list:type_name -> RequestAddFriendItem
+	21, // 51: ResFriendList.list:type_name -> UserInfo
 	21, // 52: RecvAddFriendRequest.info:type_name -> UserInfo
 	45, // 53: OptAddFriendRequest.info:type_name -> RequestAddFriendItem
 	45, // 54: NotifyOptFriend.info:type_name -> RequestAddFriendItem