mirror of
https://github.com/netbirdio/netbird.git
synced 2026-07-20 07:21:27 +02:00
fix saveAccount and gorm order
This commit is contained in:
@@ -204,13 +204,30 @@ func (s *SqlStore) SaveAccount(ctx context.Context, account *types.Account) erro
|
||||
return result.Error
|
||||
}
|
||||
|
||||
// Save account without UsersG.Groups to avoid FK constraint violations
|
||||
// (groups must exist before group_users can reference them)
|
||||
result = tx.
|
||||
Session(&gorm.Session{FullSaveAssociations: true}).
|
||||
Omit("UsersG.Groups").
|
||||
Clauses(clause.OnConflict{UpdateAll: true}).
|
||||
Create(account)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
|
||||
// Now save the user-group associations after both users and groups exist
|
||||
for _, user := range account.UsersG {
|
||||
if len(user.Groups) > 0 {
|
||||
result = tx.Clauses(clause.OnConflict{
|
||||
Columns: []clause.Column{{Name: "group_id"}, {Name: "user_id"}},
|
||||
UpdateAll: true,
|
||||
}).Create(&user.Groups)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
|
||||
@@ -1365,6 +1365,7 @@ func TestSqlStore_CreateGroup(t *testing.T) {
|
||||
Peers: []string{},
|
||||
Resources: []types.Resource{},
|
||||
GroupPeers: []types.GroupPeer{},
|
||||
GroupUsers: []types.GroupUser{},
|
||||
}
|
||||
err = store.CreateGroup(context.Background(), group)
|
||||
require.NoError(t, err)
|
||||
@@ -1389,6 +1390,7 @@ func TestSqlStore_CreateUpdateGroups(t *testing.T) {
|
||||
Peers: []string{},
|
||||
Resources: []types.Resource{},
|
||||
GroupPeers: []types.GroupPeer{},
|
||||
GroupUsers: []types.GroupUser{},
|
||||
},
|
||||
{
|
||||
ID: "group-2",
|
||||
@@ -1397,6 +1399,7 @@ func TestSqlStore_CreateUpdateGroups(t *testing.T) {
|
||||
Peers: []string{},
|
||||
Resources: []types.Resource{},
|
||||
GroupPeers: []types.GroupPeer{},
|
||||
GroupUsers: []types.GroupUser{},
|
||||
},
|
||||
}
|
||||
err = store.CreateGroups(context.Background(), accountID, groups)
|
||||
|
||||
@@ -82,6 +82,7 @@ func (s *SqlStore) GetAccountSlow(ctx context.Context, accountID string) (*types
|
||||
for _, pat := range user.PATsG {
|
||||
user.PATs[pat.ID] = pat.Copy()
|
||||
}
|
||||
user.LoadAutoGroups()
|
||||
account.Users[user.Id] = user.Copy()
|
||||
}
|
||||
account.UsersG = nil
|
||||
@@ -177,6 +178,7 @@ func (s *SqlStore) GetAccountGormOpt(ctx context.Context, accountID string) (*ty
|
||||
}
|
||||
if user.AutoGroups == nil {
|
||||
user.AutoGroups = []string{}
|
||||
user.Groups = []*types.GroupUser{}
|
||||
}
|
||||
account.Users[user.Id] = user
|
||||
user.PATsG = nil
|
||||
|
||||
Reference in New Issue
Block a user