refactor(documents): split document models

This commit is contained in:
2026-07-24 12:20:39 +08:00
parent 77beaebb30
commit 1578c81a89
4 changed files with 72 additions and 63 deletions

View File

@@ -12,26 +12,26 @@ const (
) )
type SaDocument struct { type SaDocument struct {
ID uint `gorm:"primaryKey"` ID uint `gorm:"primaryKey"`
Identity string `gorm:"type:char(36);uniqueIndex"` Identity string `gorm:"type:char(36);uniqueIndex"`
ProjectID uint `gorm:"index;not null;uniqueIndex:uidx_sa_document_sibling,priority:1"` ProjectID uint `gorm:"index;not null;uniqueIndex:uidx_sa_document_sibling,priority:1"`
ProjectIdentity string `gorm:"type:char(36);index"` ProjectIdentity string `gorm:"type:char(36);index"`
ParentID *uint `gorm:"index"` ParentID *uint `gorm:"index"`
ParentIdentity *string `gorm:"type:char(36);index"` ParentIdentity *string `gorm:"type:char(36);index"`
ParentScope string `gorm:"type:char(36);not null;default:'';uniqueIndex:uidx_sa_document_sibling,priority:2"` ParentScope string `gorm:"type:char(36);not null;default:'';uniqueIndex:uidx_sa_document_sibling,priority:2"`
CreatedBy uint `gorm:"index;not null"` CreatedBy uint `gorm:"index;not null"`
CreatedByIdentity string `gorm:"type:char(36);index"` CreatedByIdentity string `gorm:"type:char(36);index"`
SourceInboxItemID *uint `gorm:"index"` SourceInboxItemID *uint `gorm:"index"`
SourceInboxItemIdentity *string `gorm:"type:char(36);index"` SourceInboxItemIdentity *string `gorm:"type:char(36);index"`
Kind string `gorm:"size:16;not null"` Kind string `gorm:"size:16;not null"`
Name string `gorm:"not null"` Name string `gorm:"not null"`
NormalizedName string `gorm:"not null;uniqueIndex:uidx_sa_document_sibling,priority:3"` NormalizedName string `gorm:"not null;uniqueIndex:uidx_sa_document_sibling,priority:3"`
Extension string `gorm:"size:32"` Extension string `gorm:"size:32"`
MimeType string `gorm:"size:255"` MimeType string `gorm:"size:255"`
Size int64 `gorm:"not null;default:0"` Size int64 `gorm:"not null;default:0"`
Revision uint64 `gorm:"not null;default:1"` Revision uint64 `gorm:"not null;default:1"`
SortOrder int `gorm:"not null;default:0"` SortOrder int `gorm:"not null;default:0"`
ScanStatus string `gorm:"size:24;not null;default:'not_scanned'"` ScanStatus string `gorm:"size:24;not null;default:'not_scanned'"`
CreatedAt time.Time CreatedAt time.Time
UpdatedAt time.Time UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"` DeletedAt gorm.DeletedAt `gorm:"index"`
@@ -40,46 +40,3 @@ type SaDocument struct {
func (SaDocument) TableName() string { func (SaDocument) TableName() string {
return "sa_documents" 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"
}

View File

@@ -0,0 +1,18 @@
package models
import "time"
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"
}

View File

@@ -0,0 +1,15 @@
package models
import "time"
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"
}

View File

@@ -0,0 +1,19 @@
package models
import "time"
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"
}