From 882204ca93912388177e1f76c87ec4ac2a844206 Mon Sep 17 00:00:00 2001 From: Leon <147289645+LeoninCS@users.noreply.github.com> Date: Tue, 16 Dec 2025 18:49:26 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BD=BFisLiked=E5=8F=AF=E4=BB=A5=E6=AD=A3?= =?UTF-8?q?=E7=A1=AE=E8=8E=B7=E5=8F=96=EF=BC=8C=E5=B9=B6=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E4=BA=86=E6=97=B6=E9=97=B4=E4=BC=9A=E8=B4=9F=E5=80=BC=E7=9A=84?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/feed/handler.go | 13 +++++++++++-- internal/feed/service.go | 34 ++++++++++++++++++++++------------ 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/internal/feed/handler.go b/internal/feed/handler.go index 47e2f3f..84b6a4d 100644 --- a/internal/feed/handler.go +++ b/internal/feed/handler.go @@ -1,6 +1,7 @@ package feed import ( + "feedsystem_video_go/internal/middleware" "time" "github.com/gin-gonic/gin" @@ -27,7 +28,11 @@ func (f *FeedHandler) ListLatest(c *gin.Context) { if req.LatestTime > 0 { latestTime = time.Unix(req.LatestTime, 0) } - feedItems, err := f.service.ListLatest(c.Request.Context(), req.Limit, latestTime) + viewerAccountID, err := middleware.GetAccountID(c) + if err != nil { + viewerAccountID = 0 + } + feedItems, err := f.service.ListLatest(c.Request.Context(), req.Limit, latestTime, viewerAccountID) if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return @@ -44,7 +49,11 @@ func (f *FeedHandler) ListLikesCount(c *gin.Context) { if req.Limit <= 0 || req.Limit > 50 { req.Limit = 10 } - feedItems, err := f.service.ListLikesCount(c.Request.Context(), req.Limit, req.LikesCount) + viewerAccountID, err := middleware.GetAccountID(c) + if err != nil { + viewerAccountID = 0 + } + feedItems, err := f.service.ListLikesCount(c.Request.Context(), req.Limit, req.LikesCount, viewerAccountID) if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return diff --git a/internal/feed/service.go b/internal/feed/service.go index ce01be1..9831536 100644 --- a/internal/feed/service.go +++ b/internal/feed/service.go @@ -15,23 +15,28 @@ func NewFeedService(repo *FeedRepository, likeRepo *video.LikeRepository) *FeedS return &FeedService{repo: repo, likeRepo: likeRepo} } -func (f *FeedService) ListLatest(ctx context.Context, limit int, latestBefore time.Time) (ListLatestResponse, error) { +func (f *FeedService) ListLatest(ctx context.Context, limit int, latestBefore time.Time, viewerAccountID uint) (ListLatestResponse, error) { videos, err := f.repo.ListLatest(ctx, limit, latestBefore) if err != nil { return ListLatestResponse{}, err } - var nextTime time.Time + var nextTime int64 if len(videos) > 0 { - nextTime = videos[len(videos)-1].CreateTime + nextTime = videos[len(videos)-1].CreateTime.Unix() } else { - nextTime = time.Time{} + nextTime = 0 } hasMore := len(videos) == limit feedVideos := make([]FeedVideoItem, 0, len(videos)) for _, video := range videos { - isLiked, err := f.likeRepo.IsLiked(ctx, video.ID, video.AuthorID) - if err != nil { - return ListLatestResponse{}, err + var isLiked bool + if viewerAccountID == 0 { + isLiked = false + } else { + isLiked, err = f.likeRepo.IsLiked(ctx, video.ID, viewerAccountID) + if err != nil { + return ListLatestResponse{}, err + } } feedVideos = append(feedVideos, FeedVideoItem{ ID: video.ID, @@ -47,13 +52,13 @@ func (f *FeedService) ListLatest(ctx context.Context, limit int, latestBefore ti } resp := ListLatestResponse{ VideoList: feedVideos, - NextTime: nextTime.Unix(), + NextTime: nextTime, HasMore: hasMore, } return resp, nil } -func (f *FeedService) ListLikesCount(ctx context.Context, limit int, likesCountBefore int64) (ListLikesCountResponse, error) { +func (f *FeedService) ListLikesCount(ctx context.Context, limit int, likesCountBefore int64, viewerAccountID uint) (ListLikesCountResponse, error) { videos, err := f.repo.ListLikesCount(ctx, limit, likesCountBefore) if err != nil { return ListLikesCountResponse{}, err @@ -67,9 +72,14 @@ func (f *FeedService) ListLikesCount(ctx context.Context, limit int, likesCountB hasMore := len(videos) == limit feedVideos := make([]FeedVideoItem, 0, len(videos)) for _, video := range videos { - isLiked, err := f.likeRepo.IsLiked(ctx, video.ID, video.AuthorID) - if err != nil { - return ListLikesCountResponse{}, err + var isLiked bool + if viewerAccountID == 0 { + isLiked = false + } else { + isLiked, err = f.likeRepo.IsLiked(ctx, video.ID, viewerAccountID) + if err != nil { + return ListLikesCountResponse{}, err + } } feedVideos = append(feedVideos, FeedVideoItem{ ID: video.ID,