| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- // Package model 定义服务层使用的数据模型。
- package model
- import (
- "time"
- "github.com/Wei-Shaw/sub2api/internal/domain"
- )
- // ErrorPassthroughRule 全局错误透传规则
- // 用于控制上游错误如何返回给客户端
- type ErrorPassthroughRule struct {
- ID int64 `json:"id"`
- Name string `json:"name"` // 规则名称
- Enabled bool `json:"enabled"` // 是否启用
- Priority int `json:"priority"` // 优先级(数字越小优先级越高)
- ErrorCodes []int `json:"error_codes"` // 匹配的错误码列表(OR关系)
- Keywords []string `json:"keywords"` // 匹配的关键词列表(OR关系)
- MatchMode string `json:"match_mode"` // "any"(任一条件) 或 "all"(所有条件)
- Platforms []string `json:"platforms"` // 适用平台列表
- PassthroughCode bool `json:"passthrough_code"` // 是否透传原始状态码
- ResponseCode *int `json:"response_code"` // 自定义状态码(passthrough_code=false 时使用)
- PassthroughBody bool `json:"passthrough_body"` // 是否透传原始错误信息
- CustomMessage *string `json:"custom_message"` // 自定义错误信息(passthrough_body=false 时使用)
- SkipMonitoring bool `json:"skip_monitoring"` // 是否跳过运维监控记录
- Description *string `json:"description"` // 规则描述
- CreatedAt time.Time `json:"created_at"`
- UpdatedAt time.Time `json:"updated_at"`
- }
- // MatchModeAny 表示任一条件匹配即可
- const MatchModeAny = "any"
- // MatchModeAll 表示所有条件都必须匹配
- const MatchModeAll = "all"
- // 支持的平台常量
- const (
- PlatformAnthropic = domain.PlatformAnthropic
- PlatformOpenAI = domain.PlatformOpenAI
- PlatformGemini = domain.PlatformGemini
- PlatformAntigravity = domain.PlatformAntigravity
- PlatformGrok = domain.PlatformGrok
- PlatformKimi = domain.PlatformKimi
- PlatformZhipu = domain.PlatformZhipu
- PlatformDeepseek = domain.PlatformDeepseek
- PlatformMiniMax = domain.PlatformMiniMax
- )
- // AllPlatforms 返回所有支持的平台列表
- func AllPlatforms() []string {
- return []string{
- PlatformAnthropic,
- PlatformOpenAI,
- PlatformGemini,
- PlatformAntigravity,
- PlatformGrok,
- PlatformKimi,
- PlatformZhipu,
- PlatformDeepseek,
- PlatformMiniMax,
- }
- }
- // Validate 验证规则配置的有效性
- func (r *ErrorPassthroughRule) Validate() error {
- if r.Name == "" {
- return &ValidationError{Field: "name", Message: "name is required"}
- }
- if r.MatchMode != MatchModeAny && r.MatchMode != MatchModeAll {
- return &ValidationError{Field: "match_mode", Message: "match_mode must be 'any' or 'all'"}
- }
- // 至少需要配置一个匹配条件(错误码或关键词)
- if len(r.ErrorCodes) == 0 && len(r.Keywords) == 0 {
- return &ValidationError{Field: "conditions", Message: "at least one error_code or keyword is required"}
- }
- if !r.PassthroughCode && (r.ResponseCode == nil || *r.ResponseCode <= 0) {
- return &ValidationError{Field: "response_code", Message: "response_code is required when passthrough_code is false"}
- }
- if !r.PassthroughBody && (r.CustomMessage == nil || *r.CustomMessage == "") {
- return &ValidationError{Field: "custom_message", Message: "custom_message is required when passthrough_body is false"}
- }
- return nil
- }
- // ValidationError 表示验证错误
- type ValidationError struct {
- Field string
- Message string
- }
- func (e *ValidationError) Error() string {
- return e.Field + ": " + e.Message
- }
|