db manager

This commit is contained in:
Vladimir V Maksimov
2025-11-07 11:25:09 +03:00
parent 1619c1d9b1
commit c468df9546
3 changed files with 35 additions and 18 deletions

View File

@@ -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