Files
izyim/app/Classes/Modules/ControllersLogic/Account/RegistrationInvitationLogic.php
T
2019-02-14 11:43:19 +08:00

61 lines
1.9 KiB
PHP

<?php
namespace App\Classes\Modules\ControllersLogic\Account;
use App\Classes\Modules\Accounts\DataTransferObjects\UserInvitationObject;
use App\Classes\Modules\Accounts\Services\CreatesUserInvitation;
use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException;
use App\Classes\Modules\ControllerLogic\Exceptions\ResourceConflictException;
use App\Classes\ValueObjects\Constants\HttpStatus;
use App\Events\Accounts\UserInvited;
use App\Models\UserInvitation;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class RegistrationInvitationLogic
{
/** @var UserInvitation */
private $repository;
/** @var CreatesUserInvitation */
private $createUserInvitation;
/**
* RegistrationInvitationLogic constructor.
* @param UserInvitation $repository
* @param CreatesUserInvitation $createUserInvitation
*/
public function __construct(
UserInvitation $repository,
CreatesUserInvitation $createUserInvitation
) {
$this->repository = $repository;
$this->createUserInvitation = $createUserInvitation;
}
/**
* @param Request $request
* @return JsonResponse
* @throws InternalServerErrorException
*/
public function execute(Request $request) {
try {
// the email doesn't exist in the database, so create the user
$object = new UserInvitationObject($request->get('role_id'), $request->get('email'));
$invitation = $this->createUserInvitation->execute($object);
// dispatch event for user invited
event(new UserInvited($invitation));
return new JsonResponse(null, HttpStatus::RESOURCE_CREATED);
} catch (ResourceConflictException $exception) {
throw new InternalServerErrorException("Failed to send user invitation because {$exception->getMessage()}");
}
}
}