issue_22 #41
@@ -2,6 +2,7 @@ package dto
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
 | 
						"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
 | 
				
			||||||
 | 
						"go.uber.org/zap/zapcore"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewListNotificationResponse 从模型数据创建通知列表响应 DTO
 | 
					// NewListNotificationResponse 从模型数据创建通知列表响应 DTO
 | 
				
			||||||
@@ -16,7 +17,7 @@ func NewListNotificationResponse(data []models.Notification, total int64, page,
 | 
				
			|||||||
			UserID:         item.UserID,
 | 
								UserID:         item.UserID,
 | 
				
			||||||
			Title:          item.Title,
 | 
								Title:          item.Title,
 | 
				
			||||||
			Message:        item.Message,
 | 
								Message:        item.Message,
 | 
				
			||||||
			Level:          item.Level,
 | 
								Level:          zapcore.Level(item.Level),
 | 
				
			||||||
			AlarmTimestamp: item.AlarmTimestamp,
 | 
								AlarmTimestamp: item.AlarmTimestamp,
 | 
				
			||||||
			ToAddress:      item.ToAddress,
 | 
								ToAddress:      item.ToAddress,
 | 
				
			||||||
			Status:         item.Status,
 | 
								Status:         item.Status,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -273,7 +273,7 @@ func (s *failoverService) recordNotificationAttempt(
 | 
				
			|||||||
		UserID:         userID,
 | 
							UserID:         userID,
 | 
				
			||||||
		Title:          content.Title,
 | 
							Title:          content.Title,
 | 
				
			||||||
		Message:        content.Message,
 | 
							Message:        content.Message,
 | 
				
			||||||
		Level:          content.Level,
 | 
							Level:          models.LogLevel(content.Level),
 | 
				
			||||||
		AlarmTimestamp: content.Timestamp,
 | 
							AlarmTimestamp: content.Timestamp,
 | 
				
			||||||
		ToAddress:      toAddress,
 | 
							ToAddress:      toAddress,
 | 
				
			||||||
		Status:         status,
 | 
							Status:         status,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,8 @@
 | 
				
			|||||||
package models
 | 
					package models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"database/sql/driver"
 | 
				
			||||||
 | 
						"errors"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"git.huangwc.com/pig/pig-farm-controller/internal/infra/notify"
 | 
						"git.huangwc.com/pig/pig-farm-controller/internal/infra/notify"
 | 
				
			||||||
@@ -17,6 +19,34 @@ const (
 | 
				
			|||||||
	NotificationStatusSkipped NotificationStatus = "已跳过"  // 通知因某些原因被跳过(例如:用户未配置联系方式)
 | 
						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 表示已发送或尝试发送的通知记录。
 | 
					// Notification 表示已发送或尝试发送的通知记录。
 | 
				
			||||||
type Notification struct {
 | 
					type Notification struct {
 | 
				
			||||||
	gorm.Model
 | 
						gorm.Model
 | 
				
			||||||
@@ -30,7 +60,7 @@ type Notification struct {
 | 
				
			|||||||
	// Message 通知内容
 | 
						// Message 通知内容
 | 
				
			||||||
	Message string `gorm:"type:text;not null" json:"message"`
 | 
						Message string `gorm:"type:text;not null" json:"message"`
 | 
				
			||||||
	// Level 通知级别 (例如:INFO, WARN, ERROR)
 | 
						// Level 通知级别 (例如:INFO, WARN, ERROR)
 | 
				
			||||||
	Level zapcore.Level `gorm:"type:varchar(10);not null" json:"level"`
 | 
						Level LogLevel `gorm:"type:varchar(10);not null" json:"level"`
 | 
				
			||||||
	// AlarmTimestamp 通知内容生成时的时间戳,与 ID 构成复合主键
 | 
						// AlarmTimestamp 通知内容生成时的时间戳,与 ID 构成复合主键
 | 
				
			||||||
	AlarmTimestamp time.Time `gorm:"primaryKey;not null" json:"alarm_timestamp"`
 | 
						AlarmTimestamp time.Time `gorm:"primaryKey;not null" json:"alarm_timestamp"`
 | 
				
			||||||
	// ToAddress 接收地址 (例如:邮箱地址, 企业微信ID, 日志标识符)
 | 
						// ToAddress 接收地址 (例如:邮箱地址, 企业微信ID, 日志标识符)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user