Fix sync owner mapping before pushing configurations
This commit is contained in:
@@ -484,6 +484,9 @@ func (s *Service) pushConfigurationCreate(change *localdb.PendingChange) error {
|
|||||||
|
|
||||||
// Create repository
|
// Create repository
|
||||||
configRepo := repository.NewConfigurationRepository(mariaDB)
|
configRepo := repository.NewConfigurationRepository(mariaDB)
|
||||||
|
if err := s.ensureConfigurationOwner(mariaDB, &cfg); err != nil {
|
||||||
|
return fmt.Errorf("resolve configuration owner: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
// Create on server
|
// Create on server
|
||||||
if err := configRepo.Create(&cfg); err != nil {
|
if err := configRepo.Create(&cfg); err != nil {
|
||||||
@@ -536,6 +539,9 @@ func (s *Service) pushConfigurationUpdate(change *localdb.PendingChange) error {
|
|||||||
|
|
||||||
// Create repository
|
// Create repository
|
||||||
configRepo := repository.NewConfigurationRepository(mariaDB)
|
configRepo := repository.NewConfigurationRepository(mariaDB)
|
||||||
|
if err := s.ensureConfigurationOwner(mariaDB, &cfg); err != nil {
|
||||||
|
return fmt.Errorf("resolve configuration owner: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
// Ensure we have a server ID before updating
|
// Ensure we have a server ID before updating
|
||||||
// If the payload doesn't have ID, get it from local configuration
|
// If the payload doesn't have ID, get it from local configuration
|
||||||
@@ -585,6 +591,32 @@ func (s *Service) pushConfigurationUpdate(change *localdb.PendingChange) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Service) ensureConfigurationOwner(mariaDB *gorm.DB, cfg *models.Configuration) error {
|
||||||
|
if cfg == nil {
|
||||||
|
return fmt.Errorf("configuration is nil")
|
||||||
|
}
|
||||||
|
|
||||||
|
ownerUsername := cfg.OwnerUsername
|
||||||
|
if ownerUsername == "" {
|
||||||
|
ownerUsername = s.localDB.GetDBUser()
|
||||||
|
cfg.OwnerUsername = ownerUsername
|
||||||
|
}
|
||||||
|
if ownerUsername == "" {
|
||||||
|
return fmt.Errorf("owner username is empty")
|
||||||
|
}
|
||||||
|
|
||||||
|
userID, err := models.EnsureDBUser(mariaDB, ownerUsername)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if userID == 0 {
|
||||||
|
return fmt.Errorf("resolved user ID is 0 for owner %q", ownerUsername)
|
||||||
|
}
|
||||||
|
|
||||||
|
cfg.UserID = userID
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Service) pushConfigurationRollback(change *localdb.PendingChange) error {
|
func (s *Service) pushConfigurationRollback(change *localdb.PendingChange) error {
|
||||||
// Last-write-wins for now: rollback is pushed as an update with rollback metadata.
|
// Last-write-wins for now: rollback is pushed as an update with rollback metadata.
|
||||||
return s.pushConfigurationUpdate(change)
|
return s.pushConfigurationUpdate(change)
|
||||||
|
|||||||
Reference in New Issue
Block a user