You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
3.2 KiB
95 lines
3.2 KiB
<?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,
|
|
]);
|
|
}
|
|
}
|
|
}
|