package model import "time" const ( BackupRecordStatusRunning = "running" BackupRecordStatusSuccess = "success" BackupRecordStatusFailed = "failed" ) const ( // BackupKindFull 全量归档;BackupKindDifferential 差异归档; // BackupKindRepository 为可独立恢复的 CDC 内容寻址快照。 BackupKindFull = "full" BackupKindDifferential = "differential" BackupKindRepository = "repository" ) type BackupRecord struct { ID uint `gorm:"primaryKey" json:"id"` TaskID uint `gorm:"column:task_id;index;not null" json:"taskId"` Task BackupTask `json:"task,omitempty"` StorageTargetID uint `gorm:"column:storage_target_id;index;not null" json:"storageTargetId"` StorageTarget StorageTarget `json:"storageTarget,omitempty"` // NodeID 执行该次备份的节点(0 = 本机 Master)。StorageTransferMode 进一步 // 区分远程 Agent 直写与 Master 中转,避免在错误节点访问 local_disk。 NodeID uint `gorm:"column:node_id;index;default:0" json:"nodeId"` Status string `gorm:"size:20;index;not null" json:"status"` FileName string `gorm:"column:file_name;size:255" json:"fileName"` FileSize int64 `gorm:"column:file_size;not null;default:0" json:"fileSize"` Checksum string `gorm:"column:checksum;size:64" json:"checksum"` StoragePath string `gorm:"column:storage_path;size:500" json:"storagePath"` // 空值表示旧版 Agent 直写;direct / master_relay 记录新协议的实际数据路径。 StorageTransferMode string `gorm:"column:storage_transfer_mode;size:20" json:"storageTransferMode,omitempty"` StorageUploadResults string `gorm:"column:storage_upload_results;type:text" json:"-"` DurationSeconds int `gorm:"column:duration_seconds;not null;default:0" json:"durationSeconds"` // Locked 保留锁定(法律保留):为 true 时该备份不参与保留期/数量自动清理, // 且禁止手动删除,直到显式解锁。用于保护合规快照、迁移前基线等关键备份。 Locked bool `gorm:"column:locked;not null;default:false;index" json:"locked"` // BackupKind 备份类型:full(全量)/ differential(差异)/ repository(CDC 快照)。 BackupKind string `gorm:"column:backup_kind;size:16;not null;default:'full';index" json:"backupKind"` // BaseRecordID 差异备份所基于的全量备份记录 ID(全量记录为 0)。 BaseRecordID uint `gorm:"column:base_record_id;index;not null;default:0" json:"baseRecordId"` // Manifest 全量备份的条目清单(JSON),供后续差异备份比对;差异记录为空。 Manifest string `gorm:"column:manifest;type:text" json:"-"` ErrorMessage string `gorm:"column:error_message;size:2000" json:"errorMessage"` LogContent string `gorm:"column:log_content;type:text" json:"logContent"` StartedAt time.Time `gorm:"column:started_at;index;not null" json:"startedAt"` CompletedAt *time.Time `gorm:"column:completed_at;index" json:"completedAt,omitempty"` CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` } func (BackupRecord) TableName() string { return "backup_records" }