feat(db): 支持 MySQL 迁移(修复模型外键冲突 + 大文本类型 + 迁移工具)
- Attachment 模型移除 Message 关联:其 foreignKey 名 MessageID 与 Message.MessageID 字符串字段冲突,GORM AutoMigrate 会生成错误外键 (messages.message_id → attachments.id 且强转 bigint),MySQL 下建表 直接失败(SQLite 因动态类型侥幸可用) - Message.TextBody/HtmlBody 改 mediumtext:MySQL TEXT 仅 64KB, 大 HTML 邮件会写入失败 - 新增 cmd/migrate:SQLite → MySQL 一次性迁移工具(GORM 模型读源、 批量写目标、时间统一 UTC、ban_entries 零值时间转 NULL、逐表校验)
This commit is contained in:
@@ -60,8 +60,8 @@ type Message struct {
|
||||
ToAddr string `gorm:"size:2048;not null" json:"to_addr"`
|
||||
CcAddr string `gorm:"size:2048" json:"cc_addr"`
|
||||
Subject string `gorm:"size:1024" json:"subject"`
|
||||
TextBody string `gorm:"type:text" json:"text_body"`
|
||||
HtmlBody string `gorm:"type:text" json:"html_body"`
|
||||
TextBody string `gorm:"type:mediumtext" json:"text_body"`
|
||||
HtmlBody string `gorm:"type:mediumtext" json:"html_body"`
|
||||
RawData string `gorm:"type:mediumtext" json:"raw_data"`
|
||||
IsRead bool `gorm:"default:false" json:"is_read"`
|
||||
IsFlagged bool `gorm:"default:false" json:"is_flagged"`
|
||||
@@ -155,10 +155,11 @@ func (ProtocolLog) TableName() string {
|
||||
}
|
||||
|
||||
// Attachment represents a file attached to an email message.
|
||||
// 注意:不声明 Message 关联(避免 GORM 外键名 MessageID 与
|
||||
// Message.MessageID 字符串字段冲突,导致 AutoMigrate 生成错误外键)。
|
||||
type Attachment struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
MessageID uint `gorm:"index;not null" json:"message_id"`
|
||||
Message Message `gorm:"foreignKey:MessageID" json:"message"`
|
||||
FileName string `gorm:"size:255;not null" json:"file_name"`
|
||||
FilePath string `gorm:"size:512;not null" json:"file_path"`
|
||||
ContentType string `gorm:"size:128" json:"content_type"`
|
||||
|
||||
Reference in New Issue
Block a user