User profile linking can get stuck with null profile_id after partial observer failure

w5
Your Name 2 months ago
parent d8c9cece15
commit f52ffe292b

@ -61,11 +61,24 @@ class UserObserver
return;
}
if (Profile::whereUsername($user->username)->exists()) {
return;
}
if (empty($user->profile)) {
// Check if an orphaned profile exists (created but never linked)
$existingProfile = Profile::whereUsername($user->username)->first();
if ($existingProfile) {
// Link orphaned profile to user if profile_id is not set
if (! $user->profile_id) {
DB::transaction(function () use ($user, $existingProfile) {
$user = User::findOrFail($user->id);
$user->profile_id = $existingProfile->id;
$user->save();
});
}
return;
}
// Create profile and link to user in a single atomic transaction
$profile = DB::transaction(function () use ($user) {
$profile = new Profile;
$profile->user_id = $user->id;
@ -86,22 +99,15 @@ class UserObserver
$profile->save();
$this->applyDefaultDomainBlocks($user);
return $profile;
});
DB::transaction(function () use ($user, $profile) {
$user = User::findOrFail($user->id);
$user->profile_id = $profile->id;
$user->save();
// UserNotify::updateOrCreate([
// 'profile_id' => $profile->id,
// 'user_id' => $user->id,
// ]);
CreateAvatar::dispatch($profile);
return $profile;
});
CreateAvatar::dispatch($profile);
if ((bool) config_cache('account.autofollow') == true) {
$names = config_cache('account.autofollow_usernames');
$names = explode(',', $names);

Loading…
Cancel
Save