Files
seadoc/store/gorm.go
Vladimir V Maksimov 488f11bd56 alpha
2025-11-04 00:18:00 +03:00

76 lines
1.7 KiB
Go

package store
import (
"git.gm6.ru/icewind/seadoc/models"
"github.com/google/uuid"
"gorm.io/gorm"
)
// GormStorage реализует интерфейс VersionStorage через GORM (SQLite)
type GormStorage struct {
db *gorm.DB
}
func NewGormStorage(db *gorm.DB) *GormStorage {
return &GormStorage{db: db}
}
func (s *GormStorage) CreateDocument(name string) (uuid.UUID, error) {
doc := models.Document{
ID: uuid.New(),
Name: name,
}
if err := s.db.Create(&doc).Error; err != nil {
return uuid.Nil, err
}
return doc.ID, nil
}
func (s *GormStorage) GetDocument(id uuid.UUID) (*models.Document, error) {
var d models.Document
if err := s.db.First(&d, "id = ?", id).Error; err != nil {
return nil, err
}
return &d, nil
}
func (s *GormStorage) UpdateLatestVersion(docID, versionID uuid.UUID) error {
return s.db.Model(&models.Document{}).
Where("id = ?", docID).
Update("latest_version", versionID).Error
}
func (s *GormStorage) CreateVersion(v *models.Version) error {
return s.db.Create(v).Error
}
func (s *GormStorage) GetLatestVersion(docID uuid.UUID) (*models.Version, error) {
var v models.Version
if err := s.db.
Where("document_id = ?", docID).
Order("created_at desc").
First(&v).Error; err != nil {
return nil, err
}
return &v, nil
}
func (s *GormStorage) GetVersionByID(id uuid.UUID) (*models.Version, error) {
var v models.Version
if err := s.db.First(&v, "id = ?", id).Error; err != nil {
return nil, err
}
return &v, nil
}
func (s *GormStorage) GetParentVersion(v *models.Version) (*models.Version, error) {
if v.ParentID == nil {
return nil, nil
}
var parent models.Version
if err := s.db.First(&parent, "id = ?", v.ParentID).Error; err != nil {
return nil, err
}
return &parent, nil
}