重构部分枚举, 让models包不依赖其他项目中的包
This commit is contained in:
@@ -1,15 +1,25 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"database/sql/driver"
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/notify"
|
||||
"go.uber.org/zap/zapcore"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// NotifierType 定义了通知器的类型。
|
||||
type NotifierType string
|
||||
|
||||
const (
|
||||
// NotifierTypeSMTP 表示 SMTP 邮件通知器。
|
||||
NotifierTypeSMTP NotifierType = "邮件"
|
||||
// NotifierTypeWeChat 表示企业微信通知器。
|
||||
NotifierTypeWeChat NotifierType = "企业微信"
|
||||
// NotifierTypeLark 表示飞书通知器。
|
||||
NotifierTypeLark NotifierType = "飞书"
|
||||
// NotifierTypeLog 表示日志通知器,作为最终的告警记录渠道。
|
||||
NotifierTypeLog NotifierType = "日志"
|
||||
)
|
||||
|
||||
// NotificationStatus 定义了通知发送尝试的状态枚举。
|
||||
type NotificationStatus string
|
||||
|
||||
@@ -19,40 +29,12 @@ const (
|
||||
NotificationStatusSkipped NotificationStatus = "已跳过" // 通知因某些原因被跳过(例如:用户未配置联系方式)
|
||||
)
|
||||
|
||||
// LogLevel is a custom type for zapcore.Level to handle database scanning and valuing.
|
||||
type LogLevel zapcore.Level
|
||||
|
||||
// Scan implements the sql.Scanner interface.
|
||||
func (l *LogLevel) Scan(value interface{}) error {
|
||||
var s string
|
||||
switch v := value.(type) {
|
||||
case []byte:
|
||||
s = string(v)
|
||||
case string:
|
||||
s = v
|
||||
default:
|
||||
return errors.New("LogLevel的类型无效")
|
||||
}
|
||||
|
||||
var zl zapcore.Level
|
||||
if err := zl.UnmarshalText([]byte(s)); err != nil {
|
||||
return err
|
||||
}
|
||||
*l = LogLevel(zl)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Value implements the driver.Valuer interface.
|
||||
func (l LogLevel) Value() (driver.Value, error) {
|
||||
return (zapcore.Level)(l).String(), nil
|
||||
}
|
||||
|
||||
// Notification 表示已发送或尝试发送的通知记录。
|
||||
type Notification struct {
|
||||
gorm.Model
|
||||
|
||||
// NotifierType 通知器类型 (例如:"邮件", "企业微信", "飞书", "日志")
|
||||
NotifierType notify.NotifierType `gorm:"type:varchar(20);not null;index" json:"notifier_type"`
|
||||
NotifierType NotifierType `gorm:"type:varchar(20);not null;index" json:"notifier_type"`
|
||||
// UserID 接收通知的用户ID,用于追溯通知记录到特定用户
|
||||
UserID uint `gorm:"index" json:"user_id"` // 增加 UserID 字段,并添加索引
|
||||
// Title 通知标题
|
||||
@@ -60,7 +42,7 @@ type Notification struct {
|
||||
// Message 通知内容
|
||||
Message string `gorm:"type:text;not null" json:"message"`
|
||||
// Level 通知级别 (例如:INFO, WARN, ERROR)
|
||||
Level LogLevel `gorm:"type:varchar(10);not null" json:"level"`
|
||||
Level SeverityLevel `gorm:"type:varchar(10);not null" json:"level"`
|
||||
// AlarmTimestamp 通知内容生成时的时间戳,与 ID 构成复合主键
|
||||
AlarmTimestamp time.Time `gorm:"primaryKey;not null" json:"alarm_timestamp"`
|
||||
// ToAddress 接收地址 (例如:邮箱地址, 企业微信ID, 日志标识符)
|
||||
|
||||
Reference in New Issue
Block a user