spark-server/internal/transport/http/router_admin.go
DESKTOP-L8OUL9F\gfl0034 d3a68c3cad feat(music): 分类多对多、后台完整编辑与 OpenAPI
新增总/子分类与曲目绑定;playlist 可按 categoryId 筛选并返回分类树;
popadmin 支持行内改曲名/排序/上下架/会员开关与封面背景音频上传;文档同步。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-24 10:38:06 +08:00

95 lines
2.8 KiB
Go

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