Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
Fiber 组中间件按路径前缀生效,两处 gate 挂在空路径组上实际落到 /api/admin 前缀, 注册顺序在其之后的后台接口对代理与企业账号一律返回 403(含代理充值、代理自充 支付方式与订单等)。gate 改为挂在各自功能路径组上,代理与企业仅被拒绝这两组功能入口。
87 lines
4.2 KiB
Go
87 lines
4.2 KiB
Go
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,
|
||
})
|
||
}
|