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:
nepiedg
2026-04-04 04:02:06 +08:00
parent b4170b4863
commit 1c0aeb152a
11 changed files with 347 additions and 7 deletions
+4 -2
View File
@@ -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")