fix: wrap seeders in db transactions (#11360)

This commit is contained in:
🏔️ Peak
2026-08-18 16:55:34 +02:00
committed by GitHub
parent a9ae9caedc
commit 911f6f5dfc
2 changed files with 44 additions and 39 deletions
+18 -15
View File
@@ -4,6 +4,7 @@ namespace Database\Seeders;
use App\Models\OauthSetting;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class OauthSettingSeeder extends Seeder
@@ -43,25 +44,27 @@ class OauthSettingSeeder extends Seeder
return;
}
$allProviders = OauthSetting::all();
$notFoundProviders = $providers->diff($allProviders->pluck('provider'));
DB::transaction(function () use ($providers) {
$allProviders = OauthSetting::all();
$notFoundProviders = $providers->diff($allProviders->pluck('provider'));
$allProviders->each(function ($provider) {
$provider->delete();
});
$allProviders->each(function ($provider) {
$newProvider = $provider->replicate();
$newProvider->save();
});
$allProviders->each(function ($provider) {
$provider->delete();
});
$allProviders->each(function ($provider) {
$newProvider = $provider->replicate();
$newProvider->save();
});
foreach ($notFoundProviders as $provider) {
OauthSetting::create([
'provider' => $provider,
]);
}
foreach ($notFoundProviders as $provider) {
OauthSetting::create([
'provider' => $provider,
]);
}
});
} catch (\Exception $e) {
Log::error($e->getMessage());
Log::error('OauthSettingSeeder failed: '.$e->getMessage());
}
}
}
+26 -24
View File
@@ -6,7 +6,7 @@ use App\Models\PersonalAccessToken;
use App\Models\Team;
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\DB;
class PersonalAccessTokenSeeder extends Seeder
{
@@ -74,33 +74,35 @@ class PersonalAccessTokenSeeder extends Seeder
],
];
// First, remove all existing development tokens for this user
$deletedCount = PersonalAccessToken::where('tokenable_id', $user->id)
->where('tokenable_type', get_class($user))
->whereIn('name', array_column($testTokens, 'name'))
->delete();
DB::transaction(function () use ($user, $team, $testTokens) {
// First, remove all existing development tokens for this user
$deletedCount = PersonalAccessToken::where('tokenable_id', $user->id)
->where('tokenable_type', get_class($user))
->whereIn('name', array_column($testTokens, 'name'))
->delete();
if ($deletedCount > 0) {
$this->command->info("Removed {$deletedCount} existing development token(s).");
}
if ($deletedCount > 0) {
$this->command->info("Removed {$deletedCount} existing development token(s).");
}
// Now create fresh tokens
foreach ($testTokens as $tokenData) {
// Create the token with a simple format: Bearer {scope}
// The token format in the database is the hash of the plain text token
$plainTextToken = $tokenData['token'];
// Now create fresh tokens
foreach ($testTokens as $tokenData) {
// Create the token with a simple format: Bearer {scope}
// The token format in the database is the hash of the plain text token
$plainTextToken = $tokenData['token'];
PersonalAccessToken::create([
'tokenable_type' => get_class($user),
'tokenable_id' => $user->id,
'name' => $tokenData['name'],
'token' => hash('sha256', $plainTextToken),
'abilities' => $tokenData['abilities'],
'team_id' => $team->id,
]);
PersonalAccessToken::create([
'tokenable_type' => get_class($user),
'tokenable_id' => $user->id,
'name' => $tokenData['name'],
'token' => hash('sha256', $plainTextToken),
'abilities' => $tokenData['abilities'],
'team_id' => $team->id,
]);
$this->command->info("Created token '{$tokenData['name']}' with Bearer token: {$plainTextToken}");
}
$this->command->info("Created token '{$tokenData['name']}' with Bearer token: {$plainTextToken}");
}
});
$this->command->info('');
$this->command->info('Test API tokens created successfully!');