db manager
This commit is contained in:
@@ -6,41 +6,46 @@ import (
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// GormStorage реализует интерфейс VersionStorage через GORM
|
||||
type GormStorage struct {
|
||||
open func() *gorm.DB
|
||||
type IDBManager interface {
|
||||
GetMaster() *gorm.DB
|
||||
GetReplica() *gorm.DB
|
||||
}
|
||||
|
||||
func NewGormStorage(open func() *gorm.DB) *GormStorage {
|
||||
return &GormStorage{open: open}
|
||||
// GormStorage реализует интерфейс VersionStorage через GORM
|
||||
type GormStorage struct {
|
||||
manager IDBManager
|
||||
}
|
||||
|
||||
func NewGormStorage(manager IDBManager) *GormStorage {
|
||||
return &GormStorage{manager: manager}
|
||||
}
|
||||
|
||||
func (s *GormStorage) CreateDocument(doc *models.Document) error {
|
||||
err := s.open().Create(&doc).Error
|
||||
err := s.manager.GetMaster().Create(&doc).Error
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *GormStorage) GetDocument(id uuid.UUID) (*models.Document, error) {
|
||||
var d models.Document
|
||||
if err := s.open().First(&d, "id = ?", id).Error; err != nil {
|
||||
if err := s.manager.GetReplica().First(&d, "id = ?", id).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &d, nil
|
||||
}
|
||||
|
||||
func (s *GormStorage) UpdateLatestVersion(docID, versionID uuid.UUID) error {
|
||||
return s.open().Model(&models.Document{}).
|
||||
return s.manager.GetMaster().Model(&models.Document{}).
|
||||
Where("id = ?", docID).
|
||||
Update("latest_version", versionID).Error
|
||||
}
|
||||
|
||||
func (s *GormStorage) CreateVersion(v *models.Version) error {
|
||||
return s.open().Create(v).Error
|
||||
return s.manager.GetMaster().Create(v).Error
|
||||
}
|
||||
|
||||
func (s *GormStorage) GetLatestVersion(docID uuid.UUID) (*models.Version, error) {
|
||||
var v models.Version
|
||||
err := s.open().
|
||||
err := s.manager.GetReplica().
|
||||
Where("document_id = ?", docID).
|
||||
Order("created_at desc").
|
||||
First(&v).Error
|
||||
@@ -52,7 +57,7 @@ func (s *GormStorage) GetLatestVersion(docID uuid.UUID) (*models.Version, error)
|
||||
|
||||
func (s *GormStorage) GetVersionByID(id uuid.UUID) (*models.Version, error) {
|
||||
var v models.Version
|
||||
if err := s.open().First(&v, "id = ?", id).Error; err != nil {
|
||||
if err := s.manager.GetReplica().First(&v, "id = ?", id).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &v, nil
|
||||
@@ -63,7 +68,7 @@ func (s *GormStorage) GetParentVersion(v *models.Version) (*models.Version, erro
|
||||
return nil, nil
|
||||
}
|
||||
var parent models.Version
|
||||
if err := s.open().First(&parent, "id = ?", v.ParentID).Error; err != nil {
|
||||
if err := s.manager.GetReplica().First(&parent, "id = ?", v.ParentID).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &parent, nil
|
||||
|
||||
@@ -12,6 +12,18 @@ import (
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type dbManager struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func (s *dbManager) GetMaster() *gorm.DB {
|
||||
return s.db
|
||||
}
|
||||
|
||||
func (s *dbManager) GetReplica() *gorm.DB {
|
||||
return s.db
|
||||
}
|
||||
|
||||
// helper: инициализация базы и сервиса
|
||||
func newTestService(t *testing.T) (*gorm.DB, *service.VersionService, *store.GormStorage) {
|
||||
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
|
||||
@@ -22,10 +34,10 @@ func newTestService(t *testing.T) (*gorm.DB, *service.VersionService, *store.Gor
|
||||
t.Fatalf("failed to migrate: %v", err)
|
||||
}
|
||||
|
||||
manager := &dbManager{db}
|
||||
|
||||
storage := store.NewGormStorage(
|
||||
func() *gorm.DB {
|
||||
return db
|
||||
},
|
||||
manager,
|
||||
)
|
||||
service := service.NewVersionService(storage, 5)
|
||||
return db, service, storage
|
||||
|
||||
@@ -22,10 +22,10 @@ func TestSnapshotInterval(t *testing.T) {
|
||||
t.Fatalf("failed to migrate: %v", err)
|
||||
}
|
||||
|
||||
manager := dbManager{db}
|
||||
|
||||
storage := store.NewGormStorage(
|
||||
func() *gorm.DB {
|
||||
return db
|
||||
},
|
||||
&manager,
|
||||
)
|
||||
|
||||
// --- Service with snapshot interval = 3 ---
|
||||
|
||||
Reference in New Issue
Block a user