veza/veza-backend-api/internal/api/routes_queue.go

42 lines
1.5 KiB
Go

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