35 lines
1.5 KiB
Go
35 lines
1.5 KiB
Go
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:uuid;default:gen_random_uuid();primaryKey" example:"550e8400-e29b-41d4-a716-446655440000"`
|
||
DocumentID uuid.UUID `json:"document_id" gorm:"type:uuid;index" example:"550e8400-e29b-41d4-a716-446655440000"`
|
||
Document *Document `json:"-" gorm:"foreignKey:DocumentID;references:ID;constraint:OnDelete:CASCADE,OnUpdate:CASCADE;"`
|
||
ParentID *uuid.UUID `json:"parent_id,omitempty" gorm:"type:uuid;" example:"null"`
|
||
IsSnapshot bool `json:"is_snapshot" example:"false"`
|
||
|
||
// JSON Patch или nil, если Snapshot
|
||
Patch json.RawMessage `json:"patch,omitempty" gorm:"type:json"`
|
||
|
||
// Полный JSON, если IsSnapshot = true
|
||
Snapshot json.RawMessage `json:"snapshot,omitempty" gorm:"type:json"`
|
||
|
||
CreatedAt time.Time `json:"created_at" example:"2025-01-02T15:04:05Z"`
|
||
}
|
||
|
||
func (s *Version) TableName() (res string) {
|
||
res = "version"
|
||
return
|
||
}
|