package api import ( "github.com/gin-gonic/gin" discovercore "veza-backend-api/internal/core/discover" ) // setupDiscoverRoutes configures discover endpoints (v0.10.1 F351-F355) func (r *APIRouter) setupDiscoverRoutes(router *gin.RouterGroup) { discoverService := discovercore.NewService(r.db.GormDB, r.logger) discoverHandler := discovercore.NewHandler(discoverService) // Public routes router.GET("/discover/genres", discoverHandler.ListGenres) router.GET("/discover/genre/:genre", discoverHandler.GetTracksByGenre) router.GET("/discover/tag/:tag", discoverHandler.GetTracksByTag) router.GET("/discover/playlists/editorial", discoverHandler.GetEditorialPlaylists) // v0.10.4 F141 // Auth-required: follow/unfollow if r.config.AuthMiddleware != nil { router.POST("/discover/genre/:genre/follow", r.config.AuthMiddleware.RequireAuth(), discoverHandler.FollowGenre) router.DELETE("/discover/genre/:genre/follow", r.config.AuthMiddleware.RequireAuth(), discoverHandler.UnfollowGenre) router.POST("/discover/tag/:tag/follow", r.config.AuthMiddleware.RequireAuth(), discoverHandler.FollowTag) router.DELETE("/discover/tag/:tag/follow", r.config.AuthMiddleware.RequireAuth(), discoverHandler.UnfollowTag) } else { router.POST("/discover/genre/:genre/follow", discoverHandler.FollowGenre) router.DELETE("/discover/genre/:genre/follow", discoverHandler.UnfollowGenre) router.POST("/discover/tag/:tag/follow", discoverHandler.FollowTag) router.DELETE("/discover/tag/:tag/follow", discoverHandler.UnfollowTag) } }