gorm store update

This commit is contained in:
Vladimir V Maksimov
2025-11-06 17:27:54 +03:00
parent 9f6754f97c
commit 1619c1d9b1
3 changed files with 21 additions and 13 deletions

View File

@@ -6,41 +6,41 @@ import (
"gorm.io/gorm" "gorm.io/gorm"
) )
// GormStorage реализует интерфейс VersionStorage через GORM (SQLite) // GormStorage реализует интерфейс VersionStorage через GORM
type GormStorage struct { type GormStorage struct {
db *gorm.DB open func() *gorm.DB
} }
func NewGormStorage(db *gorm.DB) *GormStorage { func NewGormStorage(open func() *gorm.DB) *GormStorage {
return &GormStorage{db: db} return &GormStorage{open: open}
} }
func (s *GormStorage) CreateDocument(doc *models.Document) error { func (s *GormStorage) CreateDocument(doc *models.Document) error {
err := s.db.Create(&doc).Error err := s.open().Create(&doc).Error
return err return err
} }
func (s *GormStorage) GetDocument(id uuid.UUID) (*models.Document, error) { func (s *GormStorage) GetDocument(id uuid.UUID) (*models.Document, error) {
var d models.Document var d models.Document
if err := s.db.First(&d, "id = ?", id).Error; err != nil { if err := s.open().First(&d, "id = ?", id).Error; err != nil {
return nil, err return nil, err
} }
return &d, nil return &d, nil
} }
func (s *GormStorage) UpdateLatestVersion(docID, versionID uuid.UUID) error { func (s *GormStorage) UpdateLatestVersion(docID, versionID uuid.UUID) error {
return s.db.Model(&models.Document{}). return s.open().Model(&models.Document{}).
Where("id = ?", docID). Where("id = ?", docID).
Update("latest_version", versionID).Error Update("latest_version", versionID).Error
} }
func (s *GormStorage) CreateVersion(v *models.Version) error { func (s *GormStorage) CreateVersion(v *models.Version) error {
return s.db.Create(v).Error return s.open().Create(v).Error
} }
func (s *GormStorage) GetLatestVersion(docID uuid.UUID) (*models.Version, error) { func (s *GormStorage) GetLatestVersion(docID uuid.UUID) (*models.Version, error) {
var v models.Version var v models.Version
err := s.db. err := s.open().
Where("document_id = ?", docID). Where("document_id = ?", docID).
Order("created_at desc"). Order("created_at desc").
First(&v).Error First(&v).Error
@@ -52,7 +52,7 @@ func (s *GormStorage) GetLatestVersion(docID uuid.UUID) (*models.Version, error)
func (s *GormStorage) GetVersionByID(id uuid.UUID) (*models.Version, error) { func (s *GormStorage) GetVersionByID(id uuid.UUID) (*models.Version, error) {
var v models.Version var v models.Version
if err := s.db.First(&v, "id = ?", id).Error; err != nil { if err := s.open().First(&v, "id = ?", id).Error; err != nil {
return nil, err return nil, err
} }
return &v, nil return &v, nil
@@ -63,7 +63,7 @@ func (s *GormStorage) GetParentVersion(v *models.Version) (*models.Version, erro
return nil, nil return nil, nil
} }
var parent models.Version var parent models.Version
if err := s.db.First(&parent, "id = ?", v.ParentID).Error; err != nil { if err := s.open().First(&parent, "id = ?", v.ParentID).Error; err != nil {
return nil, err return nil, err
} }
return &parent, nil return &parent, nil

View File

@@ -22,7 +22,11 @@ func newTestService(t *testing.T) (*gorm.DB, *service.VersionService, *store.Gor
t.Fatalf("failed to migrate: %v", err) t.Fatalf("failed to migrate: %v", err)
} }
storage := store.NewGormStorage(db) storage := store.NewGormStorage(
func() *gorm.DB {
return db
},
)
service := service.NewVersionService(storage, 5) service := service.NewVersionService(storage, 5)
return db, service, storage return db, service, storage
} }

View File

@@ -22,7 +22,11 @@ func TestSnapshotInterval(t *testing.T) {
t.Fatalf("failed to migrate: %v", err) t.Fatalf("failed to migrate: %v", err)
} }
storage := store.NewGormStorage(db) storage := store.NewGormStorage(
func() *gorm.DB {
return db
},
)
// --- Service with snapshot interval = 3 --- // --- Service with snapshot interval = 3 ---
svc := service.NewVersionService(storage, 3) svc := service.NewVersionService(storage, 3)