完善本地质量门禁与资金链路测试
This commit is contained in:
@@ -2,11 +2,9 @@ package router
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"hfb_sys/backend/internal/config"
|
||||
"hfb_sys/backend/internal/handler"
|
||||
smsintegration "hfb_sys/backend/internal/integrations/sms"
|
||||
"hfb_sys/backend/internal/middleware"
|
||||
"hfb_sys/backend/internal/modules/adminaudit"
|
||||
"hfb_sys/backend/internal/modules/adminauth"
|
||||
@@ -62,8 +60,9 @@ func New(cfg config.Config, deps Dependencies, logger *zap.Logger) *gin.Engine {
|
||||
engine.Use(middleware.Recovery(logger))
|
||||
jwtManager := auth.NewJWTManager(cfg.JWTSecret)
|
||||
|
||||
health := handler.NewHealthHandler()
|
||||
engine.GET("/health", health.Check)
|
||||
health := handler.NewHealthHandler(newReadinessChecks(deps))
|
||||
engine.GET("/health", health.Live)
|
||||
engine.GET("/health/ready", health.Ready)
|
||||
|
||||
// Swagger 文档路由(仅在非生产环境)
|
||||
if !config.IsProductionEnv(cfg.AppEnv) {
|
||||
@@ -399,7 +398,7 @@ func New(cfg config.Config, deps Dependencies, logger *zap.Logger) *gin.Engine {
|
||||
|
||||
api := engine.Group("/api")
|
||||
{
|
||||
api.GET("/health", health.Check)
|
||||
api.GET("/health", health.Ready)
|
||||
api.GET("/listing-publish-options", systemConfigHandler.PublishOptions)
|
||||
api.GET("/listing-publish-agreements", systemConfigHandler.ListingPublishAgreements)
|
||||
api.GET("/listing-sale-price-config", systemConfigHandler.SalePriceConfig)
|
||||
@@ -653,31 +652,7 @@ func New(cfg config.Config, deps Dependencies, logger *zap.Logger) *gin.Engine {
|
||||
adminRoutes.POST("/listings/:id/offline", requirePerm("listing:offline"), listingHandler.AdminOffline)
|
||||
adminRoutes.POST("/listings/:id/mark-abnormal", requirePerm("listing:offline"), listingHandler.AdminMarkAbnormal)
|
||||
|
||||
// 撞车后台(/admin/crash;兼容 /admin/mohong)
|
||||
if mohongHandler != nil {
|
||||
// 商品编辑需要拉分类列表,故 GET 用 product_view
|
||||
registerCrashAdmin := func(prefix string) {
|
||||
adminRoutes.GET(prefix+"/categories", requirePerm("mohong:product_view"), mohongHandler.AdminListCategories)
|
||||
adminRoutes.POST(prefix+"/categories", requirePerm("mohong:category"), mohongHandler.AdminCreateCategory)
|
||||
adminRoutes.PUT(prefix+"/categories/:id", requirePerm("mohong:category"), mohongHandler.AdminUpdateCategory)
|
||||
adminRoutes.DELETE(prefix+"/categories/:id", requirePerm("mohong:category"), mohongHandler.AdminDeleteCategory)
|
||||
adminRoutes.GET(prefix+"/products", requirePerm("mohong:product_view"), mohongHandler.AdminListProducts)
|
||||
adminRoutes.GET(prefix+"/products/:id", requirePerm("mohong:product_view"), mohongHandler.AdminGetProduct)
|
||||
adminRoutes.POST(prefix+"/products", requirePerm("mohong:product_manage"), mohongHandler.AdminCreateProduct)
|
||||
adminRoutes.PUT(prefix+"/products/:id", requirePerm("mohong:product_manage"), mohongHandler.AdminUpdateProduct)
|
||||
adminRoutes.DELETE(prefix+"/products/:id", requirePerm("mohong:product_manage"), mohongHandler.AdminDeleteProduct)
|
||||
adminRoutes.GET(prefix+"/orders", requirePerm("mohong:order_view"), mohongHandler.AdminListOrders)
|
||||
adminRoutes.GET(prefix+"/orders/:id", requirePerm("mohong:order_view"), mohongHandler.AdminGetOrder)
|
||||
adminRoutes.POST(prefix+"/orders/:id/receive", requirePerm("mohong:order_manage"), mohongHandler.AdminReceiveOrder)
|
||||
adminRoutes.POST(prefix+"/orders/:id/complete", requirePerm("mohong:order_manage"), mohongHandler.AdminCompleteOrder)
|
||||
adminRoutes.POST(prefix+"/orders/:id/cancel", requirePerm("mohong:order_manage"), mohongHandler.AdminCancelOrder)
|
||||
adminRoutes.POST(prefix+"/orders/:id/refund", requirePerm("mohong:order_manage"), paymentHandler.AdminRefundMohong)
|
||||
adminRoutes.GET(prefix+"/config", requirePerm("mohong:config"), mohongHandler.AdminGetConfig)
|
||||
adminRoutes.PUT(prefix+"/config", requirePerm("mohong:config"), mohongHandler.AdminUpdateConfig)
|
||||
}
|
||||
registerCrashAdmin("/crash")
|
||||
registerCrashAdmin("/mohong")
|
||||
}
|
||||
registerCrashAdminRoutes(adminRoutes, requirePerm, mohongHandler, paymentHandler)
|
||||
|
||||
adminRoutes.GET("/disputes", requirePerm("dispute:view"), disputeHandler.AdminList)
|
||||
adminRoutes.POST("/disputes/:id/arbitrate", requirePerm("dispute:arbitrate"), disputeHandler.AdminArbitrate)
|
||||
@@ -750,95 +725,12 @@ func New(cfg config.Config, deps Dependencies, logger *zap.Logger) *gin.Engine {
|
||||
adminRoutes.GET("/chats/listing-group-welcome", requirePerm("system_config:view"), chatHandler.AdminGetListingGroupWelcome)
|
||||
adminRoutes.PUT("/chats/listing-group-welcome", requirePerm("system_config:update"), chatHandler.AdminUpdateListingGroupWelcome)
|
||||
|
||||
// 二维码池管理
|
||||
adminRoutes.POST("/chats/qrcodes", requirePerm("qrcode:manage"), chatHandler.CreateQrCodeHandler)
|
||||
adminRoutes.POST("/chats/qrcodes/batch", requirePerm("qrcode:manage"), chatHandler.BatchCreateQrCodeHandler)
|
||||
adminRoutes.POST("/chats/qrcodes/batch-delete", requirePerm("qrcode:manage"), chatHandler.BatchDeleteQrCodeHandler)
|
||||
adminRoutes.GET("/chats/qrcodes", requirePerm("qrcode:view"), chatHandler.ListQrCodesHandler)
|
||||
adminRoutes.GET("/chats/qrcodes/stats", requirePerm("qrcode:view"), chatHandler.GetQrCodeStatsHandler)
|
||||
adminRoutes.POST("/chats/qrcodes/ocr-group-name", requirePerm("qrcode:manage"), chatHandler.RecognizeQrCodeGroupNameHandler)
|
||||
adminRoutes.POST("/chats/qrcodes/ocr-group-name/async", requirePerm("qrcode:manage"), chatHandler.SubmitOCRJobHandler)
|
||||
adminRoutes.GET("/chats/qrcodes/ocr-group-name/async/:jobId", requirePerm("qrcode:manage"), chatHandler.GetOCRJobResultHandler)
|
||||
adminRoutes.PATCH("/chats/qrcodes/:id", requirePerm("qrcode:manage"), chatHandler.UpdateQrCodeHandler)
|
||||
adminRoutes.DELETE("/chats/qrcodes/:id", requirePerm("qrcode:manage"), chatHandler.DeleteQrCodeHandler)
|
||||
|
||||
// 客服分组
|
||||
adminRoutes.GET("/chat-support-groups", requirePerm("chat:manage"), supportGroupHandler.List)
|
||||
adminRoutes.GET("/chat-support-groups/support-admins", requirePerm("chat:manage"), supportGroupHandler.ListSupportAdmins)
|
||||
adminRoutes.GET("/chat-support-groups/:id", requirePerm("chat:manage"), supportGroupHandler.FindByID)
|
||||
adminRoutes.POST("/chat-support-groups", requirePerm("chat:manage"), supportGroupHandler.Create)
|
||||
adminRoutes.PUT("/chat-support-groups/:id", requirePerm("chat:manage"), supportGroupHandler.Update)
|
||||
adminRoutes.DELETE("/chat-support-groups/:id", requirePerm("chat:manage"), supportGroupHandler.Delete)
|
||||
adminRoutes.PUT("/chat-support-groups/:id/members", requirePerm("chat:manage"), supportGroupHandler.AssignMembers)
|
||||
|
||||
// 角色管理
|
||||
adminRoutes.GET("/roles", requirePerm("role:manage"), adminRoleHandler.List)
|
||||
adminRoutes.GET("/roles/:id", requirePerm("role:manage"), adminRoleHandler.FindByID)
|
||||
adminRoutes.POST("/roles", requirePerm("role:manage"), adminRoleHandler.Create)
|
||||
adminRoutes.PUT("/roles/:id", requirePerm("role:manage"), adminRoleHandler.Update)
|
||||
adminRoutes.DELETE("/roles/:id", requirePerm("role:manage"), adminRoleHandler.Delete)
|
||||
adminRoutes.PUT("/roles/:id/permissions", requirePerm("role:manage"), adminRoleHandler.AssignPermissions)
|
||||
adminRoutes.GET("/permissions", requirePerm("role:manage"), adminRoleHandler.ListPermissions)
|
||||
|
||||
// 管理员管理
|
||||
adminRoutes.GET("/admin-users", requirePerm("admin_user:manage"), adminMgrHandler.List)
|
||||
adminRoutes.GET("/admin-users/:id", requirePerm("admin_user:manage"), adminMgrHandler.FindByID)
|
||||
adminRoutes.POST("/admin-users", requirePerm("admin_user:manage"), adminMgrHandler.Create)
|
||||
adminRoutes.PUT("/admin-users/:id", requirePerm("admin_user:manage"), adminMgrHandler.Update)
|
||||
adminRoutes.DELETE("/admin-users/:id", requirePerm("admin_user:manage"), adminMgrHandler.Delete)
|
||||
adminRoutes.PUT("/admin-users/:id/roles", requirePerm("admin_user:manage"), adminMgrHandler.AssignRoles)
|
||||
adminRoutes.PUT("/admin-users/me/password", adminMgrHandler.ChangeOwnPassword)
|
||||
adminRoutes.PUT("/admin-users/:id/password", requirePerm("admin_user:manage"), adminMgrHandler.ResetPassword)
|
||||
|
||||
// 公告管理
|
||||
adminRoutes.GET("/announcements", requirePerm("announcement:view"), announcementHandler.AdminList)
|
||||
adminRoutes.GET("/announcements/:id", requirePerm("announcement:view"), announcementHandler.AdminGetByID)
|
||||
adminRoutes.POST("/announcements", requirePerm("announcement:manage"), announcementHandler.Create)
|
||||
adminRoutes.PUT("/announcements/:id", requirePerm("announcement:manage"), announcementHandler.Update)
|
||||
adminRoutes.POST("/announcements/:id/publish", requirePerm("announcement:manage"), announcementHandler.Publish)
|
||||
adminRoutes.POST("/announcements/:id/archive", requirePerm("announcement:manage"), announcementHandler.Archive)
|
||||
adminRoutes.POST("/announcements/:id/unarchive", requirePerm("announcement:manage"), announcementHandler.Unarchive)
|
||||
adminRoutes.DELETE("/announcements/:id", requirePerm("announcement:manage"), announcementHandler.Delete)
|
||||
registerAdminManagementRoutes(adminRoutes, requirePerm, adminManagementHandlers{
|
||||
chat: chatHandler, supportGroup: supportGroupHandler, role: adminRoleHandler,
|
||||
admin: adminMgrHandler, announcement: announcementHandler,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return engine
|
||||
}
|
||||
|
||||
func newSMSProvider(cfg config.Config, logger *zap.Logger) smsintegration.Provider {
|
||||
switch strings.ToLower(strings.TrimSpace(cfg.SMS.Provider)) {
|
||||
case "aliyun":
|
||||
provider, err := smsintegration.NewAliyunProvider(smsintegration.AliyunConfig{
|
||||
AccessKeyID: cfg.SMS.AliyunAccessKeyID,
|
||||
AccessKeySecret: cfg.SMS.AliyunAccessKeySecret,
|
||||
Endpoint: cfg.SMS.AliyunEndpoint,
|
||||
SignName: cfg.SMS.AliyunSignName,
|
||||
LoginTemplateCode: cfg.SMS.AliyunLoginTemplateCode,
|
||||
}, logger)
|
||||
if err != nil {
|
||||
logger.Warn("阿里云短信服务初始化失败", zap.Error(err))
|
||||
return smsintegration.NewUnavailableProvider(err)
|
||||
}
|
||||
return provider
|
||||
default:
|
||||
return smsintegration.NewMockProvider(logger)
|
||||
}
|
||||
}
|
||||
|
||||
func newRealnameProvider(cfg config.Config, encryptor crypto.Encryptor, logger *zap.Logger) realname.Provider {
|
||||
switch strings.ToLower(strings.TrimSpace(cfg.Realname.Provider)) {
|
||||
case "cloudmarket", "aliyun_cloudmarket":
|
||||
provider, err := realname.NewCloudMarketProvider(realname.CloudMarketConfig{
|
||||
URL: cfg.Realname.CloudMarketURL,
|
||||
AppCode: cfg.Realname.CloudMarketAppCode,
|
||||
Encryptor: encryptor,
|
||||
})
|
||||
if err != nil {
|
||||
logger.Warn("实名认证服务初始化失败", zap.Error(err))
|
||||
return realname.NewUnavailableProvider(err)
|
||||
}
|
||||
return provider
|
||||
default:
|
||||
return realname.NewMockProvider(encryptor)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user