package models import ( "time" "gorm.io/gorm" ) const ( DocumentKindFolder = "folder" DocumentKindFile = "file" ) type SaDocument struct { ID uint `gorm:"primaryKey"` Identity string `gorm:"type:char(36);uniqueIndex"` ProjectID uint `gorm:"index;not null;uniqueIndex:uidx_sa_document_sibling,priority:1"` ProjectIdentity string `gorm:"type:char(36);index"` ParentID *uint `gorm:"index"` ParentIdentity *string `gorm:"type:char(36);index"` ParentScope string `gorm:"type:char(36);not null;default:'';uniqueIndex:uidx_sa_document_sibling,priority:2"` CreatedBy uint `gorm:"index;not null"` CreatedByIdentity string `gorm:"type:char(36);index"` SourceInboxItemID *uint `gorm:"index"` SourceInboxItemIdentity *string `gorm:"type:char(36);index"` Kind string `gorm:"size:16;not null"` Name string `gorm:"not null"` NormalizedName string `gorm:"not null;uniqueIndex:uidx_sa_document_sibling,priority:3"` Extension string `gorm:"size:32"` MimeType string `gorm:"size:255"` Size int64 `gorm:"not null;default:0"` Revision uint64 `gorm:"not null;default:1"` SortOrder int `gorm:"not null;default:0"` ScanStatus string `gorm:"size:24;not null;default:'not_scanned'"` CreatedAt time.Time UpdatedAt time.Time DeletedAt gorm.DeletedAt `gorm:"index"` } func (SaDocument) TableName() string { return "sa_documents" } type SaDocumentContent struct { ID uint `gorm:"primaryKey"` DocumentID uint `gorm:"uniqueIndex;not null"` Markdown string `gorm:"type:text"` CreatedAt time.Time UpdatedAt time.Time } func (SaDocumentContent) TableName() string { return "sa_document_contents" } type SaDocumentBlob struct { ID uint `gorm:"primaryKey"` DocumentID uint `gorm:"uniqueIndex;not null"` StorageKey string `gorm:"size:64;uniqueIndex;not null"` RelativePath string `gorm:"not null"` OriginalName string `gorm:"not null"` Checksum string `gorm:"size:64;not null"` CreatedAt time.Time UpdatedAt time.Time } func (SaDocumentBlob) TableName() string { return "sa_document_blobs" } type SaDocumentShare struct { ID uint `gorm:"primaryKey"` Identity string `gorm:"type:char(36);uniqueIndex"` DocumentID uint `gorm:"index;not null"` DocumentIdentity string `gorm:"type:char(36);index"` CreatedBy uint `gorm:"index;not null"` TokenHash string `gorm:"size:64;uniqueIndex;not null"` ExpiresAt time.Time `gorm:"index;not null"` RevokedAt *time.Time `gorm:"index"` CreatedAt time.Time } func (SaDocumentShare) TableName() string { return "sa_document_shares" }