From a0df66587b4d6c47ef13b395d5a86f0a75a6751d Mon Sep 17 00:00:00 2001 From: Victor_Jay Date: Mon, 1 Jun 2026 20:22:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=85=B3=E6=B3=A8/?= =?UTF-8?q?=E7=B2=89=E4=B8=9D=E5=88=97=E8=A1=A8=E9=9A=90=E7=A7=81=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E5=81=87=E9=98=B3=E6=80=A7=E5=AF=BC=E8=87=B4=E6=9C=AC?= =?UTF-8?q?=E4=BA=BA=E4=B9=9F=E6=97=A0=E6=B3=95=E8=AE=BF=E9=97=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - follow_repo.go: GetFollowListPublic 改用显式 WHERE uid=? 避免 GORM 主键解析潜在问题 - follow_service.go: GetFollowListPublic 失败时默认公开并记录日志,而非返回错误 - follow_controller.go: 错误兜底时 Accessible 默认 true,避免误锁用户 --- internal/controller/follow_controller.go | 4 ++-- internal/repository/follow_repo.go | 9 ++++++--- internal/service/follow_service.go | 7 +++++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/internal/controller/follow_controller.go b/internal/controller/follow_controller.go index 708a659..1b016e3 100644 --- a/internal/controller/follow_controller.go +++ b/internal/controller/follow_controller.go @@ -140,7 +140,7 @@ func (fpc *FollowPageController) FollowersPage(c *gin.Context) { uid, _, _ := common.GetGinUser(c) result, err := fpc.followSvc.ListFollowers(uint(targetUID), uid, page, 20) if err != nil { - result = &service.FollowListResult{Items: []model.UserFollow{}, Total: 0} + result = &service.FollowListResult{Items: []model.UserFollow{}, Total: 0, Accessible: true} } c.HTML(http.StatusOK, "follow/followers.html", common.BuildPageData(c, gin.H{ @@ -170,7 +170,7 @@ func (fpc *FollowPageController) FollowingPage(c *gin.Context) { uid, _, _ := common.GetGinUser(c) result, err := fpc.followSvc.ListFollowing(uint(targetUID), uid, page, 20) if err != nil { - result = &service.FollowListResult{Items: []model.UserFollow{}, Total: 0} + result = &service.FollowListResult{Items: []model.UserFollow{}, Total: 0, Accessible: true} } c.HTML(http.StatusOK, "follow/following.html", common.BuildPageData(c, gin.H{ diff --git a/internal/repository/follow_repo.go b/internal/repository/follow_repo.go index d879087..91d3c8b 100644 --- a/internal/repository/follow_repo.go +++ b/internal/repository/follow_repo.go @@ -106,7 +106,10 @@ func (r *FollowRepo) IncrFollowingCount(userID uint, delta int) error { // GetFollowListPublic 查询用户关注列表公开性 func (r *FollowRepo) GetFollowListPublic(userID uint) (bool, error) { - var user model.User - err := r.db.Select("follow_list_public").First(&user, userID).Error - return user.FollowListPublic, err + var listPublic bool + err := r.db.Model(&model.User{}). + Select("follow_list_public"). + Where("uid = ?", userID). + Scan(&listPublic).Error + return listPublic, err } diff --git a/internal/service/follow_service.go b/internal/service/follow_service.go index 29325b3..e029916 100644 --- a/internal/service/follow_service.go +++ b/internal/service/follow_service.go @@ -2,6 +2,7 @@ package service import ( "fmt" + "log" "metazone.cc/metalab/internal/common" "metazone.cc/metalab/internal/model" @@ -132,7 +133,8 @@ func (s *FollowService) GetStatus(currentUserID, targetUserID uint) (*FollowStat func (s *FollowService) ListFollowers(userID, currentUserID uint, page, pageSize int) (*FollowListResult, error) { listPublic, err := s.repo.GetFollowListPublic(userID) if err != nil { - return nil, fmt.Errorf("查询公开设置: %w", err) + log.Printf("[FollowService] ListFollowers GetFollowListPublic error uid=%d: %v, fallback to public", userID, err) + listPublic = true } p := common.Pagination{Page: page, PageSize: pageSize} @@ -174,7 +176,8 @@ func (s *FollowService) ListFollowers(userID, currentUserID uint, page, pageSize func (s *FollowService) ListFollowing(userID, currentUserID uint, page, pageSize int) (*FollowListResult, error) { listPublic, err := s.repo.GetFollowListPublic(userID) if err != nil { - return nil, fmt.Errorf("查询公开设置: %w", err) + log.Printf("[FollowService] ListFollowing GetFollowListPublic error uid=%d: %v, fallback to public", userID, err) + listPublic = true } p := common.Pagination{Page: page, PageSize: pageSize}