mirror of
https://gitlab.com/uldvstar/exchange-2.0.git
synced 2026-08-19 04:24:16 +00:00
84 lines
2.9 KiB
PHP
84 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace App\Classes\Modules\Accounts\ControllersLogic;
|
|
|
|
use App\Classes\Exceptions\ErrorException;
|
|
use App\Classes\Exceptions\ResourceConflictException;
|
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
|
use App\Classes\Modules\Accounts\DataTransferObjects\RegistrationObject;
|
|
use App\Classes\Modules\Accounts\Processors\CreateUserProcessor;
|
|
use App\Classes\Modules\Accounts\Processors\GenerateEmailVerificationAttemptProcessor;
|
|
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
|
|
use App\Classes\Modules\Companies\Processors\AssignEmployeeProcessor;
|
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
|
use App\Classes\ValueObjects\Constants\RoleTypes;
|
|
use App\Http\Resources\UserResource;
|
|
use App\Models\User;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Database\QueryException;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\App;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
class AddNewMemberLogic extends AbstractControllerLogic
|
|
{
|
|
|
|
public function notification(): array
|
|
{
|
|
return [
|
|
'title' => 'Updated Email',
|
|
'message' => 'Successfully updated email'
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @var AssignEmployeeProcessor
|
|
*/
|
|
private $assignEmployeeProcessor;
|
|
|
|
/** @var CreateUserProcessor */
|
|
private $createUserProcessor;
|
|
/**
|
|
* @var GenerateEmailVerificationAttemptProcessor
|
|
*/
|
|
private $generateEmailVerificationAttemptProcessor;
|
|
|
|
|
|
public function __construct(CreateUserProcessor $createUserProcessor, AssignEmployeeProcessor $assignEmployeeProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor)
|
|
{
|
|
$this->createUserProcessor = $createUserProcessor;
|
|
$this->assignEmployeeProcessor = $assignEmployeeProcessor;
|
|
$this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor;
|
|
}
|
|
|
|
/**
|
|
* @param Request $request
|
|
* @return JsonResponse
|
|
* @throws ResourceConflictException
|
|
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
|
* @throws \App\Classes\Exceptions\RequestValidationException
|
|
*/
|
|
public function logic(Request $request): JsonResponse
|
|
{
|
|
try {
|
|
$user = Auth::user()->replicate();
|
|
$user->email = $request->input('email');
|
|
$user->status = ApprovalStatus::PENDING_VERIFICATION;
|
|
$user->save();
|
|
} catch (QueryException $exception){
|
|
throw new ResourceConflictException('Unable to change your email address as it already exists');
|
|
}
|
|
|
|
if($company = Auth::user()->company()->first()){
|
|
$Object = new EmploymentObject($company, $user);
|
|
$this->assignEmployeeProcessor->execute($Object);
|
|
}
|
|
|
|
$this->generateEmailVerificationAttemptProcessor->execute($user);
|
|
|
|
return $this->resourceResponse(new UserResource($user));
|
|
}
|
|
}
|