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