backend-ci.yml's `test -z "$(gofmt -l .)"` strict gate (added in
13c21ac11) failed on a backlog of unformatted files. None of the
85 files in this commit had been edited since the gate was added
because no push touched veza-backend-api/** in between, so the
gate never fired until today's CI fixes triggered it.
The diff is exclusively whitespace alignment in struct literals
and trailing-space comments. `go build ./...` and the full test
suite (with VEZA_SKIP_INTEGRATION=1 -short) pass identically.
72 lines
3.3 KiB
Go
72 lines
3.3 KiB
Go
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
|
|
}
|
|
}
|