新增总/子分类与曲目绑定;playlist 可按 categoryId 筛选并返回分类树; popadmin 支持行内改曲名/排序/上下架/会员开关与封面背景音频上传;文档同步。 Co-authored-by: Cursor <cursoragent@cursor.com>
95 lines
2.8 KiB
Go
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)
|
|
}
|