Don't show banned friends on friend page
This commit is contained in:
parent
7da650ffc4
commit
7ceb14053b
|
@ -6,7 +6,6 @@ import (
|
|||
"time"
|
||||
|
||||
"code.nonshy.com/nonshy/website/pkg/log"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// Friend table.
|
||||
|
@ -249,11 +248,19 @@ func FriendIDsInCircleAreExplicit(userId uint64) []uint64 {
|
|||
|
||||
// CountFriendRequests gets a count of pending requests for the user.
|
||||
func CountFriendRequests(userID uint64) (int64, error) {
|
||||
var count int64
|
||||
var (
|
||||
count int64
|
||||
wheres = []string{
|
||||
"target_user_id = ? AND approved = ? AND ignored IS NOT true",
|
||||
"EXISTS (SELECT 1 FROM users WHERE users.id = source_user_id AND users.status = 'active')",
|
||||
}
|
||||
placeholders = []interface{}{
|
||||
userID, false,
|
||||
}
|
||||
)
|
||||
result := DB.Where(
|
||||
"target_user_id = ? AND approved = ? AND ignored IS NOT true",
|
||||
userID,
|
||||
false,
|
||||
strings.Join(wheres, " AND "),
|
||||
placeholders...,
|
||||
).Model(&Friend{}).Count(&count)
|
||||
return count, result.Error
|
||||
}
|
||||
|
@ -262,7 +269,7 @@ func CountFriendRequests(userID uint64) (int64, error) {
|
|||
func CountIgnoredFriendRequests(userID uint64) (int64, error) {
|
||||
var count int64
|
||||
result := DB.Where(
|
||||
"target_user_id = ? AND approved = ? AND ignored = ?",
|
||||
"target_user_id = ? AND approved = ? AND ignored = ? AND EXISTS (SELECT 1 FROM users WHERE users.id = friends.source_user_id AND users.status = 'active')",
|
||||
userID,
|
||||
false,
|
||||
true,
|
||||
|
@ -295,38 +302,77 @@ have sent and have not been answered.
|
|||
func PaginateFriends(user *User, requests bool, sent bool, ignored bool, pager *Pagination) ([]*User, error) {
|
||||
// We paginate over the Friend table.
|
||||
var (
|
||||
fs = []*Friend{}
|
||||
userIDs = []uint64{}
|
||||
query *gorm.DB
|
||||
fs = []*Friend{}
|
||||
userIDs = []uint64{}
|
||||
blockedUserIDs = BlockedUserIDs(user)
|
||||
wheres = []string{}
|
||||
placeholders = []interface{}{}
|
||||
query = DB.Model(&Friend{})
|
||||
)
|
||||
|
||||
if requests && sent && ignored {
|
||||
return nil, errors.New("requests and sent are mutually exclusive options, use one or neither")
|
||||
}
|
||||
|
||||
if requests {
|
||||
query = DB.Where(
|
||||
"target_user_id = ? AND approved = ? AND ignored IS NOT true",
|
||||
user.ID, false,
|
||||
)
|
||||
} else if sent {
|
||||
query = DB.Where(
|
||||
"source_user_id = ? AND approved = ? AND ignored IS NOT true",
|
||||
user.ID, false,
|
||||
)
|
||||
} else if ignored {
|
||||
query = DB.Where(
|
||||
"target_user_id = ? AND approved = ? AND ignored = ?",
|
||||
user.ID, false, true,
|
||||
)
|
||||
} else {
|
||||
query = DB.Where(
|
||||
"source_user_id = ? AND approved = ?",
|
||||
user.ID, true,
|
||||
)
|
||||
// Don't show our blocked users in the result.
|
||||
if len(blockedUserIDs) > 0 {
|
||||
wheres = append(wheres, "target_user_id NOT IN ?")
|
||||
placeholders = append(placeholders, blockedUserIDs)
|
||||
}
|
||||
|
||||
query = query.Order(pager.Sort)
|
||||
// Don't show disabled or banned users.
|
||||
var (
|
||||
// Source user is banned (Requests, Ignored tabs)
|
||||
bannedWhereRequest = `
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM users
|
||||
WHERE users.id = friends.source_user_id
|
||||
AND users.status = 'active'
|
||||
)
|
||||
`
|
||||
|
||||
// Target user is banned (Friends, Sent tabs)
|
||||
bannedWhereFriend = `
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM users
|
||||
WHERE users.id = friends.target_user_id
|
||||
AND users.status = 'active'
|
||||
)
|
||||
`
|
||||
)
|
||||
|
||||
if requests {
|
||||
wheres = append(wheres, "target_user_id = ? AND approved = ? AND ignored IS NOT true")
|
||||
placeholders = append(placeholders, user.ID, false)
|
||||
|
||||
// Don't show friend requests from currently banned/disabled users.
|
||||
wheres = append(wheres, bannedWhereRequest)
|
||||
} else if sent {
|
||||
wheres = append(wheres, "source_user_id = ? AND approved = ? AND ignored IS NOT true")
|
||||
placeholders = append(placeholders, user.ID, false)
|
||||
|
||||
// Don't show friends who are currently banned/disabled.
|
||||
wheres = append(wheres, bannedWhereFriend)
|
||||
} else if ignored {
|
||||
wheres = append(wheres, "target_user_id = ? AND approved = ? AND ignored = ?")
|
||||
placeholders = append(placeholders, user.ID, false, true)
|
||||
|
||||
// Don't show friend requests from currently banned/disabled users.
|
||||
wheres = append(wheres, bannedWhereRequest)
|
||||
} else {
|
||||
wheres = append(wheres, "source_user_id = ? AND approved = ?")
|
||||
placeholders = append(placeholders, user.ID, true)
|
||||
|
||||
// Don't show friends who are currently banned/disabled.
|
||||
wheres = append(wheres, bannedWhereFriend)
|
||||
}
|
||||
|
||||
query = query.Where(
|
||||
strings.Join(wheres, " AND "),
|
||||
placeholders...,
|
||||
).Order(pager.Sort)
|
||||
query.Model(&Friend{}).Count(&pager.Total)
|
||||
result := query.Offset(pager.GetOffset()).Limit(pager.PerPage).Find(&fs)
|
||||
if result.Error != nil {
|
||||
|
|
Loading…
Reference in New Issue
Block a user