From a21a79a2be2fc1a68f2aab2f9a16b39c18afc567 Mon Sep 17 00:00:00 2001 From: Leon <147289645+LeoninCS@users.noreply.github.com> Date: Fri, 26 Dec 2025 18:23:55 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=88=97?= =?UTF-8?q?=E5=87=BA=E7=82=B9=E8=B5=9E=E8=A7=86=E9=A2=91=E7=9A=84=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/http/router.go | 4 ++++ backend/internal/video/like_handler.go | 15 +++++++++++++++ backend/internal/video/like_repo.go | 17 +++++++++++++++++ backend/internal/video/like_service.go | 4 ++++ 4 files changed, 40 insertions(+) diff --git a/backend/internal/http/router.go b/backend/internal/http/router.go index d0407e4..baf8449 100644 --- a/backend/internal/http/router.go +++ b/backend/internal/http/router.go @@ -14,6 +14,7 @@ import ( func SetRouter(db *gorm.DB, cache *rediscache.Client) *gin.Engine { r := gin.Default() + r.Static("/static", "./.run/uploads") // account accountRepository := account.NewAccountRepository(db) accountService := account.NewAccountService(accountRepository, cache) @@ -44,6 +45,8 @@ func SetRouter(db *gorm.DB, cache *rediscache.Client) *gin.Engine { protectedVideoGroup := videoGroup.Group("") protectedVideoGroup.Use(middleware.JWTAuth(accountRepository, cache)) { + protectedVideoGroup.POST("/uploadVideo", videoHandler.UploadVideo) + protectedVideoGroup.POST("/uploadCover", videoHandler.UploadCover) protectedVideoGroup.POST("/publish", videoHandler.PublishVideo) } // like @@ -57,6 +60,7 @@ func SetRouter(db *gorm.DB, cache *rediscache.Client) *gin.Engine { protectedLikeGroup.POST("/like", likeHandler.Like) protectedLikeGroup.POST("/unlike", likeHandler.Unlike) protectedLikeGroup.POST("/isLiked", likeHandler.IsLiked) + protectedLikeGroup.POST("/listMyLikedVideos", likeHandler.ListMyLikedVideos) } // comment commentRepository := video.NewCommentRepository(db) diff --git a/backend/internal/video/like_handler.go b/backend/internal/video/like_handler.go index 7afaf37..e32b328 100644 --- a/backend/internal/video/like_handler.go +++ b/backend/internal/video/like_handler.go @@ -89,3 +89,18 @@ func (lh *LikeHandler) IsLiked(c *gin.Context) { } c.JSON(200, gin.H{"is_liked": isLiked}) } + +func (lh *LikeHandler) ListMyLikedVideos(c *gin.Context) { + accountID, err := middleware.GetAccountID(c) + if err != nil { + c.JSON(400, gin.H{"error": err.Error()}) + return + } + + videos, err := lh.service.ListLikedVideos(c.Request.Context(), accountID) + if err != nil { + c.JSON(500, gin.H{"error": err.Error()}) + return + } + c.JSON(200, videos) +} diff --git a/backend/internal/video/like_repo.go b/backend/internal/video/like_repo.go index 7db6362..57936f3 100644 --- a/backend/internal/video/like_repo.go +++ b/backend/internal/video/like_repo.go @@ -54,3 +54,20 @@ func (r *LikeRepository) BatchGetLiked(ctx context.Context, videoIDs []uint, acc } return likeMap, nil } + +func (r *LikeRepository) ListLikedVideos(ctx context.Context, accountID uint) ([]Video, error) { + var videos []Video + if accountID == 0 { + return videos, nil + } + err := r.db.WithContext(ctx). + Model(&Video{}). + Joins("JOIN likes ON likes.video_id = videos.id"). + Where("likes.account_id = ?", accountID). + Order("likes.created_at desc"). + Find(&videos).Error + if err != nil { + return nil, err + } + return videos, nil +} diff --git a/backend/internal/video/like_service.go b/backend/internal/video/like_service.go index f4fc242..dfd0fe4 100644 --- a/backend/internal/video/like_service.go +++ b/backend/internal/video/like_service.go @@ -64,3 +64,7 @@ func (s *LikeService) Unlike(ctx context.Context, like *Like) error { func (s *LikeService) IsLiked(ctx context.Context, videoID, accountID uint) (bool, error) { return s.repo.IsLiked(ctx, videoID, accountID) } + +func (s *LikeService) ListLikedVideos(ctx context.Context, accountID uint) ([]Video, error) { + return s.repo.ListLikedVideos(ctx, accountID) +}