1c0aeb152a
- 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
109 lines
4.0 KiB
Go
109 lines
4.0 KiB
Go
package routes
|
||
|
||
import (
|
||
"net/http"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
"gorm.io/gorm"
|
||
|
||
adminhandler "wx_service/internal/admin"
|
||
authhandler "wx_service/internal/common/auth/handler"
|
||
uploadhandler "wx_service/internal/common/upload/handler"
|
||
rediscache "wx_service/internal/common/redis/cache"
|
||
oahandler "wx_service/internal/common/wechat_official/handler"
|
||
expiryhandler "wx_service/internal/expiry"
|
||
lawyerhandler "wx_service/internal/lawyer/handler"
|
||
marketinghandler "wx_service/internal/marketing/handler"
|
||
membershiphandler "wx_service/internal/membership/handler"
|
||
"wx_service/internal/middleware"
|
||
quitcheckinhandler "wx_service/internal/quitcheckin/handler"
|
||
rmhandler "wx_service/internal/remove_watermark/handler"
|
||
smokehandler "wx_service/internal/smoke/handler"
|
||
)
|
||
|
||
func Register(
|
||
router *gin.Engine,
|
||
db *gorm.DB,
|
||
authHandler *authhandler.AuthHandler,
|
||
videoHandler *rmhandler.VideoHandler,
|
||
smokeHandler *smokehandler.SmokeHandler,
|
||
quitPlanHandler *smokehandler.QuitPlanHandler,
|
||
redeemCodeHandler *membershiphandler.RedeemCodeHandler,
|
||
uploadHandler *uploadhandler.UploadHandler,
|
||
oaOAuthHandler *oahandler.OAuthHandler,
|
||
sessionCache *rediscache.SessionUserCache,
|
||
lawyerHandler *lawyerhandler.LawyerHandler,
|
||
expiryHandler *expiryhandler.Handler,
|
||
adminHandler *adminhandler.Handler,
|
||
adminToken string,
|
||
marketingCategoryHandler *marketinghandler.CategoryHandler,
|
||
marketingTemplateHandler *marketinghandler.TemplateHandler,
|
||
marketingDownloadHandler *marketinghandler.DownloadHandler,
|
||
marketingUserLogoHandler *marketinghandler.UserLogoHandler,
|
||
marketingAdPlacementHandler *marketinghandler.AdPlacementHandler,
|
||
quitCheckinHandler *quitcheckinhandler.Handler,
|
||
) {
|
||
// Register 用来集中注册所有 HTTP 路由,便于工程结构更清晰:
|
||
// - main 只负责初始化(配置/DB/依赖注入)
|
||
// - routes 只负责把 URL 映射到 handler
|
||
api := router.Group("/api/v1")
|
||
{
|
||
// 登录接口:用微信 code 换取/创建用户并返回 session_key(作为后续 Bearer Token)
|
||
api.POST("/auth/login", authHandler.LoginWithWeChat)
|
||
// H5 开发调试登录(仅 debug 模式可用)
|
||
api.POST("/auth/dev-login", authHandler.DevLogin)
|
||
|
||
// 公众号网页授权:不需要登录(code 本身来自微信授权回调)
|
||
registerWeChatOfficialRoutes(api, oaOAuthHandler)
|
||
registerCommonPublicRoutes(api, uploadHandler)
|
||
|
||
if lawyerHandler != nil {
|
||
api.POST("/lawyers", lawyerHandler.Create)
|
||
}
|
||
|
||
// 需要登录的接口组:统一挂载鉴权中间件
|
||
protected := api.Group("")
|
||
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, marketingAdPlacementHandler)
|
||
}
|
||
|
||
apiV2 := router.Group("/api/v2")
|
||
{
|
||
protectedV2 := apiV2.Group("")
|
||
protectedV2.Use(middleware.AuthMiddleware(db, sessionCache))
|
||
protectedV2.Use(middleware.RequireUserMiddleware())
|
||
{
|
||
registerQuitCheckinRoutes(protectedV2, quitCheckinHandler)
|
||
}
|
||
}
|
||
|
||
registerAdminRoutes(router, adminHandler, marketingCategoryHandler, marketingTemplateHandler, marketingDownloadHandler, marketingAdPlacementHandler)
|
||
|
||
// 保质期提醒模块使用独立前缀 /api/expiry,与现有 /api/v1 并存。
|
||
expiryAPI := router.Group("/api/expiry")
|
||
{
|
||
expiryAPI.GET("/healthz", expiryHandler.Healthz)
|
||
|
||
expiryProtected := expiryAPI.Group("")
|
||
expiryProtected.Use(middleware.AuthMiddleware(db, sessionCache))
|
||
expiryProtected.Use(middleware.RequireUserMiddleware())
|
||
{
|
||
registerExpiryRoutes(expiryProtected, expiryHandler)
|
||
}
|
||
}
|
||
|
||
// 健康检查:用于容器/负载均衡探活
|
||
router.GET("/healthz", func(c *gin.Context) {
|
||
c.JSON(http.StatusOK, gin.H{"status": "ok"})
|
||
})
|
||
}
|