package models import ( "encoding/json" "time" "github.com/google/uuid" ) // Version версия документа // @Description Version хранит либо патч изменений (Patch), либо полный снимок состояния (Snapshot). // @Description Если IsSnapshot=true — Snapshot содержит полное состояние документа, а Patch = null. // @Description Если IsSnapshot=false — Patch содержит JSON Patch относительно предыдущей версии. // swagger:model Version type Version struct { ID uuid.UUID `json:"id" gorm:"type:char(36);primaryKey" example:"550e8400-e29b-41d4-a716-446655440001"` DocumentID uuid.UUID `json:"document_id" gorm:"type:char(36);index" example:"550e8400-e29b-41d4-a716-446655440000"` Document Document `json:"-" gorm:"constraint:OnDelete:CASCADE;"` ParentID *uuid.UUID `json:"parent_id,omitempty" gorm:"type:char(36);" example:"null"` IsSnapshot bool `json:"is_snapshot" example:"false"` // JSON Patch или nil, если Snapshot Patch json.RawMessage `json:"patch,omitempty" gorm:"type:json" example:"[{\"op\":\"replace\",\"path\":\"/name\",\"value\":\"new name\"}]"` // Полный JSON, если IsSnapshot = true Snapshot json.RawMessage `json:"snapshot,omitempty" gorm:"type:json" example:"{\"field\": \"value\"}"` CreatedAt time.Time `json:"created_at" example:"2025-01-02T15:04:05Z"` } func (s *Version) TableName() (res string) { res = "version" return }