package feed import ( "feedsystem_video_go/internal/middleware" "time" "github.com/gin-gonic/gin" ) type FeedHandler struct { service *FeedService } func NewFeedHandler(service *FeedService) *FeedHandler { return &FeedHandler{service: service} } func (f *FeedHandler) ListLatest(c *gin.Context) { var req ListLatestRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return } if req.Limit <= 0 || req.Limit > 50 { req.Limit = 10 } var latestTime time.Time if req.LatestTime > 0 { latestTime = time.Unix(req.LatestTime, 0) } 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 } c.JSON(200, feedItems) } func (f *FeedHandler) ListLikesCount(c *gin.Context) { var req ListLikesCountRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return } if req.Limit <= 0 || req.Limit > 50 { req.Limit = 10 } 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 } c.JSON(200, feedItems) } func (f *FeedHandler) ListByFollowing(c *gin.Context) { var req ListByFollowingRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return } if req.Limit <= 0 || req.Limit > 50 { req.Limit = 10 } viewerAccountID, err := middleware.GetAccountID(c) if err != nil { viewerAccountID = 0 } feedItems, err := f.service.ListByFollowing(c.Request.Context(), req.Limit, viewerAccountID) if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } c.JSON(200, feedItems) }