Add test 删除好友

This commit is contained in:
殷勇 2023-08-23 17:03:55 +08:00
parent 8165b22cb1
commit a22512d5cd
3 changed files with 53 additions and 18 deletions

View File

@ -15,20 +15,20 @@ CREATE TABLE `t_friend_ships` (
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
`account1_id` varchar(60) NOT NULL DEFAULT '',
`account2_id` varchar(60) NOT NULL DEFAULT '',
`is_delete_friendship` tinyint DEFAULT '0' COMMENT '是否已删除好友关系, 0 no, 1 deleted',
`createtime` int NOT NULL DEFAULT '0' COMMENT '创建时间',
`modifytime` int NOT NULL DEFAULT '0' COMMENT '修改时间',
PRIMARY KEY (`idx`),
UNIQUE KEY `friendship` (`account1_id`,`account2_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin
COMMENT "已经成为好友"
;
COMMENT "已经成为好友关系";
drop table if exists `t_friend_pending_request`;
CREATE TABLE t_friend_pending_request (
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
sender_account_id varchar(60) NOT NULL DEFAULT '',
receiver_account_id varchar(60) NOT NULL DEFAULT '',
is_friendship tinyint DEFAULT '0' COMMENT '已经是好友关系, 0 pending, 1 ok, 2 no',
is_friendship tinyint DEFAULT '0' COMMENT '已经是好友关系, 0 pending, 1 ok, 2 reject, 3 deleted',
`createtime` int NOT NULL DEFAULT '0' COMMENT '创建时间',
`modifytime` int NOT NULL DEFAULT '0' COMMENT '修改时间',
PRIMARY KEY (`idx`),

View File

@ -68,6 +68,26 @@ func (fm *FriendsMgr) insertFriendShip(account1Id string, account2Id string) {
)
}
func (fm *FriendsMgr) updateFriendShip(account1Id string, account2Id string, fields [][]string) {
where := [][]string{
{"account1_id", account1Id},
{"account2_id", account2Id},
}
f5.GetJsStyleDb().Update(
FRIEND_DB,
"t_friend_ships",
fields,
where,
func(err error, lastInsertId int64, rowsAffected int64) {
if err != nil {
fmt.Printf("error:%v\n", err)
}
fmt.Printf("lastInsertId:%d\n", lastInsertId)
fmt.Printf("rowsAffected:%d\n", rowsAffected)
},
)
}
// loadUsers 加载所有用户
func (fm *FriendsMgr) loadUsers() {
fields := []string{"account_id", "name"}

View File

@ -4,6 +4,7 @@ import (
"cs"
"errors"
"fmt"
"q5"
"strings"
"sync"
"time"
@ -156,13 +157,8 @@ func (fm *FriendsMgr) acceptFriendRequest(account1Id string, account2Id string)
// step1. update reqs
fm.insertFriendRequest(account2Id, account1Id, "1")
// step2. insert friendship
compareResult := strings.Compare(account1Id, account2Id)
if compareResult > 0 {
temp := account1Id
account1Id = account2Id
account2Id = temp
}
fm.insertFriendShip(account1Id, account2Id)
a1, a2 := swapMiniAccount(account1Id, account2Id)
fm.insertFriendShip(a1, a2)
// Create a new friendship
friendship := &Friendship{
@ -179,7 +175,6 @@ func (fm *FriendsMgr) acceptFriendRequest(account1Id string, account2Id string)
// rejectFriendRequest 拒绝好友请求
func (fm *FriendsMgr) rejectFriendRequest(account1Id string, account2Id string) error {
if fm.pendingReqs[account1Id] == nil {
return errors.New("no pending friend request to reject")
}
@ -199,17 +194,19 @@ func (fm *FriendsMgr) rejectFriendRequest(account1Id string, account2Id string)
}
// deleteFriendShip 删除好友
func (fm *FriendsMgr) deleteFriendShip(account1ID, account2ID string) error {
func (fm *FriendsMgr) deleteFriendShip(account1Id, account2Id string) error {
fm.mu.Lock()
defer fm.mu.Unlock()
user1Friendships := fm.friendships[account1ID]
user2Friendships := fm.friendships[account2ID]
user1Friendships := fm.friendships[account1Id]
user2Friendships := fm.friendships[account2Id]
var found bool
for i, friendship := range user1Friendships {
if friendship.User1.Username == account2ID || friendship.User2.Username == account2ID {
fm.friendships[account1ID] = append(user1Friendships[:i], user1Friendships[i+1:]...)
if friendship.User1.AccountId == account2Id || friendship.User2.AccountId == account2Id {
// 删除好友请求, insert和replace, 不存在则新增,存在则替换值
fm.insertFriendRequest(account1Id, account2Id, "3")
fm.friendships[account1Id] = append(user1Friendships[:i], user1Friendships[i+1:]...)
found = true
break
}
@ -220,12 +217,19 @@ func (fm *FriendsMgr) deleteFriendShip(account1ID, account2ID string) error {
}
for i, friendship := range user2Friendships {
if friendship.User1.Username == account1ID || friendship.User2.Username == account1ID {
fm.friendships[account2ID] = append(user2Friendships[:i], user2Friendships[i+1:]...)
if friendship.User1.AccountId == account1Id || friendship.User2.AccountId == account1Id {
// 删除好友请求, insert和replace, 不存在则新增,存在则替换值
fm.insertFriendRequest(account2Id, account1Id, "3")
fm.friendships[account2Id] = append(user2Friendships[:i], user2Friendships[i+1:]...)
break
}
}
// Delete friendship DB
a1, a2 := swapMiniAccount(account1Id, account2Id)
fields := [][]string{{"is_delete_friendship", q5.ToString(1)}}
fm.updateFriendShip(a1, a2, fields)
return nil
}
@ -377,3 +381,14 @@ func (fm *FriendsMgr) checkInBlackList(account1Id, account2Id string) error {
}
return nil
}
func swapMiniAccount(account1Id, account2Id string) (string, string) {
// step2. insert friendship
compareResult := strings.Compare(account1Id, account2Id)
if compareResult > 0 {
temp := account1Id
account1Id = account2Id
account2Id = temp
}
return account1Id, account2Id
}