Feature/statistics api #26

Merged
Sansan merged 12 commits from feature/statistics-api into develop 2026-06-14 11:48:36 +02:00
2 changed files with 53 additions and 33 deletions
Showing only changes of commit 2f407f6eef - Show all commits
+16
View File
@@ -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
View File
@@ -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