Browse Source
Merge pull request #65 from nafiesl/48_user_deletion_bug
Merge pull request #65 from nafiesl/48_user_deletion_bug
Fix User Deletion Bug Related to their Couple Recordspull/66/head
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 189 additions and 46 deletions
-
4app/Couple.php
-
47app/Http/Controllers/UsersController.php
-
95app/Jobs/Users/DeleteAndReplaceUser.php
-
79tests/Feature/UsersDeletionTest.php
-
10tests/Unit/CoupleTest.php
@ -0,0 +1,95 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace App\Jobs\Users; |
||||
|
|
||||
|
use App\Couple; |
||||
|
use App\User; |
||||
|
use Illuminate\Support\Facades\DB; |
||||
|
|
||||
|
class DeleteAndReplaceUser |
||||
|
{ |
||||
|
public $user; |
||||
|
|
||||
|
public $replacementUserId; |
||||
|
|
||||
|
public function __construct(User $user, string $replacementUserId) |
||||
|
{ |
||||
|
$this->user = $user; |
||||
|
$this->replacementUserId = $replacementUserId; |
||||
|
} |
||||
|
|
||||
|
public function handle() |
||||
|
{ |
||||
|
$user = $this->user; |
||||
|
$replacementUserId = $this->replacementUserId; |
||||
|
|
||||
|
DB::beginTransaction(); |
||||
|
$this->replaceUserOnUsersTable($user->id, $replacementUserId); |
||||
|
$this->removeDuplicatedCouples($user->id, $replacementUserId); |
||||
|
$this->replaceUserOnCouplesTable($user->id, $replacementUserId); |
||||
|
$user->delete(); |
||||
|
DB::commit(); |
||||
|
} |
||||
|
|
||||
|
private function replaceUserOnCouplesTable($oldUserId, $replacementUserId) |
||||
|
{ |
||||
|
DB::table('couples')->where('husband_id', $oldUserId)->update([ |
||||
|
'husband_id' => $replacementUserId, |
||||
|
]); |
||||
|
DB::table('couples')->where('wife_id', $oldUserId)->update([ |
||||
|
'wife_id' => $replacementUserId, |
||||
|
]); |
||||
|
DB::table('couples')->where('manager_id', $oldUserId)->update([ |
||||
|
'manager_id' => $replacementUserId, |
||||
|
]); |
||||
|
} |
||||
|
|
||||
|
private function removeDuplicatedCouples(string $oldUserId, string $replacementUserId) |
||||
|
{ |
||||
|
$oldUser = User::find($oldUserId); |
||||
|
$replacementUser = User::find($replacementUserId); |
||||
|
|
||||
|
if ($replacementUser->gender_id == 1) { |
||||
|
$replacementUserCouples = Couple::where('husband_id', $replacementUserId)->get(); |
||||
|
} else { |
||||
|
$replacementUserCouples = Couple::where('wife_id', $replacementUserId)->get(); |
||||
|
} |
||||
|
if ($oldUser->gender_id == 1) { |
||||
|
$oldUserCouples = Couple::where('husband_id', $oldUserId)->get(); |
||||
|
} else { |
||||
|
$oldUserCouples = Couple::where('wife_id', $oldUserId)->get(); |
||||
|
} |
||||
|
|
||||
|
$couplesArray = []; |
||||
|
foreach ($replacementUserCouples as $replacementUserCouple) { |
||||
|
$couplesArray[$replacementUserCouple->id] = $replacementUserCouple->husband_id.'_'.$replacementUserCouple->wife_id; |
||||
|
} |
||||
|
foreach ($oldUserCouples as $oldUserCouple) { |
||||
|
$couplesArray[$oldUserCouple->id] = $oldUserCouple->husband_id.'_'.$oldUserCouple->wife_id; |
||||
|
} |
||||
|
$couplesArray = collect($couplesArray); |
||||
|
$deletableCouples = []; |
||||
|
if ($oldUser->gender_id == 1) { |
||||
|
foreach ($oldUserCouples as $oldUserCouple) { |
||||
|
$deletableCouples[] = $couplesArray->search($replacementUserId.'_'.$oldUserCouple->wife_id); |
||||
|
} |
||||
|
} else { |
||||
|
foreach ($oldUserCouples as $oldUserCouple) { |
||||
|
$deletableCouples[] = $couplesArray->search($oldUserCouple->husband_id.'_'.$replacementUserId); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if ($deletableCouples) { |
||||
|
Couple::whereIn('id', $deletableCouples)->delete(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private function replaceUserOnUsersTable(string $oldUserId, string $replacementUserId) |
||||
|
{ |
||||
|
foreach (['father_id', 'mother_id', 'manager_id'] as $field) { |
||||
|
DB::table('users')->where($field, $oldUserId)->update([ |
||||
|
$field => $replacementUserId, |
||||
|
]); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue