mirror of
				https://github.com/elyby/accounts.git
				synced 2025-05-31 14:11:46 +05:30 
			
		
		
		
	В проект внедрён RabbitMQ.
Контроллер для работы с RabbitMQ научился создавать типизированные аргументы для $body Добавлена таблица с историей ников Добавлена таблица Mojang ников Добавлена проверка активированности аккаунта в AccountsController
This commit is contained in:
		@@ -2,8 +2,13 @@
 | 
			
		||||
namespace api\models;
 | 
			
		||||
 | 
			
		||||
use api\models\base\PasswordProtectedForm;
 | 
			
		||||
use common\helpers\Amqp;
 | 
			
		||||
use common\models\Account;
 | 
			
		||||
use common\models\amqp\UsernameChanged;
 | 
			
		||||
use common\models\UsernameHistory;
 | 
			
		||||
use PhpAmqpLib\Message\AMQPMessage;
 | 
			
		||||
use Yii;
 | 
			
		||||
use yii\base\ErrorException;
 | 
			
		||||
use yii\helpers\ArrayHelper;
 | 
			
		||||
 | 
			
		||||
class ChangeUsernameForm extends PasswordProtectedForm {
 | 
			
		||||
@@ -30,10 +35,52 @@ class ChangeUsernameForm extends PasswordProtectedForm {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $transaction = Yii::$app->db->beginTransaction();
 | 
			
		||||
        $account = $this->getAccount();
 | 
			
		||||
        $account->username = $this->username;
 | 
			
		||||
        $oldNickname = $account->username;
 | 
			
		||||
        try {
 | 
			
		||||
            $account->username = $this->username;
 | 
			
		||||
            if (!$account->save()) {
 | 
			
		||||
                throw new ErrorException('Cannot save account model with new username');
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        return $account->save();
 | 
			
		||||
            $usernamesHistory = new UsernameHistory();
 | 
			
		||||
            $usernamesHistory->account_id = $account->id;
 | 
			
		||||
            $usernamesHistory->username = $account->username;
 | 
			
		||||
            if (!$usernamesHistory->save()) {
 | 
			
		||||
                throw new ErrorException('Cannot save username history record');
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $transaction->commit();
 | 
			
		||||
        } catch (ErrorException $e) {
 | 
			
		||||
            $transaction->rollBack();
 | 
			
		||||
            throw $e;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $this->createTask($account->id, $account->username, $oldNickname);
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * TODO: вынести это в отдельную сущность, т.к. эта команда используется внутри формы регистрации
 | 
			
		||||
     *
 | 
			
		||||
     * @param integer $accountId
 | 
			
		||||
     * @param string  $newNickname
 | 
			
		||||
     * @param string  $oldNickname
 | 
			
		||||
     */
 | 
			
		||||
    public function createTask($accountId, $newNickname, $oldNickname) {
 | 
			
		||||
        $message = Amqp::getInstance()->prepareMessage(new UsernameChanged([
 | 
			
		||||
            'accountId' => $accountId,
 | 
			
		||||
            'oldUsername' => $oldNickname,
 | 
			
		||||
            'newUsername' => $newNickname,
 | 
			
		||||
        ]), [
 | 
			
		||||
            'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT,
 | 
			
		||||
        ]);
 | 
			
		||||
 | 
			
		||||
        Amqp::sendToExchange('account', 'username-changed', $message, [
 | 
			
		||||
            3 => true, // durable -> true
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -95,6 +95,9 @@ class RegistrationForm extends ApiForm {
 | 
			
		||||
            throw $e;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $changeUsernameForm = new ChangeUsernameForm();
 | 
			
		||||
        $changeUsernameForm->createTask($account->id, $account->username, null);
 | 
			
		||||
 | 
			
		||||
        return $account;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user