mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal.git
synced 2026-08-19 04:24:12 +00:00
new :add classes required to send verification email after user registered. #1
This commit is contained in:
@@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Jobs;
|
||||||
|
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use App\Classes\Modules\Accounts\Services\ExpiresEmailVerificationAttempt;
|
||||||
|
use App\Classes\Modules\Accounts\Services\ExpiresPasswordReset;
|
||||||
|
use App\Models\PasswordReset;
|
||||||
|
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 EmailVerificationAttemptExpiration implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
|
||||||
|
/** @var UserEmailVerification */
|
||||||
|
private $attempt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EmailVerificationAttemptExpiration constructor.
|
||||||
|
* @param UserEmailVerification $attempt
|
||||||
|
*/
|
||||||
|
public function __construct(UserEmailVerification $attempt)
|
||||||
|
{
|
||||||
|
$this->attempt = $attempt;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
(new ExpiresEmailVerificationAttempt())->execute($this->attempt);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Accounts\Processors;
|
||||||
|
|
||||||
|
use App\Classes\Jobs\EmailVerificationAttemptExpiration;
|
||||||
|
use App\Classes\Jobs\SendUserVerificationEmail;
|
||||||
|
use App\Classes\Modules\Accounts\Services\GeneratesEmailVerificationAttempt;
|
||||||
|
use App\Classes\Modules\Accounts\Services\InvalidatesActiveEmailVerificationAttempts;
|
||||||
|
use App\Models\User;
|
||||||
|
|
||||||
|
class GenerateEmailVerificationAttemptProcessor
|
||||||
|
{
|
||||||
|
|
||||||
|
/** @var InvalidatesActiveEmailVerificationAttempts */
|
||||||
|
private $invalidatesActiveEmailVerificationAttempts;
|
||||||
|
|
||||||
|
/** @var GeneratesEmailVerificationAttempt */
|
||||||
|
private $generatesEmailVerificationAttempt;
|
||||||
|
|
||||||
|
/** @var EmailVerificationAttemptExpiration */
|
||||||
|
private $emailVerificationAttemptExpiration;
|
||||||
|
|
||||||
|
/** @var SendUserVerificationEmail */
|
||||||
|
private $sendUserVerificationEmail;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GenerateEmailVerificationAttemptProcessor constructor.
|
||||||
|
* @param InvalidatesActiveEmailVerificationAttempts $invalidatesActiveEmailVerificationAttempts
|
||||||
|
* @param GeneratesEmailVerificationAttempt $generatesEmailVerificationAttempt
|
||||||
|
* @param EmailVerificationAttemptExpiration $emailVerificationAttemptExpiration
|
||||||
|
* @param SendUserVerificationEmail $sendUserVerificationEmail
|
||||||
|
*/
|
||||||
|
public function __construct(InvalidatesActiveEmailVerificationAttempts $invalidatesActiveEmailVerificationAttempts, GeneratesEmailVerificationAttempt $generatesEmailVerificationAttempt, EmailVerificationAttemptExpiration $emailVerificationAttemptExpiration, SendUserVerificationEmail $sendUserVerificationEmail)
|
||||||
|
{
|
||||||
|
$this->invalidatesActiveEmailVerificationAttempts = $invalidatesActiveEmailVerificationAttempts;
|
||||||
|
$this->generatesEmailVerificationAttempt = $generatesEmailVerificationAttempt;
|
||||||
|
$this->emailVerificationAttemptExpiration = $emailVerificationAttemptExpiration;
|
||||||
|
$this->sendUserVerificationEmail = $sendUserVerificationEmail;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param User $user
|
||||||
|
* @return void
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(User $user) {
|
||||||
|
|
||||||
|
$this->invalidatesActiveEmailVerificationAttempts->execute($user);
|
||||||
|
|
||||||
|
$attempt = $this->generatesEmailVerificationAttempt->execute($user);
|
||||||
|
|
||||||
|
$this->emailVerificationAttemptExpiration::dispatch($attempt)->delay(now()->addHours(48));
|
||||||
|
|
||||||
|
$this->sendUserVerificationEmail::dispatch($user, $attempt);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Accounts\Services;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||||
|
use App\Models\PasswordReset;
|
||||||
|
use App\Models\UserEmailVerification;
|
||||||
|
|
||||||
|
class ExpiresEmailVerificationAttempt extends AbstractUpdateRecord
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param UserEmailVerification $model
|
||||||
|
* @return \Illuminate\Database\Eloquent\Model
|
||||||
|
* @throws MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(UserEmailVerification $model){
|
||||||
|
|
||||||
|
$model->is_active = false;
|
||||||
|
return $this->handler($model);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Accounts\Services;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
|
||||||
|
use App\Models\User;
|
||||||
|
use App\Models\UserEmailVerification;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Database\QueryException;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
|
class GeneratesEmailVerificationAttempt extends AbstractUpdateRelationshipRecord
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param User $user
|
||||||
|
* @return Model
|
||||||
|
* @throws MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(User $user): Model {
|
||||||
|
$model = new UserEmailVerification();
|
||||||
|
$model->token = Str::random(25);
|
||||||
|
$model->is_complete = false;
|
||||||
|
$model->is_active = true;
|
||||||
|
$model->is_sent = true;
|
||||||
|
|
||||||
|
return $this->handler($user->emailVerification(), $model);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Accounts\Services;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
|
||||||
|
class InvalidatesActiveEmailVerificationAttempts
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param User $user
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function execute(User $user) {
|
||||||
|
$user->emailVerification()->active()->update([
|
||||||
|
'is_active' => false
|
||||||
|
]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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.accounts.user_verification', ['user' => $this->user, 'attempt' => $this->attempt]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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