package httpx import ( "github.com/gin-gonic/gin" adminhandler "spark-server/internal/transport/http/handler/admin" ) func registerAdminRoutes(r *gin.Engine, deps *EngineDeps) { if deps == nil || deps.AdminTokens == nil { return } auth := AdminAuth(deps.AdminTokens) var h *adminhandler.Handler if deps.Admin != nil { h = adminhandler.New(deps.Admin) } mh := adminhandler.NewMusic(deps.Music) // Shared user ops (popadmin Host 可将 /api/admin/users* 切到本服务) if h != nil { ug := r.Group("/api/admin") ug.Use(auth) { ug.GET("/api-doc", h.ApiDoc) ug.GET("/users", h.ListUsers) ug.GET("/users/by-email", h.UserByEmail) ug.GET("/users/by-nickname", h.UserByNickname) ug.GET("/users/by-device", h.UserByDevice) ug.GET("/users/by-ip", h.UserByIP) ug.GET("/users/:id", h.UserByID) ug.POST("/users/by-email/ban", h.BanByEmail) ug.POST("/users/by-email/whitelist", h.WhitelistByEmail) ug.POST("/users/by-email/mark-abnormal", h.MarkAbnormalByEmail) ug.POST("/users/by-email/reset-nickname", h.ResetNicknameByEmail) ug.POST("/users/by-email/reset-avatar", h.ResetAvatarByEmail) ug.POST("/users/by-email/reset-password", h.ResetPasswordByEmail) } } for _, prefix := range []string{"/api/admin/spark", "/api/admin/pop"} { g := r.Group(prefix) g.Use(auth) if h != nil { registerSparkAdmin(g, h) } registerMusicAdmin(g, mh) } } func registerSparkAdmin(g *gin.RouterGroup, h *adminhandler.Handler) { g.GET("/api-doc", h.ApiDoc) g.GET("/ops-catalog", h.OpsCatalog) g.GET("/im/stats", h.ImStats) g.GET("/im/messages", h.ImMessages) g.GET("/im/conversations", h.ImConversations) g.GET("/groups", h.ListGroups) g.GET("/groups/:groupId", h.GroupDetail) g.POST("/groups", h.UpsertGroup) g.DELETE("/groups/:groupId", h.DeleteGroup) g.GET("/groups/:groupId/export-zip", h.ExportGroupZip) g.GET("/users/by-nickname", h.UserByNickname) g.GET("/users/by-device", h.UserByDevice) g.GET("/users/by-ip", h.UserByIP) g.GET("/rankings/same-ip", h.SameIPRank) g.GET("/rankings/:type", h.Ranking) g.GET("/complaints", h.ListComplaints) g.POST("/complaints", h.AddComplaint) } func registerMusicAdmin(g *gin.RouterGroup, h *adminhandler.MusicHandler) { if h == nil { return } g.GET("/music", h.List) g.GET("/music/settings", h.GetSettings) g.PUT("/music/settings", h.PutSettings) g.GET("/music/categories", h.ListCategories) g.POST("/music/categories", h.CreateCategory) g.PATCH("/music/categories/:id", h.UpdateCategory) g.DELETE("/music/categories/:id", h.DeleteCategory) g.POST("/music", h.Create) g.PATCH("/music/:id", h.Update) g.DELETE("/music/:id", h.Delete) g.PUT("/music/:id/categories", h.SetTrackCategories) g.POST("/music/:id/cover", h.UploadCover) g.POST("/music/:id/background", h.UploadBackground) g.POST("/music/:id/audio", h.UploadAudio) }