package api import ( "github.com/gin-gonic/gin" "veza-backend-api/internal/core/analytics" "veza-backend-api/internal/services" ) // setupAnalyticsRoutes configure les routes pour les analytics func (r *APIRouter) setupAnalyticsRoutes(router *gin.RouterGroup) { if r.db == nil || r.db.GormDB == nil { return } analyticsService := services.NewAnalyticsService(r.db.GormDB, r.logger) analyticsHandler := analytics.NewHandler(analyticsService, r.logger) if r.config != nil && r.config.JobWorker != nil { analyticsHandler.SetJobWorker(r.config.JobWorker) } analyticsGroup := router.Group("/analytics") if r.config != nil && r.config.AuthMiddleware != nil { analyticsGroup.Use(r.config.AuthMiddleware.RequireAuth()) r.applyCSRFProtection(analyticsGroup) } { analyticsGroup.GET("/creator/stats", analyticsHandler.GetCreatorStats) analyticsGroup.GET("/creator/charts", analyticsHandler.GetCreatorCharts) analyticsGroup.GET("/creator/export", analyticsHandler.GetCreatorExport) analyticsGroup.GET("", analyticsHandler.GetAnalytics) analyticsGroup.POST("/events", analyticsHandler.RecordEvent) analyticsGroup.GET("/tracks/:id", analyticsHandler.GetTrackAnalyticsDashboard) analyticsGroup.GET("/traffic-sources", analyticsHandler.GetTrafficSources) analyticsGroup.GET("/device-breakdown", analyticsHandler.GetDeviceBreakdown) } // v0.11.0: Creator Analytics (F381-F395) creatorAnalyticsService := services.NewCreatorAnalyticsService(r.db.GormDB, r.logger) creatorHandler := analytics.NewCreatorAnalyticsHandler(creatorAnalyticsService, r.logger) creatorGroup := router.Group("/creator/analytics") if r.config != nil && r.config.AuthMiddleware != nil { creatorGroup.Use(r.config.AuthMiddleware.RequireAuth()) r.applyCSRFProtection(creatorGroup) } { creatorGroup.GET("/dashboard", creatorHandler.GetDashboard) // F381 creatorGroup.GET("/plays", creatorHandler.GetPlayEvolution) // F382 creatorGroup.GET("/sales", creatorHandler.GetSales) // F383 creatorGroup.GET("/discovery", creatorHandler.GetDiscoverySources) // F381 creatorGroup.GET("/geographic", creatorHandler.GetGeographic) // F381 creatorGroup.GET("/audience", creatorHandler.GetAudience) // F384 creatorGroup.GET("/live/:streamId", creatorHandler.GetLiveMetrics) // F385 creatorGroup.GET("/tracks", creatorHandler.GetTracks) // F381 creatorGroup.GET("/export", creatorHandler.ExportAnalytics) // F383 // v0.11.1: Advanced Analytics (F396-F399) advancedService := services.NewAdvancedAnalyticsService(r.db.GormDB, r.logger) advancedHandler := analytics.NewAdvancedAnalyticsHandler(advancedService, r.logger) creatorGroup.GET("/heatmap/:trackId", advancedHandler.GetTrackHeatmap) // F396 creatorGroup.GET("/compare", advancedHandler.ComparePeriods) // F397 creatorGroup.GET("/marketplace", advancedHandler.GetMarketplaceAnalytics) // F398 creatorGroup.GET("/alerts", advancedHandler.GetMetricAlerts) // F399 creatorGroup.POST("/alerts", advancedHandler.CreateAlert) // F399 creatorGroup.PUT("/alerts/preferences", advancedHandler.UpdateAlertPreference) // F399 creatorGroup.DELETE("/alerts/:alertId", advancedHandler.DeleteAlert) // F399 creatorGroup.POST("/alerts/check", advancedHandler.CheckAlerts) // F399 } }