All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m2s
- 新增成对迁移 000223(tb_phone_asset_association,含有效关系部分唯一索引与 down 守卫)与 000224(解绑导入任务表),不回填历史 - H5:need_bind_phone 三支判定(开关关闭完全短路);已有主号幂等建联;十项上限按手机号 advisory 串行化(含换绑到全新号的并发场景);换绑原子迁移与冲突整单回滚;不写遗留列 - 后台:关联列表、单项/批量解绑、CSV 导入解绑(B1–B16),超管/平台 gate + 资产数据范围复核,三态统一文案 - 读侧:卡/设备列表与详情按页一次 IN 聚合;两类导出补「关联手机号」列并保留历史表头反解兼容 - 脱敏:关联审计走独立动作/资源只写脱敏手机号;访问日志手机号类字段脱敏 - 同步主 Spec openspec/specs/phone-asset-association 并归档 AUG26-009,补齐 requirement-evidence 与入口矩阵,context-health 通过
63 lines
2.6 KiB
Go
63 lines
2.6 KiB
Go
package main
|
||
|
||
import (
|
||
"log"
|
||
"path/filepath"
|
||
|
||
"github.com/gofiber/fiber/v2"
|
||
|
||
"github.com/break/junhong_cmp_fiber/internal/bootstrap"
|
||
"github.com/break/junhong_cmp_fiber/internal/handler/admin"
|
||
"github.com/break/junhong_cmp_fiber/internal/handler/callback"
|
||
"github.com/break/junhong_cmp_fiber/internal/routes"
|
||
"github.com/break/junhong_cmp_fiber/pkg/openapi"
|
||
)
|
||
|
||
func main() {
|
||
outputFile := "./docs/admin-openapi.yaml"
|
||
if err := generateAdminDocs(outputFile); err != nil {
|
||
log.Fatalf("生成 OpenAPI 文档失败: %v", err)
|
||
}
|
||
|
||
absPath, _ := filepath.Abs(outputFile)
|
||
log.Printf("成功在以下位置生成 OpenAPI 文档: %s", absPath)
|
||
}
|
||
|
||
// generateAdminDocs 生成 Admin API 的 OpenAPI 文档
|
||
func generateAdminDocs(outputPath string) error {
|
||
// 1. 创建生成器
|
||
adminDoc := openapi.NewGenerator("Admin API", "1.0")
|
||
|
||
// 2. 创建临时 Fiber App 用于路由注册
|
||
app := fiber.New()
|
||
|
||
// 3. 创建所有 Handler(使用 nil 依赖,因为只需要路由结构)
|
||
// 新增 Handler 必须注册到 openapi.BuildDocHandlers,代理开放接口也从该入口进入文档生成器。
|
||
handlers := openapi.BuildDocHandlers()
|
||
handlers.Audit = admin.NewAuditHandler(nil, nil)
|
||
handlers.AssetPackageBatchOrder = admin.NewAssetPackageBatchOrderHandler(nil, nil)
|
||
handlers.BusinessUserGroup = admin.NewBusinessUserGroupHandler(nil, nil)
|
||
handlers.ShopBusinessOwnerImport = admin.NewShopBusinessOwnerImportHandler(nil)
|
||
handlers.PhoneAssetAssociation = admin.NewPhoneAssetAssociationHandler(nil, nil)
|
||
// 企业微信 Handler 在此显式装配,避免新增管理接口遗漏文档注册。
|
||
handlers.WeCom = admin.NewWeComHandler(nil, nil)
|
||
handlers.PaymentMerchant = admin.NewPaymentMerchantHandler(nil)
|
||
handlers.EmployeeCollection = admin.NewEmployeeCollectionHandler(nil, nil, nil)
|
||
handlers.WithdrawalQualification = admin.NewWithdrawalQualificationHandler(nil, nil, nil)
|
||
handlers.CTCCRealnameCallback = callback.NewCTCCRealnameHandler(nil, nil, nil, nil, nil, nil, nil)
|
||
handlers.CMCCRealnameCallback = callback.NewCMCCRealnameHandler(nil, nil, nil, nil, nil, nil, nil)
|
||
handlers.CUCCRealnameCallback = callback.NewCUCCRealnameHandler(nil, nil, nil, nil, nil, nil, nil)
|
||
handlers.CUCCRealnameRemovalCallback = callback.NewCUCCRealnameRemovalHandler(nil, nil, nil, nil, nil)
|
||
handlers.WeComApprovalCallback = callback.NewWeComApprovalHandler(nil)
|
||
|
||
// 4. 注册所有路由到文档生成器
|
||
routes.RegisterRoutesWithDoc(app, handlers, &bootstrap.Middlewares{}, adminDoc)
|
||
|
||
// 5. 保存规范到指定路径
|
||
if err := adminDoc.Save(outputPath); err != nil {
|
||
return err
|
||
}
|
||
|
||
return nil
|
||
}
|