Files
Trackeep/backend/models/file.go
T
Tomas Dvorak d27cf14110 first test
2026-02-08 14:14:55 +01:00

56 lines
1.6 KiB
Go

package models
import (
"time"
"gorm.io/gorm"
)
// FileType represents the type of file
type FileType string
const (
FileTypeDocument FileType = "document"
FileTypeImage FileType = "image"
FileTypeVideo FileType = "video"
FileTypeAudio FileType = "audio"
FileTypeArchive FileType = "archive"
FileTypeOther FileType = "other"
)
// File represents a stored file
type File struct {
ID uint `json:"id" gorm:"primaryKey"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
UserID uint `json:"user_id" gorm:"not null;index"`
User User `json:"user,omitempty" gorm:"foreignKey:UserID"`
OriginalName string `json:"original_name" gorm:"not null"`
FileName string `json:"file_name" gorm:"not null;uniqueIndex"`
FilePath string `json:"file_path" gorm:"not null"`
FileSize int64 `json:"file_size" gorm:"not null"`
MimeType string `json:"mime_type" gorm:"not null"`
FileType FileType `json:"file_type" gorm:"not null"`
// Encryption
IsEncrypted bool `json:"is_encrypted" gorm:"default:false"`
EncryptionKey string `json:"-" gorm:"column:encryption_key"` // User-specific encryption key (optional)
// Organization
Tags []Tag `json:"tags,omitempty" gorm:"many2many:file_tags;"`
// Metadata
Description string `json:"description"`
IsPublic bool `json:"is_public" gorm:"default:false"`
// Preview/Thumbnail
ThumbnailPath string `json:"thumbnail_path"`
PreviewPath string `json:"preview_path"`
// Content extraction (for documents)
Content string `json:"content"`
}