package api import ( "github.com/gin-gonic/gin" "veza-backend-api/internal/handlers" "veza-backend-api/internal/services" ) // setupQueueRoutes configures the user playback queue routes func (r *APIRouter) setupQueueRoutes(router *gin.RouterGroup) { if r.config == nil || r.config.AuthMiddleware == nil { return } queueService := services.NewQueueService(r.db.GormDB, r.logger) queueHandler := handlers.NewQueueHandler(queueService, r.logger) queueSessionService := services.NewQueueSessionService(r.db.GormDB) queueSessionHandler := handlers.NewQueueSessionHandler(queueSessionService, r.logger) queue := router.Group("/queue") queue.Use(r.config.AuthMiddleware.RequireAuth()) r.applyCSRFProtection(queue) { queue.GET("", queueHandler.GetQueue) queue.PUT("", queueHandler.UpdateQueue) queue.POST("/items", queueHandler.AddQueueItem) queue.DELETE("/items/:id", queueHandler.RemoveQueueItem) queue.DELETE("", queueHandler.ClearQueue) // v0.203 Lot D1: Collaborative queue sessions queue.POST("/session", queueSessionHandler.CreateSession) queue.DELETE("/session/:token", queueSessionHandler.DeleteSession) queue.POST("/session/:token/items", queueSessionHandler.AddToSession) queue.DELETE("/session/:token/items/:id", queueSessionHandler.RemoveFromSession) } // GET /queue/session/:token - auth optional (for joining via share link) queuePublic := router.Group("/queue") { queuePublic.GET("/session/:token", queueSessionHandler.GetSession) } }