package api import ( "github.com/gin-gonic/gin" "veza-backend-api/internal/handlers" "veza-backend-api/internal/repositories" "veza-backend-api/internal/services" ) // setupLiveRoutes configure les routes live streams func (r *APIRouter) setupLiveRoutes(router *gin.RouterGroup) { liveStreamRepo := repositories.NewLiveStreamRepository(r.db.GormDB) roomRepo := repositories.NewRoomRepository(r.db.GormDB) liveStreamService := services.NewLiveStreamService(liveStreamRepo, roomRepo) liveStreamHandler := handlers.NewLiveStreamHandler(liveStreamService, r.logger) callbackHandler := handlers.NewLiveStreamCallbackHandler(liveStreamService, r.logger) live := router.Group("/live") { // v0.10.6 F471: Nginx-RTMP callbacks (secret-protected, no auth) live.POST("/callback/publish", callbackHandler.HandlePublish) live.POST("/callback/publish_done", callbackHandler.HandlePublishDone) // Protected routes (me/* MUST come before :id) if r.config != nil && r.config.AuthMiddleware != nil { protected := live.Group("") protected.Use(r.config.AuthMiddleware.RequireAuth()) r.applyCSRFProtection(protected) protected.GET("/streams/me", liveStreamHandler.GetMyStreams) protected.GET("/streams/me/key", liveStreamHandler.GetMyStreamKey) protected.POST("/streams/me/key/regenerate", liveStreamHandler.RegenerateStreamKey) protected.POST("/streams", liveStreamHandler.CreateLiveStream) protected.PUT("/streams/:id", liveStreamHandler.UpdateLiveStream) } // Public routes (after protected) live.GET("/streams", liveStreamHandler.ListLiveStreams) live.GET("/streams/:id", liveStreamHandler.GetLiveStream) } }