package routes import ( "github.com/gofiber/fiber/v2" "github.com/break/junhong_cmp_fiber/internal/handler/admin" "github.com/break/junhong_cmp_fiber/internal/model/dto" "github.com/break/junhong_cmp_fiber/pkg/constants" "github.com/break/junhong_cmp_fiber/pkg/errors" "github.com/break/junhong_cmp_fiber/pkg/middleware" "github.com/break/junhong_cmp_fiber/pkg/openapi" ) // registerPackageTrafficAlertRoutes 注册套餐真流量预警规则与达量预警路由。 // 沿用超管/平台路由组级 gate 先例:代理、企业与个人客户账号一律 403。 func registerPackageTrafficAlertRoutes(router fiber.Router, handler *admin.PackageTrafficAlertHandler, doc *openapi.Generator, basePath string) { group := router.Group("", func(c *fiber.Ctx) error { userType := middleware.GetUserTypeFromContext(c.UserContext()) if userType != constants.UserTypeSuperAdmin && userType != constants.UserTypePlatform { return errors.New(errors.CodeForbidden, constants.PlatformManagementForbiddenMessage) } return c.Next() }) ruleGroup := group.Group("/package-traffic-alert-rules") rulePath := basePath + "/package-traffic-alert-rules" Register(ruleGroup, doc, rulePath, "GET", "", handler.ListRules, RouteSpec{ Summary: "查询套餐真流量预警规则列表", Description: "返回套餐、商品当前真流量额度、阈值、启用状态、备注与更新时间;仅超级管理员与平台账号可访问", Tags: []string{"套餐管理"}, Input: new(dto.ListPackageTrafficAlertRuleRequest), Output: new(dto.PackageTrafficAlertRuleListResponse), Auth: true, }) Register(ruleGroup, doc, rulePath, "POST", "", handler.CreateRule, RouteSpec{ Summary: "创建套餐真流量预警规则", Description: "每个套餐商品至多一条当前规则;创建时校验套餐存在且商品真流量额度大于零,阈值为 1%~100% 的小数百分比", Tags: []string{"套餐管理"}, Body: new(dto.CreatePackageTrafficAlertRuleRequest), Output: new(dto.PackageTrafficAlertRuleItem), Auth: true, }) Register(ruleGroup, doc, rulePath, "PUT", "/:id", handler.UpdateRule, RouteSpec{ Summary: "修改套餐真流量预警规则", Description: "允许修改阈值、启停与备注;修改不影响既有预警快照,停用后扫描不再创建新预警", Tags: []string{"套餐管理"}, Input: new(dto.UpdatePackageTrafficAlertRuleParams), Output: new(dto.PackageTrafficAlertRuleItem), Auth: true, }) alertGroup := group.Group("/package-traffic-alerts") alertPath := basePath + "/package-traffic-alerts" Register(alertGroup, doc, alertPath, "GET", "", handler.ListAlerts, RouteSpec{ Summary: "查询套餐真流量达量预警列表", Description: "先应用既有资产数据范围;资产、套餐、用量、阈值、到期时间与触发时归属均为触发快照,支持按触发时间闭区间与通知投递结果筛选", Tags: []string{"套餐流量预警"}, Input: new(dto.ListPackageTrafficAlertRequest), Output: new(dto.PackageTrafficAlertListResponse), Auth: true, }) Register(alertGroup, doc, alertPath, "GET", "/:id", handler.GetAlert, RouteSpec{ Summary: "查询套餐真流量达量预警详情", Description: "越权与不存在统一按资源不可见处理;返回冻结快照、通知投递结果与通知已读展示期", Tags: []string{"套餐流量预警"}, Input: new(dto.IDReq), Output: new(dto.PackageTrafficAlertDetailResponse), Auth: true, }) Register(alertGroup, doc, alertPath, "POST", "/export", handler.ExportAlerts, RouteSpec{ Summary: "导出套餐真流量达量预警", Description: "复用既有异步导出任务,创建时冻结操作者、筛选、时间范围与可见资产范围;归属列按执行时当前归属补充", Tags: []string{"套餐流量预警"}, Body: new(dto.ExportPackageTrafficAlertRequest), Output: new(dto.CreateExportTaskResponse), Auth: true, }) }