RegisterRequest.php 2.79 KB
<?php

namespace App\Http\Container\AppSection\Requests;

use App\Http\Request\PhoneCodeRequest;
use App\Models\User;
use App\Support\BusinessCode;
use Hikoon\LaravelApi\Exceptions\ValidationException;

class RegisterRequest extends PhoneCodeRequest
{
    /**
     * @var string
     */
    protected string $areaName = 'area_code';

    /**
     * @throws \Hikoon\LaravelApi\Exceptions\ValidationException
     * @throws \RedisException
     */
    public function passedValidation(): void
    {
        parent::passedValidation();

        $this->setCode($this->input('code'), 'register', 'app');

        if ($this->checkPhoneExist()) {
            throw new ValidationException(BusinessCode::PHONE_EXISTS);
        }

        if (!$this->checkSmsKey()) {
            throw new ValidationException(BusinessCode::SMS_CODE_ERROR);
        }
    }

    /**
     * @return array
     */
    public function rules(): array
    {
        return array_merge(parent::rules(), [
            'nick_name'       => 'required|string|between:2,100|unique:' . User::class . ',nick_name,NULL,id,deleted_at,NULL',
            'real_name'       => 'required|string|between:2,100',
            'email'           => 'required|email|unique:' . User::class . ',email,NULL,id,deleted_at,NULL',
            'register_type'   => 'required|integer|in:1,2',
            'register_remark' => 'exclude_unless:register_type,1|required|string|between:0,200',
            'inviter_id'      => 'exclude_unless:register_type,2|required|integer|exists:' . User::class . ',id,deleted_at,NULL',
        ]);
    }

    /**
     * @return array
     */
    public function messages(): array
    {
        return array_merge(parent::messages(), [
            'nick_name.required'       => '请输入艺名',
            'nick_name.between'        => '艺名长度区间为:min~:max',
            'nick_name.unique'         => '艺名已被注册',
            'real_name.required'       => '请输入实名',
            'real_name.between'        => '实名长度区间为:min~:max',
            'email.required'           => '请输入邮箱地址',
            'email.email'              => '邮箱地址格式不正确',
            'email.unique'             => '邮箱地址已被注册',
            'register_type.required'   => '请选择来源渠道',
            'register_type.integer'    => '来源渠道类型错误',
            'register_type.in'         => '来源渠道不在指定范围内',
            'register_remark.required' => '请输入来源说明',
            'register_remark.between'  => '来源说明长度区间为:min~:max字节',
            'inviter_id.required'      => '请选择推荐用户',
            'inviter_id.integer'       => '推荐用户类型错误',
            'inviter_id.exists'        => '推荐用户不存在'
        ]);
    }
}