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) +}