feat: Add deprecation middleware for legacy endpoints
- Create middleware/deprecation.go with DeprecationMiddleware - Adds Warning and Deprecation headers to old endpoints - Apply middleware to all non-/api/v1 routes: /version, /dbtest, /health, /character*, /download*, /sync/*, /music/* - Message: 'Deprecated: This endpoint is deprecated. Use /api/v1/ endpoints instead.' Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
@@ -0,0 +1,16 @@
|
|||||||
|
package middleware
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/labstack/echo/v5"
|
||||||
|
)
|
||||||
|
|
||||||
|
// DeprecationMiddleware adds deprecation warning to responses
|
||||||
|
// for old endpoints that are being phased out in favor of /api/v1/*
|
||||||
|
func DeprecationMiddleware(next echo.HandlerFunc) echo.HandlerFunc {
|
||||||
|
return func(c *echo.Context) error {
|
||||||
|
// Add deprecation warning header
|
||||||
|
c.Response().Header().Add("Warning", `299 - "Deprecated: This endpoint is deprecated. Use /api/v1/ endpoints instead."`)
|
||||||
|
c.Response().Header().Add("Deprecation", "true")
|
||||||
|
return next(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
+37
-33
@@ -13,7 +13,6 @@ import (
|
|||||||
echoMiddleware "github.com/labstack/echo/v5/middleware"
|
echoMiddleware "github.com/labstack/echo/v5/middleware"
|
||||||
echoSwagger "github.com/swaggo/echo-swagger/v2"
|
echoSwagger "github.com/swaggo/echo-swagger/v2"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
"music-server/internal/logging"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// @Title MusicServer API
|
// @Title MusicServer API
|
||||||
@@ -59,51 +58,56 @@ func (s *Server) RegisterRoutes() http.Handler {
|
|||||||
// Swagger UI
|
// Swagger UI
|
||||||
e.GET("/swagger/*", echoSwagger.WrapHandler)
|
e.GET("/swagger/*", echoSwagger.WrapHandler)
|
||||||
|
|
||||||
|
// ============================================
|
||||||
|
// Legacy Endpoints (Deprecated - use /api/v1/ instead)
|
||||||
|
// ============================================
|
||||||
|
deprecatedMiddleware := middleware.DeprecationMiddleware
|
||||||
|
|
||||||
health := NewHealthHandler()
|
health := NewHealthHandler()
|
||||||
e.GET("/health", health.HealthCheck)
|
e.GET("/health", deprecatedMiddleware(health.HealthCheck))
|
||||||
|
|
||||||
version := NewVersionHandler()
|
version := NewVersionHandler()
|
||||||
e.GET("/version", version.GetLatestVersion)
|
e.GET("/version", deprecatedMiddleware(version.GetLatestVersion))
|
||||||
e.GET("/version/history", version.GetVersionHistory)
|
e.GET("/version/history", deprecatedMiddleware(version.GetVersionHistory))
|
||||||
|
|
||||||
character := NewCharacterHandler()
|
character := NewCharacterHandler()
|
||||||
e.GET("/character", character.GetCharacter)
|
e.GET("/character", deprecatedMiddleware(character.GetCharacter))
|
||||||
e.GET("/characters", character.GetCharacterList)
|
e.GET("/characters", deprecatedMiddleware(character.GetCharacterList))
|
||||||
|
|
||||||
download := NewDownloadHandler()
|
download := NewDownloadHandler()
|
||||||
e.GET("/download", download.checkLatest)
|
e.GET("/download", deprecatedMiddleware(download.checkLatest))
|
||||||
e.GET("/download/list", download.listAssetsOfLatest)
|
e.GET("/download/list", deprecatedMiddleware(download.listAssetsOfLatest))
|
||||||
e.GET("/download/windows", download.downloadLatestWindows)
|
e.GET("/download/windows", deprecatedMiddleware(download.downloadLatestWindows))
|
||||||
e.GET("/download/linux", download.downloadLatestLinux)
|
e.GET("/download/linux", deprecatedMiddleware(download.downloadLatestLinux))
|
||||||
|
|
||||||
sync := NewSyncHandler()
|
sync := NewSyncHandler()
|
||||||
syncGroup := e.Group("/sync")
|
syncGroup := e.Group("/sync")
|
||||||
syncGroup.GET("", sync.SyncGamesNewOnlyChanges)
|
syncGroup.GET("", deprecatedMiddleware(sync.SyncGamesNewOnlyChanges))
|
||||||
syncGroup.GET("/progress", sync.SyncProgress)
|
syncGroup.GET("/progress", deprecatedMiddleware(sync.SyncProgress))
|
||||||
syncGroup.GET("/new", sync.SyncGamesNewOnlyChanges)
|
syncGroup.GET("/new", deprecatedMiddleware(sync.SyncGamesNewOnlyChanges))
|
||||||
syncGroup.GET("/full", sync.SyncGamesNewFull)
|
syncGroup.GET("/full", deprecatedMiddleware(sync.SyncGamesNewFull))
|
||||||
syncGroup.GET("/new/full", sync.SyncGamesNewFull)
|
syncGroup.GET("/new/full", deprecatedMiddleware(sync.SyncGamesNewFull))
|
||||||
syncGroup.GET("/quick", sync.SyncGamesNewOnlyChanges)
|
syncGroup.GET("/quick", deprecatedMiddleware(sync.SyncGamesNewOnlyChanges))
|
||||||
syncGroup.GET("/reset", sync.ResetGames)
|
syncGroup.GET("/reset", deprecatedMiddleware(sync.ResetGames))
|
||||||
|
|
||||||
music := NewMusicHandler()
|
music := NewMusicHandler()
|
||||||
musicGroup := e.Group("/music")
|
musicGroup := e.Group("/music")
|
||||||
musicGroup.GET("", music.GetSong)
|
musicGroup.GET("", deprecatedMiddleware(music.GetSong))
|
||||||
musicGroup.GET("/soundTest", music.GetSoundCheckSong)
|
musicGroup.GET("/soundTest", deprecatedMiddleware(music.GetSoundCheckSong))
|
||||||
musicGroup.GET("/reset", music.ResetMusic)
|
musicGroup.GET("/reset", deprecatedMiddleware(music.ResetMusic))
|
||||||
musicGroup.GET("/rand", music.GetRandomSong)
|
musicGroup.GET("/rand", deprecatedMiddleware(music.GetRandomSong))
|
||||||
musicGroup.GET("/rand/low", music.GetRandomSongLowChance)
|
musicGroup.GET("/rand/low", deprecatedMiddleware(music.GetRandomSongLowChance))
|
||||||
musicGroup.GET("/rand/classic", music.GetRandomSongClassic)
|
musicGroup.GET("/rand/classic", deprecatedMiddleware(music.GetRandomSongClassic))
|
||||||
musicGroup.GET("/info", music.GetSongInfo)
|
musicGroup.GET("/info", deprecatedMiddleware(music.GetSongInfo))
|
||||||
musicGroup.GET("/list", music.GetPlayedSongs)
|
musicGroup.GET("/list", deprecatedMiddleware(music.GetPlayedSongs))
|
||||||
musicGroup.GET("/next", music.GetNextSong)
|
musicGroup.GET("/next", deprecatedMiddleware(music.GetNextSong))
|
||||||
musicGroup.GET("/previous", music.GetPreviousSong)
|
musicGroup.GET("/previous", deprecatedMiddleware(music.GetPreviousSong))
|
||||||
musicGroup.GET("/all", music.GetAllGamesRandom)
|
musicGroup.GET("/all", deprecatedMiddleware(music.GetAllGamesRandom))
|
||||||
musicGroup.GET("/all/order", music.GetAllGames)
|
musicGroup.GET("/all/order", deprecatedMiddleware(music.GetAllGames))
|
||||||
musicGroup.GET("/all/random", music.GetAllGamesRandom)
|
musicGroup.GET("/all/random", deprecatedMiddleware(music.GetAllGamesRandom))
|
||||||
musicGroup.PUT("/played", music.PutPlayed)
|
musicGroup.PUT("/played", deprecatedMiddleware(music.PutPlayed))
|
||||||
musicGroup.GET("/addQue", music.AddLatestToQue)
|
musicGroup.GET("/addQue", deprecatedMiddleware(music.AddLatestToQue))
|
||||||
musicGroup.GET("/addPlayed", music.AddLatestPlayed)
|
musicGroup.GET("/addPlayed", deprecatedMiddleware(music.AddLatestPlayed))
|
||||||
|
|
||||||
// ============================================
|
// ============================================
|
||||||
// API v1 Routes with Token Authentication
|
// API v1 Routes with Token Authentication
|
||||||
|
|||||||
Reference in New Issue
Block a user