🐛 Fix user has no publisher will causing filtering by visibility error

This commit is contained in:
LittleSheep 2025-02-22 23:19:11 +08:00
parent 6228c186d7
commit fd31120312

View File

@ -168,8 +168,34 @@ func FilterPostWithUserContext(c *fiber.Ctx, tx *gorm.DB, user *authm.Account) *
) )
} }
if len(self) == 0 && len(allowlist) == 0 {
tx = tx.Where( tx = tx.Where(
"(publisher_id IN ? OR visibility = ? "+ "(visibility = ? OR"+
"(visibility = ? AND ?) OR "+
"(visibility = ? AND NOT ?))",
AllVisibility,
SelectedVisibility,
datatypes.JSONQuery("visible_users").HasKey(strconv.Itoa(int(user.ID))),
FilteredVisibility,
datatypes.JSONQuery("invisible_users").HasKey(strconv.Itoa(int(user.ID))),
)
} else if len(self) == 0 {
tx = tx.Where(
"(visibility = ? OR"+
"(visibility = ? AND publisher_id IN ?) OR "+
"(visibility = ? AND ?) OR "+
"(visibility = ? AND NOT ?))",
AllVisibility,
FriendsVisibility,
allowlist,
SelectedVisibility,
datatypes.JSONQuery("visible_users").HasKey(strconv.Itoa(int(user.ID))),
FilteredVisibility,
datatypes.JSONQuery("invisible_users").HasKey(strconv.Itoa(int(user.ID))),
)
} else {
tx = tx.Where(
"(publisher_id IN ? OR visibility = ? OR"+
"(visibility = ? AND publisher_id IN ?) OR "+ "(visibility = ? AND publisher_id IN ?) OR "+
"(visibility = ? AND ?) OR "+ "(visibility = ? AND ?) OR "+
"(visibility = ? AND NOT ?))", "(visibility = ? AND NOT ?))",
@ -182,6 +208,7 @@ func FilterPostWithUserContext(c *fiber.Ctx, tx *gorm.DB, user *authm.Account) *
FilteredVisibility, FilteredVisibility,
datatypes.JSONQuery("invisible_users").HasKey(strconv.Itoa(int(user.ID))), datatypes.JSONQuery("invisible_users").HasKey(strconv.Itoa(int(user.ID))),
) )
}
if len(invisibleList) > 0 { if len(invisibleList) > 0 {
tx = tx.Where("publisher_id NOT IN ?", invisibleList) tx = tx.Where("publisher_id NOT IN ?", invisibleList)