Files
flvx/go-backend/internal/store/repo/peer_share_resources.go
T

56 lines
2.3 KiB
Go

package repo
import (
"errors"
"go-backend/internal/store/model"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
func (r *Repository) SavePeerShareResources(items []PeerShareResource) error {
if r == nil || r.db == nil {
return errors.New("repository not initialized")
}
if len(items) == 0 {
return nil
}
return r.db.Transaction(func(tx *gorm.DB) error {
for i := range items {
if err := tx.Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "share_id"}, {Name: "kind"}, {Name: "original_name"}}, DoUpdates: clause.AssignmentColumns([]string{"node_id", "runtime_name", "legacy_names", "legacy_service_base", "release_legacy_family", "config", "desired_state", "applied", "updated_time"})}).Create(&items[i]).Error; err != nil {
return err
}
}
return nil
})
}
func (r *Repository) GetPeerShareResource(shareID int64, kind, originalName string) (*PeerShareResource, error) {
var item model.PeerShareResource
err := r.db.Where("share_id = ? AND kind = ? AND original_name = ?", shareID, kind, originalName).First(&item).Error
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
return &item, err
}
func (r *Repository) ListPeerShareResourcesByNode(nodeID int64) ([]PeerShareResource, error) {
var items []PeerShareResource
err := r.db.Where("node_id = ?", nodeID).Order("id").Find(&items).Error
return items, err
}
func (r *Repository) MarkPeerShareResourceApplied(shareID int64, kind, name string) error {
return r.db.Model(&model.PeerShareResource{}).Where("share_id = ? AND kind = ? AND original_name = ?", shareID, kind, name).Update("applied", 1).Error
}
func (r *Repository) ClearPeerShareResourceLegacyNames(shareID int64, kind, name string) error {
return r.db.Model(&model.PeerShareResource{}).Where("share_id = ? AND kind = ? AND original_name = ?", shareID, kind, name).Update("legacy_names", "").Error
}
func (r *Repository) WithPeerShareResourceTransaction(fn func(*Repository) error) error {
return r.db.Transaction(func(tx *gorm.DB) error { return fn(&Repository{db: tx, dbPath: r.dbPath}) })
}
func (r *Repository) ClearPeerShareResourceLegacyFamily(shareID int64, base string) error {
return r.db.Model(&model.PeerShareResource{}).Where("share_id = ? AND legacy_service_base = ?", shareID, base).Update("legacy_service_base", "").Error
}