feat: move marketing admin to /api/admin and remove built-in page

This commit is contained in:
root
2026-03-10 01:14:30 +08:00
parent d8623fab8f
commit 59508efb05
3 changed files with 27 additions and 522 deletions
+26 -1
View File
@@ -4,9 +4,16 @@ import (
"github.com/gin-gonic/gin"
adminhandler "wx_service/internal/admin"
marketinghandler "wx_service/internal/marketing/handler"
)
func registerAdminRoutes(router *gin.Engine, handler *adminhandler.Handler) {
func registerAdminRoutes(
router *gin.Engine,
handler *adminhandler.Handler,
categoryHandler *marketinghandler.CategoryHandler,
templateHandler *marketinghandler.TemplateHandler,
downloadHandler *marketinghandler.DownloadHandler,
) {
if handler == nil {
return
}
@@ -39,6 +46,24 @@ func registerAdminRoutes(router *gin.Engine, handler *adminhandler.Handler) {
protected.GET("/memberships/redeem-codes", handler.ListMembershipRedeemCodes)
protected.POST("/memberships/redeem-codes", handler.CreateMembershipRedeemCodes)
protected.POST("/memberships/redeem-codes/:id/status", handler.UpdateMembershipRedeemCodeStatus)
if categoryHandler != nil && templateHandler != nil && downloadHandler != nil {
marketing := protected.Group("/marketing")
{
marketing.GET("/categories", categoryHandler.AdminList)
marketing.POST("/categories", categoryHandler.AdminCreate)
marketing.PUT("/categories/:id", categoryHandler.AdminUpdate)
marketing.DELETE("/categories/:id", categoryHandler.AdminDelete)
marketing.GET("/templates", templateHandler.AdminList)
marketing.POST("/templates", templateHandler.AdminCreate)
marketing.PUT("/templates/:id", templateHandler.AdminUpdate)
marketing.DELETE("/templates/:id", templateHandler.AdminDelete)
marketing.GET("/stats", downloadHandler.AdminStats)
marketing.POST("/upload/qiniu/token", downloadHandler.AdminQiniuToken)
}
}
}
}
}
+1 -31
View File
@@ -2,8 +2,6 @@ package routes
import (
"net/http"
"os"
"path/filepath"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
@@ -22,29 +20,6 @@ import (
smokehandler "wx_service/internal/smoke/handler"
)
func resolveMarketingPage() string {
candidates := []string{
filepath.Join("web", "marketing", "index.html"),
filepath.Join("..", "web", "marketing", "index.html"),
}
if executable, err := os.Executable(); err == nil {
exeDir := filepath.Dir(executable)
candidates = append(candidates,
filepath.Join(exeDir, "web", "marketing", "index.html"),
filepath.Join(exeDir, "..", "web", "marketing", "index.html"),
)
}
for _, path := range candidates {
if _, err := os.Stat(path); err == nil {
return path
}
}
return filepath.Join("web", "marketing", "index.html")
}
func Register(
router *gin.Engine,
db *gorm.DB,
@@ -93,7 +68,7 @@ func Register(
registerMarketingRoutes(api, protected, adminToken, marketingCategoryHandler, marketingTemplateHandler, marketingDownloadHandler)
}
registerAdminRoutes(router, adminHandler)
registerAdminRoutes(router, adminHandler, marketingCategoryHandler, marketingTemplateHandler, marketingDownloadHandler)
// 保质期提醒模块使用独立前缀 /api/expiry,与现有 /api/v1 并存。
expiryAPI := router.Group("/api/expiry")
@@ -108,11 +83,6 @@ func Register(
}
}
// Web 管理后台静态文件
marketingPage := resolveMarketingPage()
router.StaticFile("/admin/marketing", marketingPage)
router.StaticFile("/admin/marketing/", marketingPage)
// 健康检查:用于容器/负载均衡探活
router.GET("/healthz", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"status": "ok"})