mirror of
https://github.com/Dvorinka/Trackeep.git
synced 2026-06-05 04:52:58 +00:00
first test
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/trackeep/backend/config"
|
||||
"github.com/trackeep/backend/services"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// YouTubeChannelRequest represents the request for channel videos
|
||||
type YouTubeChannelRequest struct {
|
||||
ChannelID string `json:"channel_id"`
|
||||
MaxResults int `json:"max_results"`
|
||||
}
|
||||
|
||||
// GetFireshipVideos fetches latest videos from Fireship channel
|
||||
func GetFireshipVideos(c *gin.Context) {
|
||||
// Get max results from query parameter (default: 20)
|
||||
maxResults := 20
|
||||
if maxResultsStr := c.Query("max_results"); maxResultsStr != "" {
|
||||
if parsed, err := strconv.Atoi(maxResultsStr); err == nil && parsed > 0 && parsed <= 50 {
|
||||
maxResults = parsed
|
||||
}
|
||||
}
|
||||
|
||||
// Create YouTube channel service with cache
|
||||
var db *gorm.DB
|
||||
if config.GetDB() != nil {
|
||||
db = config.GetDB()
|
||||
}
|
||||
youtubeService := services.NewYouTubeService()
|
||||
cacheService := services.NewYouTubeCacheService(db)
|
||||
channelService := services.NewYouTubeChannelService(youtubeService, cacheService)
|
||||
|
||||
// Fetch Fireship videos
|
||||
videos, err := channelService.GetFireshipVideos(maxResults)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{
|
||||
"error": "Failed to fetch Fireship videos",
|
||||
"details": err.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"channel": "Fireship",
|
||||
"videos": videos,
|
||||
"count": len(videos),
|
||||
})
|
||||
}
|
||||
|
||||
// GetNetworkChuckVideos fetches latest videos from Network Chuck channel
|
||||
func GetNetworkChuckVideos(c *gin.Context) {
|
||||
// Get max results from query parameter (default: 20)
|
||||
maxResults := 20
|
||||
if maxResultsStr := c.Query("max_results"); maxResultsStr != "" {
|
||||
if parsed, err := strconv.Atoi(maxResultsStr); err == nil && parsed > 0 && parsed <= 50 {
|
||||
maxResults = parsed
|
||||
}
|
||||
}
|
||||
|
||||
// Create YouTube channel service with cache
|
||||
var db *gorm.DB
|
||||
if config.GetDB() != nil {
|
||||
db = config.GetDB()
|
||||
}
|
||||
youtubeService := services.NewYouTubeService()
|
||||
cacheService := services.NewYouTubeCacheService(db)
|
||||
channelService := services.NewYouTubeChannelService(youtubeService, cacheService)
|
||||
|
||||
// Fetch Network Chuck videos
|
||||
videos, err := channelService.GetNetworkChuckVideos(maxResults)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{
|
||||
"error": "Failed to fetch Network Chuck videos",
|
||||
"details": err.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"channel": "Network Chuck",
|
||||
"videos": videos,
|
||||
"count": len(videos),
|
||||
})
|
||||
}
|
||||
|
||||
// GetChannelVideos fetches videos from a specific channel
|
||||
func GetChannelVideos(c *gin.Context) {
|
||||
var req YouTubeChannelRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"error": "Invalid request body",
|
||||
"details": err.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// Set default max results if not provided
|
||||
if req.MaxResults <= 0 {
|
||||
req.MaxResults = 20
|
||||
}
|
||||
if req.MaxResults > 50 {
|
||||
req.MaxResults = 50
|
||||
}
|
||||
|
||||
// Create YouTube channel service with cache
|
||||
var db *gorm.DB
|
||||
if config.GetDB() != nil {
|
||||
db = config.GetDB()
|
||||
}
|
||||
youtubeService := services.NewYouTubeService()
|
||||
cacheService := services.NewYouTubeCacheService(db)
|
||||
channelService := services.NewYouTubeChannelService(youtubeService, cacheService)
|
||||
|
||||
// Get channel info first
|
||||
channelInfo, err := channelService.GetChannelInfo(req.ChannelID)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusNotFound, gin.H{
|
||||
"error": "Channel not found",
|
||||
"details": err.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// Fetch channel videos
|
||||
response, err := channelService.YouTubeService.GetChannelVideos(req.ChannelID, req.MaxResults, "")
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{
|
||||
"error": "Failed to fetch channel videos",
|
||||
"details": err.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"channel": channelInfo,
|
||||
"videos": response.Videos,
|
||||
"count": len(response.Videos),
|
||||
"next_page_token": response.NextPageToken,
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user