draft
This commit is contained in:
107
backend/internal/api/router.go
Normal file
107
backend/internal/api/router.go
Normal file
@@ -0,0 +1,107 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"pay-bridge/internal/api/handler"
|
||||
"pay-bridge/internal/api/middleware"
|
||||
"pay-bridge/internal/app"
|
||||
)
|
||||
|
||||
// SetupRouter 注册所有路由
|
||||
func SetupRouter(a *app.App) *gin.Engine {
|
||||
payHandler := handler.NewPayHandler(a.TradeSvc, a.RefundSvc)
|
||||
notifyHandler := handler.NewNotifyHandler(a.TradeSvc)
|
||||
adminHandler := handler.NewAdminHandler(a.MatchSvc, a.MerchantSvc, a.ReconSvc, a.ChannelSvc, a.AppSvc)
|
||||
authHandler := handler.NewAuthHandler(a.AdminAuthSvc)
|
||||
merchantHandler := handler.NewMerchantHandler(a.MerchantSvc)
|
||||
|
||||
r := gin.New()
|
||||
r.Use(gin.Recovery())
|
||||
r.Use(middleware.Trace())
|
||||
r.Use(middleware.CacheBody())
|
||||
|
||||
// 健康检查
|
||||
r.GET("/health", func(c *gin.Context) {
|
||||
c.JSON(200, gin.H{"status": "ok"})
|
||||
})
|
||||
|
||||
// 上游渠道回调(渠道验签,不走 appId 鉴权)
|
||||
notify := r.Group("/api/v1/notify")
|
||||
{
|
||||
notify.POST("/payment/:channelCode", notifyHandler.PaymentCallback)
|
||||
}
|
||||
|
||||
// 下游系统调用接口(appId+appSecret 签名鉴权)
|
||||
v1 := r.Group("/api/v1", middleware.Auth(a.AppSvc))
|
||||
{
|
||||
pay := v1.Group("/pay")
|
||||
{
|
||||
pay.POST("/unified-order", payHandler.UnifiedOrder)
|
||||
pay.GET("/query/:tradeNo", payHandler.QueryOrder)
|
||||
pay.POST("/close", payHandler.CloseOrder)
|
||||
pay.POST("/refund", payHandler.Refund)
|
||||
pay.GET("/refund/query/:refundNo", payHandler.QueryRefund)
|
||||
}
|
||||
|
||||
merchantGroup := v1.Group("/merchant")
|
||||
{
|
||||
merchantGroup.POST("", merchantHandler.CreateMerchant)
|
||||
merchantGroup.GET("", merchantHandler.ListMerchants)
|
||||
merchantGroup.POST("/upload-file", merchantHandler.UploadFile)
|
||||
merchantGroup.GET("/:merchantID", merchantHandler.GetMerchant)
|
||||
merchantGroup.POST("/:merchantID/apply", merchantHandler.Apply)
|
||||
merchantGroup.GET("/:merchantID/audit", merchantHandler.QueryAuditStatus)
|
||||
}
|
||||
}
|
||||
|
||||
// 管理后台接口
|
||||
adminPublic := r.Group("/api/v1/admin")
|
||||
{
|
||||
adminPublic.POST("/login", authHandler.Login)
|
||||
}
|
||||
|
||||
admin := r.Group("/api/v1/admin", middleware.JWTAuth(a.AdminAuthSvc))
|
||||
{
|
||||
admin.POST("/logout", authHandler.Logout)
|
||||
|
||||
// 应用管理
|
||||
appGroup := admin.Group("/app")
|
||||
{
|
||||
appGroup.POST("", adminHandler.CreateApp)
|
||||
appGroup.GET("", adminHandler.ListApps)
|
||||
appGroup.POST("/:appID/disable", adminHandler.DisableApp)
|
||||
appGroup.POST("/:appID/enable", adminHandler.EnableApp)
|
||||
appGroup.POST("/:appID/reset-secret", adminHandler.ResetAppSecret)
|
||||
}
|
||||
|
||||
// 收款匹配
|
||||
match := admin.Group("/match")
|
||||
{
|
||||
match.GET("/pending", adminHandler.ListPendingMatches)
|
||||
match.POST("/bind", adminHandler.ManualBindOrder)
|
||||
}
|
||||
|
||||
// 商户管理
|
||||
merchant := admin.Group("/merchant")
|
||||
{
|
||||
merchant.POST("", adminHandler.CreateMerchant)
|
||||
merchant.GET("", adminHandler.ListMerchants)
|
||||
merchant.POST("/upload-file", adminHandler.UploadMerchantFile)
|
||||
merchant.GET("/:merchantID", adminHandler.GetMerchant)
|
||||
merchant.POST("/:merchantID/freeze", adminHandler.FreezeMerchant)
|
||||
merchant.POST("/:merchantID/unfreeze", adminHandler.UnfreezeMerchant)
|
||||
merchant.POST("/:merchantID/apply", adminHandler.ApplyMerchant)
|
||||
merchant.GET("/:merchantID/audit", adminHandler.QueryAuditStatus)
|
||||
}
|
||||
|
||||
// 对账管理
|
||||
recon := admin.Group("/reconciliation")
|
||||
{
|
||||
recon.POST("/trigger", adminHandler.TriggerReconciliation)
|
||||
recon.GET("/report", adminHandler.GetReconciliationReport)
|
||||
recon.GET("/report/:reportID/exceptions", adminHandler.GetReconciliationExceptions)
|
||||
}
|
||||
}
|
||||
|
||||
return r
|
||||
}
|
||||
Reference in New Issue
Block a user