mirror of
https://github.com/elyby/accounts.git
synced 2025-05-31 14:11:46 +05:30
Отправка всех email вынесена в очередь
This commit is contained in:
@@ -29,7 +29,7 @@ class EmailRenderer extends Component {
|
||||
parent::__construct($config);
|
||||
|
||||
if ($this->_baseDomain === null) {
|
||||
$this->_baseDomain = Yii::$app->request->getHostInfo();
|
||||
$this->_baseDomain = Yii::$app->urlManager->getHostInfo();
|
||||
if ($this->_baseDomain === null) {
|
||||
throw new InvalidConfigException('Cannot automatically obtain base domain');
|
||||
}
|
||||
@@ -51,7 +51,7 @@ class EmailRenderer extends Component {
|
||||
* @param string $templateName
|
||||
* @return TemplateBuilder
|
||||
*/
|
||||
public function getTemplate(string $templateName) : TemplateBuilder {
|
||||
public function getTemplate(string $templateName): TemplateBuilder {
|
||||
return $this->renderer->getTemplate($templateName);
|
||||
}
|
||||
|
||||
@@ -60,11 +60,11 @@ class EmailRenderer extends Component {
|
||||
* @throws \Ely\Email\RendererException
|
||||
* @return string
|
||||
*/
|
||||
public function render(TemplateBuilder $template) : string {
|
||||
public function render(TemplateBuilder $template): string {
|
||||
return $this->renderer->render($template);
|
||||
}
|
||||
|
||||
private function buildBasePath() : string {
|
||||
private function buildBasePath(): string {
|
||||
return $this->_baseDomain . $this->basePath;
|
||||
}
|
||||
|
||||
|
||||
@@ -96,6 +96,16 @@ return [
|
||||
'port' => getenv('STATSD_PORT') ?: 8125,
|
||||
'namespace' => getenv('STATSD_NAMESPACE') ?: 'ely.accounts.' . gethostname() . '.app',
|
||||
],
|
||||
'queue' => [
|
||||
'class' => yii\queue\amqp\Queue::class,
|
||||
'host' => getenv('RABBITMQ_HOST') ?: 'rabbitmq',
|
||||
'port' => getenv('RABBITMQ_PORT') ?: 5672,
|
||||
'user' => getenv('RABBITMQ_USER'),
|
||||
'password' => getenv('RABBITMQ_PASS'),
|
||||
'vhost' => getenv('RABBITMQ_VHOST'),
|
||||
'queueName' => 'worker',
|
||||
'exchangeName' => 'tasks',
|
||||
],
|
||||
],
|
||||
'container' => [
|
||||
'definitions' => [
|
||||
|
||||
@@ -1,56 +1,10 @@
|
||||
<?php
|
||||
namespace common\emails;
|
||||
|
||||
use common\emails\templates\ChangeEmailConfirmCurrentEmail;
|
||||
use common\emails\templates\ChangeEmailConfirmNewEmail;
|
||||
use common\emails\templates\ForgotPasswordEmail;
|
||||
use common\emails\templates\ForgotPasswordParams;
|
||||
use common\emails\templates\RegistrationEmail;
|
||||
use common\emails\templates\RegistrationEmailParams;
|
||||
use common\models\Account;
|
||||
use common\models\confirmations\CurrentEmailConfirmation;
|
||||
use common\models\confirmations\ForgotPassword;
|
||||
use common\models\confirmations\NewEmailConfirmation;
|
||||
use common\models\confirmations\RegistrationConfirmation;
|
||||
use Yii;
|
||||
|
||||
class EmailHelper {
|
||||
|
||||
public static function registration(RegistrationConfirmation $emailActivation): void {
|
||||
$account = $emailActivation->account;
|
||||
$locale = $account->lang;
|
||||
$params = new RegistrationEmailParams(
|
||||
$account->username,
|
||||
$emailActivation->key,
|
||||
Yii::$app->request->getHostInfo() . '/activation/' . $emailActivation->key
|
||||
);
|
||||
|
||||
(new RegistrationEmail(self::buildTo($account), $locale, $params))->send();
|
||||
}
|
||||
|
||||
public static function forgotPassword(ForgotPassword $emailActivation): void {
|
||||
$account = $emailActivation->account;
|
||||
$locale = $account->lang;
|
||||
$params = new ForgotPasswordParams(
|
||||
$account->username,
|
||||
$emailActivation->key,
|
||||
Yii::$app->request->getHostInfo() . '/recover-password/' . $emailActivation->key
|
||||
);
|
||||
|
||||
(new ForgotPasswordEmail(self::buildTo($account), $locale, $params))->send();
|
||||
}
|
||||
|
||||
public static function changeEmailConfirmCurrent(CurrentEmailConfirmation $emailActivation): void {
|
||||
(new ChangeEmailConfirmCurrentEmail(self::buildTo($emailActivation->account), $emailActivation->key))->send();
|
||||
}
|
||||
|
||||
public static function changeEmailConfirmNew(NewEmailConfirmation $emailActivation): void {
|
||||
$account = $emailActivation->account;
|
||||
(new ChangeEmailConfirmNewEmail(self::buildTo($account), $account->username, $emailActivation->key))->send();
|
||||
}
|
||||
|
||||
public static function buildTo(Account $account): array {
|
||||
return [$account->email => $account->username];
|
||||
public static function buildTo(string $username, string $email): array {
|
||||
return [$email => $username];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
43
common/tasks/SendCurrentEmailConfirmation.php
Normal file
43
common/tasks/SendCurrentEmailConfirmation.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
namespace common\tasks;
|
||||
|
||||
use common\emails\EmailHelper;
|
||||
use common\emails\templates\ChangeEmailConfirmCurrentEmail;
|
||||
use common\models\confirmations\CurrentEmailConfirmation;
|
||||
use yii\queue\RetryableJobInterface;
|
||||
|
||||
class SendCurrentEmailConfirmation implements RetryableJobInterface {
|
||||
|
||||
public $email;
|
||||
|
||||
public $username;
|
||||
|
||||
public $code;
|
||||
|
||||
public static function createFromConfirmation(CurrentEmailConfirmation $confirmation): self {
|
||||
$result = new self();
|
||||
$result->email = $confirmation->account->email;
|
||||
$result->username = $confirmation->account->username;
|
||||
$result->code = $confirmation->key;
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getTtr() {
|
||||
return 30;
|
||||
}
|
||||
|
||||
public function canRetry($attempt, $error) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \yii\queue\Queue $queue
|
||||
*/
|
||||
public function execute($queue) {
|
||||
$to = EmailHelper::buildTo($this->username, $this->email);
|
||||
$template = new ChangeEmailConfirmCurrentEmail($to, $this->code);
|
||||
$template->send();
|
||||
}
|
||||
|
||||
}
|
||||
43
common/tasks/SendNewEmailConfirmation.php
Normal file
43
common/tasks/SendNewEmailConfirmation.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
namespace common\tasks;
|
||||
|
||||
use common\emails\EmailHelper;
|
||||
use common\emails\templates\ChangeEmailConfirmNewEmail;
|
||||
use common\models\confirmations\NewEmailConfirmation;
|
||||
use yii\queue\RetryableJobInterface;
|
||||
|
||||
class SendNewEmailConfirmation implements RetryableJobInterface {
|
||||
|
||||
public $email;
|
||||
|
||||
public $username;
|
||||
|
||||
public $code;
|
||||
|
||||
public static function createFromConfirmation(NewEmailConfirmation $confirmation): self {
|
||||
$result = new self();
|
||||
$result->email = $confirmation->getNewEmail();
|
||||
$result->username = $confirmation->account->username;
|
||||
$result->code = $confirmation->key;
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getTtr() {
|
||||
return 30;
|
||||
}
|
||||
|
||||
public function canRetry($attempt, $error) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \yii\queue\Queue $queue
|
||||
*/
|
||||
public function execute($queue) {
|
||||
$to = EmailHelper::buildTo($this->username, $this->email);
|
||||
$template = new ChangeEmailConfirmNewEmail($to, $this->username, $this->code);
|
||||
$template->send();
|
||||
}
|
||||
|
||||
}
|
||||
55
common/tasks/SendPasswordRecoveryEmail.php
Normal file
55
common/tasks/SendPasswordRecoveryEmail.php
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
namespace common\tasks;
|
||||
|
||||
use common\emails\EmailHelper;
|
||||
use common\emails\templates\ForgotPasswordEmail;
|
||||
use common\emails\templates\ForgotPasswordParams;
|
||||
use common\models\confirmations\ForgotPassword;
|
||||
use Yii;
|
||||
use yii\queue\RetryableJobInterface;
|
||||
|
||||
class SendPasswordRecoveryEmail implements RetryableJobInterface {
|
||||
|
||||
public $username;
|
||||
|
||||
public $email;
|
||||
|
||||
public $code;
|
||||
|
||||
public $link;
|
||||
|
||||
public $locale;
|
||||
|
||||
public static function createFromConfirmation(ForgotPassword $confirmation): self {
|
||||
$account = $confirmation->account;
|
||||
|
||||
$result = new self();
|
||||
$result->username = $account->username;
|
||||
$result->email = $account->email;
|
||||
$result->code = $confirmation->key;
|
||||
$result->link = Yii::$app->request->getHostInfo() . '/recover-password/' . $confirmation->key;
|
||||
$result->locale = $account->lang;
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getTtr() {
|
||||
return 30;
|
||||
}
|
||||
|
||||
public function canRetry($attempt, $error) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \yii\queue\Queue $queue
|
||||
* @throws \common\emails\exceptions\CannotSendEmailException
|
||||
*/
|
||||
public function execute($queue) {
|
||||
$params = new ForgotPasswordParams($this->username, $this->code, $this->link);
|
||||
$to = EmailHelper::buildTo($this->username, $this->email);
|
||||
$template = new ForgotPasswordEmail($to, $this->locale, $params);
|
||||
$template->send();
|
||||
}
|
||||
|
||||
}
|
||||
55
common/tasks/SendRegistrationEmail.php
Normal file
55
common/tasks/SendRegistrationEmail.php
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
namespace common\tasks;
|
||||
|
||||
use common\emails\EmailHelper;
|
||||
use common\emails\templates\RegistrationEmail;
|
||||
use common\emails\templates\RegistrationEmailParams;
|
||||
use common\models\confirmations\RegistrationConfirmation;
|
||||
use Yii;
|
||||
use yii\queue\RetryableJobInterface;
|
||||
|
||||
class SendRegistrationEmail implements RetryableJobInterface {
|
||||
|
||||
public $username;
|
||||
|
||||
public $email;
|
||||
|
||||
public $code;
|
||||
|
||||
public $link;
|
||||
|
||||
public $locale;
|
||||
|
||||
public static function createFromConfirmation(RegistrationConfirmation $confirmation): self {
|
||||
$account = $confirmation->account;
|
||||
|
||||
$result = new self();
|
||||
$result->username = $account->username;
|
||||
$result->email = $account->email;
|
||||
$result->code = $confirmation->key;
|
||||
$result->link = Yii::$app->request->getHostInfo() . '/activation/' . $confirmation->key;
|
||||
$result->locale = $account->lang;
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getTtr() {
|
||||
return 30;
|
||||
}
|
||||
|
||||
public function canRetry($attempt, $error) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \yii\queue\Queue $queue
|
||||
* @throws \common\emails\exceptions\CannotSendEmailException
|
||||
*/
|
||||
public function execute($queue) {
|
||||
$params = new RegistrationEmailParams($this->username, $this->code, $this->link);
|
||||
$to = EmailHelper::buildTo($this->username, $this->email);
|
||||
$template = new RegistrationEmail($to, $this->locale, $params);
|
||||
$template->send();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user