Fix client friend status mapping

- Add explicit client friend status constants and resolver
- Return dynamic friend status from profileInfo and friend/search
- Accept invite_code when loading profileInfo targets
- Align live support friend status values with client expectations

Signed-off-by: Sean Du <do4suki@gmail.com>
This commit is contained in:
2026-06-05 22:55:00 +08:00
parent bac2335f14
commit 45eef9566a
5 changed files with 68 additions and 5 deletions
+45
View File
@@ -16,6 +16,13 @@ const (
FriendListPageSize = 40
)
const (
ClientFriendStatusNone = iota
ClientFriendStatusApproved
ClientFriendStatusPending
ClientFriendStatusAwaitingApproval
)
type UserFriend struct {
ID int `xorm:"id pk autoincr"`
UserID int `xorm:"user_id unique(friend_pair) index"`
@@ -86,6 +93,44 @@ func EnsureMutualFriendWithIsNew(dbSession *xorm.Session, userID, friendUserID,
return EnsureFriendLink(dbSession, friendUserID, userID, status, friendIsNew)
}
func ResolveClientFriendStatus(dbSession *xorm.Session, userID, targetUserID int) (int, error) {
if dbSession == nil || userID <= 0 || targetUserID <= 0 || userID == targetUserID {
return ClientFriendStatusNone, nil
}
link := UserFriend{}
has, err := dbSession.Table(new(UserFriend)).
Where("user_id = ? AND friend_user_id = ?", userID, targetUserID).
Cols("status").
Get(&link)
if err != nil {
return ClientFriendStatusNone, err
}
if !has {
return ClientFriendStatusNone, nil
}
switch link.Status {
case FriendStatusApproved:
isMutual, err := dbSession.Table(new(UserFriend)).
Where("user_id = ? AND friend_user_id = ?", targetUserID, userID).
Where("status = ?", FriendStatusApproved).
Exist()
if err != nil {
return ClientFriendStatusNone, err
}
if isMutual {
return ClientFriendStatusApproved, nil
}
case FriendStatusPending:
return ClientFriendStatusPending, nil
case FriendStatusAwaitingApproval:
return ClientFriendStatusAwaitingApproval, nil
}
return ClientFriendStatusNone, nil
}
func EnsureDefaultFriendship(dbSession *xorm.Session, userID int) error {
if dbSession == nil || userID <= 0 {
return nil