This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
package model
|
||||
|
||||
// GatewayRule 是挂在消息网关上的通知规则。
|
||||
//
|
||||
// 与 Rule 的区别只有触发来源:Rule 由定时器到期触发,
|
||||
// GatewayRule 由外部系统投递到网关的消息触发,两者互不干扰。
|
||||
type GatewayRule struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
UID uint `gorm:"index" json:"uid"`
|
||||
GatewayID uint `gorm:"index" json:"gateway_id"`
|
||||
Name string `json:"name"`
|
||||
AccountID uint `json:"account_id"`
|
||||
Type string `json:"type"`
|
||||
ConfigJson string `json:"config_json"`
|
||||
Enabled bool `gorm:"default:true" json:"enabled"`
|
||||
CreateAt int64 `json:"create_at"`
|
||||
}
|
||||
|
||||
// AsRule 把网关规则换成统一的执行结构。
|
||||
//
|
||||
// 执行层只认识 Rule:投递消息前把外部消息覆盖到 ConfigJson 上,
|
||||
// 再交给同一个 runner 执行即可。
|
||||
func (r *GatewayRule) AsRule() *Rule {
|
||||
return &Rule{
|
||||
UID: r.UID,
|
||||
Name: r.Name,
|
||||
AccountID: r.AccountID,
|
||||
Type: r.Type,
|
||||
ConfigJson: r.ConfigJson,
|
||||
Enabled: r.Enabled,
|
||||
CreateAt: r.CreateAt,
|
||||
}
|
||||
}
|
||||
|
||||
// GatewayRuleRequest 创建/编辑消息网关规则的请求体
|
||||
type GatewayRuleRequest struct {
|
||||
Name string `json:"name"`
|
||||
GatewayID uint `json:"gateway_id"`
|
||||
AccountID uint `json:"account_id"`
|
||||
Type string `json:"type"`
|
||||
ConfigJson string `json:"config_json"`
|
||||
Enabled *bool `json:"enabled"`
|
||||
}
|
||||
|
||||
// Validate 校验网关规则请求中与类型无关的通用部分
|
||||
func (r *GatewayRuleRequest) Validate() error {
|
||||
if r.Name == "" {
|
||||
return ErrValidation("规则名称不能为空")
|
||||
}
|
||||
if len(r.Name) > 64 {
|
||||
return ErrValidation("规则名称过长")
|
||||
}
|
||||
if r.Type == "" {
|
||||
return ErrValidation("规则类型不能为空")
|
||||
}
|
||||
if r.GatewayID == 0 {
|
||||
return ErrValidation("规则必须关联一个消息网关")
|
||||
}
|
||||
if r.ConfigJson == "" {
|
||||
return ErrValidation("规则配置不能为空")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user