package database import "time" // File represents a file record in the database type File struct { Path string MTime time.Time CTime time.Time Size int64 Mode uint32 UID uint32 GID uint32 LinkTarget string // empty for regular files, target path for symlinks } // IsSymlink returns true if this file is a symbolic link func (f *File) IsSymlink() bool { return f.LinkTarget != "" } // FileChunk represents the mapping between files and chunks type FileChunk struct { Path string Idx int ChunkHash string } // Chunk represents a chunk record in the database type Chunk struct { ChunkHash string SHA256 string Size int64 } // Blob represents a blob record in the database type Blob struct { ID string Hash string // Can be empty until blob is finalized CreatedTS time.Time FinishedTS *time.Time // nil if not yet finalized UncompressedSize int64 CompressedSize int64 UploadedTS *time.Time // nil if not yet uploaded } // BlobChunk represents the mapping between blobs and chunks type BlobChunk struct { BlobID string ChunkHash string Offset int64 Length int64 } // ChunkFile represents the reverse mapping of chunks to files type ChunkFile struct { ChunkHash string FilePath string FileOffset int64 Length int64 } // Snapshot represents a snapshot record in the database type Snapshot struct { ID string Hostname string VaultikVersion string StartedAt time.Time CompletedAt *time.Time // nil if still in progress FileCount int64 ChunkCount int64 BlobCount int64 TotalSize int64 // Total size of all referenced files BlobSize int64 // Total size of all referenced blobs (compressed and encrypted) CompressionRatio float64 // Compression ratio (BlobSize / TotalSize) } // IsComplete returns true if the snapshot has completed func (s *Snapshot) IsComplete() bool { return s.CompletedAt != nil } // SnapshotFile represents the mapping between snapshots and files type SnapshotFile struct { SnapshotID string FilePath string } // SnapshotBlob represents the mapping between snapshots and blobs type SnapshotBlob struct { SnapshotID string BlobID string BlobHash string // Denormalized for easier manifest generation }