feat(marketing): user profile update, ad placement management, logo limits
- Add PUT /auth/profile endpoint for nickname and avatar updates - Add ad_placements table and CRUD admin API for managing ad units - Add GET /marketing/ad-config public API for mini-program to fetch ad config - Reduce logo limit from 10 to 3 per user, add 2MB file size validation Made-with: Cursor
This commit is contained in:
@@ -13,6 +13,7 @@ func registerAdminRoutes(
|
||||
categoryHandler *marketinghandler.CategoryHandler,
|
||||
templateHandler *marketinghandler.TemplateHandler,
|
||||
downloadHandler *marketinghandler.DownloadHandler,
|
||||
adPlacementHandler *marketinghandler.AdPlacementHandler,
|
||||
) {
|
||||
if handler == nil {
|
||||
return
|
||||
@@ -107,11 +108,21 @@ func registerAdminRoutes(
|
||||
marketing.PUT("/templates/:id", templateHandler.AdminUpdate)
|
||||
marketing.DELETE("/templates/:id", templateHandler.AdminDelete)
|
||||
|
||||
marketing.GET("/stats", downloadHandler.AdminStats)
|
||||
marketing.POST("/upload/oss/token", downloadHandler.AdminUploadToken)
|
||||
marketing.GET("/stats", downloadHandler.AdminStats)
|
||||
marketing.POST("/upload/oss/token", downloadHandler.AdminUploadToken)
|
||||
marketing.POST("/upload", downloadHandler.AdminUploadFile)
|
||||
}
|
||||
|
||||
if adPlacementHandler != nil {
|
||||
ads := protected.Group("/marketing/ad-placements")
|
||||
{
|
||||
ads.GET("", adPlacementHandler.AdminList)
|
||||
ads.POST("", adPlacementHandler.AdminCreate)
|
||||
ads.PUT("/:id", adPlacementHandler.AdminUpdate)
|
||||
ads.DELETE("/:id", adPlacementHandler.AdminDelete)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ func registerMarketingRoutes(
|
||||
templateHandler *marketinghandler.TemplateHandler,
|
||||
downloadHandler *marketinghandler.DownloadHandler,
|
||||
userLogoHandler *marketinghandler.UserLogoHandler,
|
||||
adPlacementHandler *marketinghandler.AdPlacementHandler,
|
||||
) {
|
||||
if categoryHandler == nil || templateHandler == nil || downloadHandler == nil {
|
||||
return
|
||||
@@ -24,6 +25,10 @@ func registerMarketingRoutes(
|
||||
marketing.GET("/categories", categoryHandler.ListEnabled)
|
||||
marketing.GET("/templates", templateHandler.ListEnabled)
|
||||
marketing.GET("/templates/:id", templateHandler.GetDetail)
|
||||
|
||||
if adPlacementHandler != nil {
|
||||
marketing.GET("/ad-config", adPlacementHandler.GetAdConfig)
|
||||
}
|
||||
}
|
||||
|
||||
protectedMarketing := protected.Group("/marketing")
|
||||
|
||||
@@ -40,6 +40,7 @@ func Register(
|
||||
marketingTemplateHandler *marketinghandler.TemplateHandler,
|
||||
marketingDownloadHandler *marketinghandler.DownloadHandler,
|
||||
marketingUserLogoHandler *marketinghandler.UserLogoHandler,
|
||||
marketingAdPlacementHandler *marketinghandler.AdPlacementHandler,
|
||||
quitCheckinHandler *quitcheckinhandler.Handler,
|
||||
) {
|
||||
// Register 用来集中注册所有 HTTP 路由,便于工程结构更清晰:
|
||||
@@ -65,13 +66,14 @@ func Register(
|
||||
protected.Use(middleware.AuthMiddleware(db, sessionCache))
|
||||
protected.Use(middleware.RequireUserMiddleware())
|
||||
{
|
||||
protected.PUT("/auth/profile", authHandler.UpdateProfile)
|
||||
registerCommonRoutes(protected, uploadHandler)
|
||||
registerRemoveWatermarkRoutes(api, protected, videoHandler)
|
||||
registerMembershipRoutes(protected, redeemCodeHandler)
|
||||
registerSmokeRoutes(protected, smokeHandler, quitPlanHandler)
|
||||
}
|
||||
|
||||
registerMarketingRoutes(api, protected, adminToken, marketingCategoryHandler, marketingTemplateHandler, marketingDownloadHandler, marketingUserLogoHandler)
|
||||
registerMarketingRoutes(api, protected, adminToken, marketingCategoryHandler, marketingTemplateHandler, marketingDownloadHandler, marketingUserLogoHandler, marketingAdPlacementHandler)
|
||||
}
|
||||
|
||||
apiV2 := router.Group("/api/v2")
|
||||
@@ -84,7 +86,7 @@ func Register(
|
||||
}
|
||||
}
|
||||
|
||||
registerAdminRoutes(router, adminHandler, marketingCategoryHandler, marketingTemplateHandler, marketingDownloadHandler)
|
||||
registerAdminRoutes(router, adminHandler, marketingCategoryHandler, marketingTemplateHandler, marketingDownloadHandler, marketingAdPlacementHandler)
|
||||
|
||||
// 保质期提醒模块使用独立前缀 /api/expiry,与现有 /api/v1 并存。
|
||||
expiryAPI := router.Group("/api/expiry")
|
||||
|
||||
Reference in New Issue
Block a user