UserObserver.php 5.0 KB
<?php
/**
 * +-----------------------------------------------------------------------------------------------------------------------
 * 观察者层:用户 处理业务逻辑
 * +-----------------------------------------------------------------------------------------------------------------------
 *
 * PHP version 7
 *
 * @category  App\Observers\User
 * @package   App\Observers\User
 * @author    Richer <yangzi1028@163.com>
 * @date      2020年12月28日15:55:43
 * @copyright 2021-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
namespace App\Observers\User;

use App\Jobs\User\TimesRecordCreatedJob;
use App\Jobs\User\UserCreatedJob;
use App\Jobs\User\UserDeleted;
use App\Jobs\User\UserUpdated;
use App\Jobs\UserTimesRecordJob;
use App\Models\User\TimesRecord;
use App\Models\User\User;
use App\Models\User\UserRemote;

/**
 * Class UserObserver
 *
 * @category  App\Observers\User
 * @package   App\Observers\User
 * @author    Richer <yangzi1028@163.com>
 * @date      2020年12月28日15:55:43
 * @copyright 2021-2022 Richer (http://www.Richer.com/)
 * @license   http://www.Richer.com/ License
 * @link      http://www.Richer.com/
 */
class UserObserver
{
    /**
     * 监听数据即将创建的事件。
     *
     * @param User $model
     * @return void
     */
    public function creating(User $model)
    {
//        $model->invite_code = generate_invite_code();
        //  设置默认密码
        $password = $model->password;
        if (!$password) {
            $model->password =  bcrypt(config('constants.PASSWORD'));
        }
    }

    /**
     * 监听数据创建后的事件。
     *
     * @param User $model
     * @return void
     */
    public function created(User $model)
    {
        // 用户创建成功后,同步用户,生成用户的小程序码
        UserCreatedJob::dispatch($model);

        // 用户赠送积分
        // 记录中增加
        $record = $model->timesRecords()->create([
            'recordable_id' => 0,
            'times' => 10,
            'type'  => TimesRecord::INCREMENT,
            'event' => TimesRecord::REGISTER,
        ]);

        // 同步记录
//        TimesRecordCreatedJob::dispatch($record);

//        //
//        UserTimesRecordJob::dispatch($record);
//        // 创建成功后同步到远程数据库
//        UserRemote::create([
//            'id' => $model->id,
//            'name'      => $model->name,
//            'password'  => $model->password,
//            'mobile'    => $model->mobile,
//            'times'     => $model->times,
//            'nickname'     => $model->nickname,
//            'avatar'     => $model->avatar,
//            'openid'     => $model->openid,
//            'status'     => $model->status,
//            'registered_at'     => $model->registered_at,
//            'registered_ip'     => $model->registered_ip,
//            'token'     => $model->token,
//            'login_times'     => $model->login_times,
//            'created_at'     => $model->created_at,
//        ]);
    }

    /**
     * 监听数据即将更新的事件。
     *
     * @param User $model
     * @return void
     */
    public function updated(User $model)
    {
//        $user = UserRemote::find($model->id);
        $is_updated = false;
        $update = [];
        // 只监控用户的 昵称、头像、token、次数
//        $times =  $model->times;
//        $times_orig =  $model->getOriginal('times');
//        if ($times != $times_orig) {
//            $is_updated = true;
//            $update['times']  = $times;
////            $user->times = $times;
//        }
        $nickname = $model->nickname;
        $nickname_orig =  $model->getOriginal('nickname');
        if ($nickname != $nickname_orig) {
            $is_updated = true;
            $update['nickname']  = $nickname;
        }
        $avatar = $model->avatar;
        $avatar_orig =  $model->getOriginal('avatar');
        if ($avatar != $avatar_orig) {
            $is_updated = true;
//            $user->avatar = $avatar;
            $update['avatar']  = $avatar;

        }

        $token = $model->token;
        $token_orig =  $model->getOriginal('token');
        if ($token != $token_orig) {
            $is_updated = true;
//            $user->token = $token;
            $update['token']  = $token;

        }
        if ($is_updated === true) {
//            $user->save();
            UserUpdated::dispatch($model, $update);

        }
    }

    /**
     * 监听数据即将保存的事件。
     *
     * @param User $model
     * @return void
     */
    public function saving(User $model)
    {
        //
    }

    /**
     * 监听数据保存后的事件。
     *
     * @param User $model
     * @return void
     */
    public function saved(User $model)
    {
       //
    }

    /**
     * 监听数据删除后的事件。
     *
     * @param User $model
     * @return void
     */
    public function deleted(User $model)
    {
        UserDeleted::dispatch($model);
    }
}