mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/portal.git
synced 2026-08-19 04:23:59 +00:00
email verification backend
This commit is contained in:
@@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Jobs;
|
||||||
|
|
||||||
|
use App\Classes\Notifications\UserVerificationEmail;
|
||||||
|
use App\Models\User;
|
||||||
|
use App\Models\UserEmailVerification;
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
|
class SendUserVerificationEmail implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
|
||||||
|
/** @var User */
|
||||||
|
private $user;
|
||||||
|
|
||||||
|
/** @var UserEmailVerification */
|
||||||
|
private $attempt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SendUserVerificationEmail constructor.
|
||||||
|
* @param User $user
|
||||||
|
* @param UserEmailVerification $attempt
|
||||||
|
*/
|
||||||
|
public function __construct(User $user, UserEmailVerification $attempt)
|
||||||
|
{
|
||||||
|
$this->user = $user;
|
||||||
|
$this->attempt = $attempt;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
$this->user->notify(new UserVerificationEmail($this->user, $this->attempt));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,8 +4,10 @@ namespace App\Classes\Modules\Accounts\ControllersLogic;
|
|||||||
|
|
||||||
|
|
||||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
|
use App\Classes\Jobs\SendUserVerificationEmail;
|
||||||
use App\Classes\Modules\Accounts\DataTransferObjects\RegistrationObject;
|
use App\Classes\Modules\Accounts\DataTransferObjects\RegistrationObject;
|
||||||
use App\Classes\Modules\Accounts\Services\CreatesUser;
|
use App\Classes\Modules\Accounts\Services\CreatesUser;
|
||||||
|
use App\Classes\Modules\Accounts\Services\GeneratesEmailVerificationAttempt;
|
||||||
use App\Classes\Modules\Accounts\Standards\Rules\CanCreateUser;
|
use App\Classes\Modules\Accounts\Standards\Rules\CanCreateUser;
|
||||||
use App\Classes\Modules\Companies\DataTransferObjects\ConnectionObject;
|
use App\Classes\Modules\Companies\DataTransferObjects\ConnectionObject;
|
||||||
use App\Classes\Modules\Companies\DataTransferObjects\EmployeeObject;
|
use App\Classes\Modules\Companies\DataTransferObjects\EmployeeObject;
|
||||||
@@ -60,6 +62,12 @@ class CreateUserLogic extends AbstractControllerLogic
|
|||||||
/** @var AuthenticateUserLogic */
|
/** @var AuthenticateUserLogic */
|
||||||
private $authenticateUserLogic;
|
private $authenticateUserLogic;
|
||||||
|
|
||||||
|
/** @var GeneratesEmailVerificationAttempt */
|
||||||
|
private $generatesEmailVerificationAttempt;
|
||||||
|
|
||||||
|
/** @var SendUserVerificationEmail */
|
||||||
|
private $sendUserVerificationEmail;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CreateUserLogic constructor.
|
* CreateUserLogic constructor.
|
||||||
* @param GeneratesUniqueAccountNumber $generatesUniqueAccountNumber
|
* @param GeneratesUniqueAccountNumber $generatesUniqueAccountNumber
|
||||||
@@ -71,8 +79,10 @@ class CreateUserLogic extends AbstractControllerLogic
|
|||||||
* @param CreatesCompanyConnection $createsCompanyConnection
|
* @param CreatesCompanyConnection $createsCompanyConnection
|
||||||
* @param CreateContactProcessor $createContactProcessor
|
* @param CreateContactProcessor $createContactProcessor
|
||||||
* @param AuthenticateUserLogic $authenticateUserLogic
|
* @param AuthenticateUserLogic $authenticateUserLogic
|
||||||
|
* @param GeneratesEmailVerificationAttempt $generatesEmailVerificationAttempt
|
||||||
|
* @param SendUserVerificationEmail $sendUserVerificationEmail
|
||||||
*/
|
*/
|
||||||
public function __construct(GeneratesUniqueAccountNumber $generatesUniqueAccountNumber, CanCreateUser $canCreateUser, CreatesUser $createsUser, CreateCompanyProcessor $createCompanyProcessor, CreatesCompanyModule $createsCompanyModule, CreatesCompanyEmployee $createsCompanyEmployee, CreatesCompanyConnection $createsCompanyConnection, CreateContactProcessor $createContactProcessor, AuthenticateUserLogic $authenticateUserLogic)
|
public function __construct(GeneratesUniqueAccountNumber $generatesUniqueAccountNumber, CanCreateUser $canCreateUser, CreatesUser $createsUser, CreateCompanyProcessor $createCompanyProcessor, CreatesCompanyModule $createsCompanyModule, CreatesCompanyEmployee $createsCompanyEmployee, CreatesCompanyConnection $createsCompanyConnection, CreateContactProcessor $createContactProcessor, AuthenticateUserLogic $authenticateUserLogic, GeneratesEmailVerificationAttempt $generatesEmailVerificationAttempt, SendUserVerificationEmail $sendUserVerificationEmail)
|
||||||
{
|
{
|
||||||
$this->generatesUniqueAccountNumber = $generatesUniqueAccountNumber;
|
$this->generatesUniqueAccountNumber = $generatesUniqueAccountNumber;
|
||||||
$this->canCreateUser = $canCreateUser;
|
$this->canCreateUser = $canCreateUser;
|
||||||
@@ -83,6 +93,8 @@ class CreateUserLogic extends AbstractControllerLogic
|
|||||||
$this->createsCompanyConnection = $createsCompanyConnection;
|
$this->createsCompanyConnection = $createsCompanyConnection;
|
||||||
$this->createContactProcessor = $createContactProcessor;
|
$this->createContactProcessor = $createContactProcessor;
|
||||||
$this->authenticateUserLogic = $authenticateUserLogic;
|
$this->authenticateUserLogic = $authenticateUserLogic;
|
||||||
|
$this->generatesEmailVerificationAttempt = $generatesEmailVerificationAttempt;
|
||||||
|
$this->sendUserVerificationEmail = $sendUserVerificationEmail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -103,7 +115,9 @@ class CreateUserLogic extends AbstractControllerLogic
|
|||||||
/** @var User $user */
|
/** @var User $user */
|
||||||
$user = $this->createsUser->execute($registrationObject);
|
$user = $this->createsUser->execute($registrationObject);
|
||||||
|
|
||||||
/** send email verification */
|
$attempt = $this->generatesEmailVerificationAttempt->execute($user);
|
||||||
|
|
||||||
|
$this->sendUserVerificationEmail::dispatch($user, $attempt);
|
||||||
|
|
||||||
$request->request->set('name', $request->input('company_name'));
|
$request->request->set('name', $request->input('company_name'));
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Accounts\Services;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use App\Models\User;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Database\QueryException;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
|
class GeneratesEmailVerificationAttempt
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param User $user
|
||||||
|
* @return Model
|
||||||
|
* @throws MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(User $user): Model {
|
||||||
|
try {
|
||||||
|
|
||||||
|
return $user->emailVerification()->create([
|
||||||
|
'token' => Str::random(25),
|
||||||
|
'is_complete' => false,
|
||||||
|
'is_active' => true,
|
||||||
|
'is_sent' => true
|
||||||
|
]);
|
||||||
|
|
||||||
|
} catch (QueryException $exception){
|
||||||
|
throw new MalformedRequestException($exception->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Notifications;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
use App\Models\UserEmailVerification;
|
||||||
|
use Illuminate\Notifications\Messages\MailMessage;
|
||||||
|
|
||||||
|
class UserVerificationEmail extends AbstractEmail
|
||||||
|
{
|
||||||
|
|
||||||
|
/** @var User */
|
||||||
|
private $user;
|
||||||
|
|
||||||
|
/** @var UserEmailVerification */
|
||||||
|
private $attempt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UserVerificationEmail constructor.
|
||||||
|
* @param User $user
|
||||||
|
* @param UserEmailVerification $attempt
|
||||||
|
*/
|
||||||
|
public function __construct(User $user, UserEmailVerification $attempt)
|
||||||
|
{
|
||||||
|
$this->user = $user;
|
||||||
|
$this->attempt = $attempt;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function toMail()
|
||||||
|
{
|
||||||
|
return (new MailMessage)
|
||||||
|
->subject('Email Verification')
|
||||||
|
->view('emails.account.user_verification', ['user' => $this->user, 'attempt' => $this->attempt]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -43,6 +43,10 @@ class User extends AbstractModel implements
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function emailVerification(): HasMany {
|
||||||
|
return $this->hasMany(UserEmailVerification::class, 'email', 'email');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return HasMany
|
* @return HasMany
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
|
|
||||||
|
class UserEmailVerification extends AbstractModel
|
||||||
|
{
|
||||||
|
protected $table = 'user_email_verifications';
|
||||||
|
|
||||||
|
public $fillable = [
|
||||||
|
'token', 'is_complete', 'is_active', 'is_sent'
|
||||||
|
];
|
||||||
|
/**
|
||||||
|
* @param $query
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function scopeActive($query){
|
||||||
|
return $query->where('is_active', true)->where('is_complete', false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return BelongsTo
|
||||||
|
*/
|
||||||
|
public function user(): BelongsTo {
|
||||||
|
return $this->belongsTo(User::class, 'email', 'email');
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user