110 lines
2.4 KiB
Go
110 lines
2.4 KiB
Go
package video
|
|
|
|
import (
|
|
"feedsystem_video_go/internal/middleware"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func NewLikeHandler(service *LikeService) *LikeHandler {
|
|
return &LikeHandler{service: service}
|
|
}
|
|
|
|
func (lh *LikeHandler) Like(c *gin.Context) {
|
|
var req LikeRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
c.JSON(400, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
if req.VideoID <= 0 {
|
|
c.JSON(400, gin.H{"error": "video_id is required"})
|
|
return
|
|
}
|
|
|
|
accountID, err := middleware.GetAccountID(c)
|
|
if err != nil {
|
|
c.JSON(400, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
like := &Like{
|
|
VideoID: req.VideoID,
|
|
AccountID: accountID,
|
|
}
|
|
if err := lh.service.Like(c.Request.Context(), like); err != nil {
|
|
c.JSON(500, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(200, gin.H{"message": "like success"})
|
|
}
|
|
|
|
func (lh *LikeHandler) Unlike(c *gin.Context) {
|
|
var req LikeRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
c.JSON(400, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
if req.VideoID <= 0 {
|
|
c.JSON(400, gin.H{"error": "video_id is required"})
|
|
return
|
|
}
|
|
|
|
accountID, err := middleware.GetAccountID(c)
|
|
if err != nil {
|
|
c.JSON(400, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
like := &Like{
|
|
VideoID: req.VideoID,
|
|
AccountID: accountID,
|
|
}
|
|
if err := lh.service.Unlike(c.Request.Context(), like); err != nil {
|
|
c.JSON(500, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(200, gin.H{"message": "unlike success"})
|
|
}
|
|
|
|
func (lh *LikeHandler) IsLiked(c *gin.Context) {
|
|
var req LikeRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
c.JSON(400, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
if req.VideoID <= 0 {
|
|
c.JSON(400, gin.H{"error": "video_id is required"})
|
|
return
|
|
}
|
|
|
|
accountID, err := middleware.GetAccountID(c)
|
|
if err != nil {
|
|
c.JSON(400, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
isLiked, err := lh.service.IsLiked(c.Request.Context(), req.VideoID, accountID)
|
|
if err != nil {
|
|
c.JSON(500, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(200, gin.H{"is_liked": isLiked})
|
|
}
|
|
|
|
func (lh *LikeHandler) GetLikesCount(c *gin.Context) {
|
|
var req LikeRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
c.JSON(400, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
if req.VideoID <= 0 {
|
|
c.JSON(400, gin.H{"error": "video_id is required"})
|
|
return
|
|
}
|
|
likesCount, err := lh.service.GetLikesCount(c.Request.Context(), req.VideoID)
|
|
if err != nil {
|
|
c.JSON(500, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(200, gin.H{"likes_count": likesCount})
|
|
}
|