二阶段差不多
This commit is contained in:
+1
-1
@@ -46,7 +46,7 @@ func InitDB(cfg config.DatabaseConfig, storageCfg config.StorageConfig) (*gorm.D
|
||||
}
|
||||
|
||||
// Auto-migrate all models
|
||||
if err := db.AutoMigrate(&User{}, &Domain{}, &Message{}, &Attachment{}); err != nil {
|
||||
if err := db.AutoMigrate(&User{}, &Domain{}, &Message{}, &Attachment{}, &BanEntry{}); err != nil {
|
||||
return nil, fmt.Errorf("数据库迁移失败: %w", err)
|
||||
}
|
||||
|
||||
|
||||
+27
-10
@@ -26,16 +26,19 @@ func (User) TableName() string {
|
||||
|
||||
// Domain represents a mail domain in the system.
|
||||
type Domain struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
Name string `gorm:"size:255;uniqueIndex;not null" json:"name"`
|
||||
SmtpPort int `gorm:"default:25" json:"smtp_port"`
|
||||
ImapPort int `gorm:"default:143" json:"imap_port"`
|
||||
Pop3Port int `gorm:"default:110" json:"pop3_port"`
|
||||
TlsCertPath string `gorm:"size:512" json:"tls_cert_path"`
|
||||
TlsKeyPath string `gorm:"size:512" json:"tls_key_path"`
|
||||
TlsEnabled bool `gorm:"default:false" json:"tls_enabled"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
Name string `gorm:"size:255;uniqueIndex;not null" json:"name"`
|
||||
SmtpPort int `gorm:"default:25" json:"smtp_port"`
|
||||
ImapPort int `gorm:"default:143" json:"imap_port"`
|
||||
Pop3Port int `gorm:"default:110" json:"pop3_port"`
|
||||
TlsCertPath string `gorm:"size:512" json:"tls_cert_path"`
|
||||
TlsKeyPath string `gorm:"size:512" json:"tls_key_path"`
|
||||
TlsEnabled bool `gorm:"default:false" json:"tls_enabled"`
|
||||
DkimSelector string `gorm:"size:64;default:default" json:"dkim_selector"`
|
||||
DkimPrivateKey string `gorm:"size:4096" json:"-"`
|
||||
DkimPublicKey string `gorm:"size:1024" json:"-"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
// TableName specifies the table name for Domain.
|
||||
@@ -67,6 +70,20 @@ func (Message) TableName() string {
|
||||
return "messages"
|
||||
}
|
||||
|
||||
// BanEntry represents an IP address that has been banned due to excessive login failures.
|
||||
type BanEntry struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
IPAddress string `gorm:"size:45;index;not null" json:"ip_address"`
|
||||
Reason string `gorm:"size:255" json:"reason"`
|
||||
FailCount int `gorm:"default:0" json:"fail_count"`
|
||||
ExpiresAt time.Time `gorm:"index" json:"expires_at"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
// TableName specifies the table name for BanEntry.
|
||||
func (BanEntry) TableName() string { return "ban_entries" }
|
||||
|
||||
// Attachment represents a file attached to an email message.
|
||||
type Attachment struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
|
||||
Reference in New Issue
Block a user