diff --git a/src/common/db/mysql_model/im_mysql_model/friend_request_model.go b/src/common/db/mysql_model/im_mysql_model/friend_request_model.go index 35a829488..d58af6eba 100644 --- a/src/common/db/mysql_model/im_mysql_model/friend_request_model.go +++ b/src/common/db/mysql_model/im_mysql_model/friend_request_model.go @@ -5,12 +5,12 @@ import ( "time" ) -func InsertIntoFriendReq(reqId, userId string, flag int32, reqMessage string) error { +func ReplaceIntoFriendReq(reqId, userId string, flag int32, reqMessage string) error { dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { return err } - err = dbConn.Exec("insert into friend_request(req_id,user_id,flag,req_message,create_time) values(?,?,?,?,?)", reqId, userId, flag, reqMessage, time.Now()).Error + err = dbConn.Exec("replace into friend_request(req_id,user_id,flag,req_message,create_time) values(?,?,?,?,?)", reqId, userId, flag, reqMessage, time.Now()).Error if err != nil { return err } diff --git a/src/rpc/friend/friend/add_friend.go b/src/rpc/friend/friend/add_friend.go index f0b3a2bce..b71f07123 100644 --- a/src/rpc/friend/friend/add_friend.go +++ b/src/rpc/friend/friend/add_friend.go @@ -11,7 +11,6 @@ import ( "Open_IM/src/push/logic" "Open_IM/src/utils" "context" - "fmt" ) func (s *friendServer) AddFriend(ctx context.Context, req *pbFriend.AddFriendReq) (*pbFriend.CommonResp, error) { @@ -22,10 +21,10 @@ func (s *friendServer) AddFriend(ctx context.Context, req *pbFriend.AddFriendReq log.Error(req.Token, req.OperationID, "err=%s,parse token failed", err.Error()) return &pbFriend.CommonResp{ErrorCode: config.ErrParseToken.ErrCode, ErrorMsg: config.ErrParseToken.ErrMsg}, nil } - //Establish a relationship in the friend request table - err = im_mysql_model.InsertIntoFriendReq(claims.UID, req.Uid, constant.NotFriendFlag, req.ReqMessage) + //Establish a latest relationship in the friend request table + err = im_mysql_model.ReplaceIntoFriendReq(claims.UID, req.Uid, constant.NotFriendFlag, req.ReqMessage) if err != nil { - log.Error(req.Token, req.OperationID, fmt.Sprintf("err=%s,create friend request ship failed", err.Error())) + log.Error(req.Token, req.OperationID, "err=%s,create friend request ship failed", err.Error()) return &pbFriend.CommonResp{ErrorCode: config.ErrAddFriend.ErrCode, ErrorMsg: config.ErrAddFriend.ErrMsg}, nil } log.Info(req.Token, req.OperationID, "rpc add friend is success return,uid=%s", req.Uid) diff --git a/src/rpc/friend/friend/add_friend_response.go b/src/rpc/friend/friend/add_friend_response.go index b7c1638e7..ab5fa65cd 100644 --- a/src/rpc/friend/friend/add_friend_response.go +++ b/src/rpc/friend/friend/add_friend_response.go @@ -28,7 +28,12 @@ func (s *friendServer) AddedFriend(ctx context.Context, req *pbFriend.AddedFrien } log.Info(req.Token, req.OperationID, "rpc add friend response success return,userid=%s,flag=%d", req.Uid, req.Flag) //Change the status of the friend request form - if req.Flag == 1 { + if req.Flag == constant.FriendFlag { + //Establish friendship after find friend relationship not exists + _, err := im_mysql_model.FindFriendRelationshipFromFriend(claims.UID, req.Uid) + if err == nil { + return &pbFriend.CommonResp{ErrorCode: 0, ErrorMsg: "You are already friends"}, nil + } //Establish two single friendship err = im_mysql_model.InsertToFriend(claims.UID, req.Uid, req.Flag) if err != nil {