gorm store update
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user