Files
junhong_cmp_fiber/internal/routes/package_traffic_alert.go
break 398a5e4282
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
fix(路由): 修正套餐真流量预警与资产自动续费的超管/平台 gate 作用域
Fiber 组中间件按路径前缀生效,两处 gate 挂在空路径组上实际落到 /api/admin 前缀,
注册顺序在其之后的后台接口对代理与企业账号一律返回 403(含代理充值、代理自充
支付方式与订单等)。gate 改为挂在各自功能路径组上,代理与企业仅被拒绝这两组功能入口。
2026-09-17 17:49:33 +08:00

87 lines
4.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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。
// gate 必须挂在功能路径组上Fiber 的组中间件按路径前缀生效,挂在空路径组上会落到
// /api/admin 前缀,从而拦截该层其余全部接口。
func registerPackageTrafficAlertRoutes(router fiber.Router, handler *admin.PackageTrafficAlertHandler, doc *openapi.Generator, basePath string) {
gate := 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 := router.Group("/package-traffic-alert-rules", gate)
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 := router.Group("/package-traffic-alerts", gate)
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,
})
}