veza/veza-backend-api/internal/api/routes_live.go
senke eb2862092d
Some checks failed
Backend API CI / test-unit (push) Failing after 0s
Backend API CI / test-integration (push) Failing after 0s
Frontend CI / test (push) Failing after 0s
Storybook Audit / Build & audit Storybook (push) Failing after 0s
feat(v0.10.6): Livestreaming basique F471-F476
- Backend: callbacks on_publish/on_publish_done, UpdateStreamURL, GetByStreamKey
- Nginx-RTMP: config infra, docker-compose service (profil live)
- Frontend: stream_url dans LiveStream, HLS.js dans LiveViewPlayer, état Stream terminé
- Chat: rate limit send_live_message 1 msg/3s pour rooms live_streams
- Env: RTMP_CALLBACK_SECRET, STREAM_HLS_BASE_URL, NGINX_RTMP_HOST
- Roadmap v0.10.6 marquée DONE
2026-03-10 10:21:57 +01:00

39 lines
1.6 KiB
Go

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)
}
}