| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 | <?phpnamespace App\Http\Controllers\V1;use App\Models\User;use App\Models\UserFeedback;use App\Services\Api\SortService;use App\Services\Api\UserService;use Illuminate\Http\Request;use Illuminate\Support\Facades\Validator;use App\Services\Base\ErrorCode;use PHPUnit\Util\Exception;use App\Services\SmsServer;class UserController extends Controller{    public function __construct()    {        $this->user = auth('api')->user();        $this->userId = $this->user ? $this->user->id : 0;        //如果用户被删除,会自动退出登录        if (!empty($this->user->deleted_at)) {            $this->user->online = 0;            $this->user->save();            auth('api')->logout();        }    }    /**     * 获取用户列表     */    public function index(Request $request)    {        $validator = Validator::make($request->all(), [            'nickname' => 'required',        ]);        if($validator->fails()){            return $this->error($validator->errors()->first(),ErrorCode::PARAMS_ERROR);        }        $search  = ['keyword'=>'1'];        $where   = ['nickname' => $request->nickname];        $orderby = ['id'=>'desc','created_at'=>'desc'];        $pagesize = 10;        $list = (new UserService())->search($search,$where,$orderby,$pagesize);        return $this->success($list);    }    /**     * 获取用户详情     */    public function show(Request $request,$id)    {        $info = (new UserService())->show($id);        return $this->success($info);    }    /**     * 新增用户     */    public function create(Request $request)    {        $validator = Validator::make($request->all(), [            'nickname' => 'required',            'avatar' => 'required',            'password' => 'required',            'email' => 'required',            'mobile' => 'required',        ]);        if($validator->fails()){            return $this->error($validator->errors()->first(),ErrorCode::PARAMS_ERROR);        }        $res = (new UserService())->create($request->all());        return $this->success($res);    }    /**     * 更新用户     */    public function update(Request $request,$id)    {        $validator = Validator::make($request->all(), [            'nickname' => 'required',            'avatar' => 'required',            'password' => 'required',            'email' => 'required',            'mobile' => 'required',        ]);        if($validator->fails()){            return $this->error($validator->errors()->first(),ErrorCode::PARAMS_ERROR);        }        $res = (new UserService())->update($id,$request->all());        return $this->success($res);    }        /**     * 删除用户     */    public function destroy(Request $request,$id)    {        $res = (new UserService())->destroy($id);        return $this->success($res);    }    /**     * 更新用户头像     */    public function avatar(Request $request,$id)    {        $validator = Validator::make($request->all(), [            'avatar' => 'required',        ]);        if($validator->fails()){            return $this->error($validator->errors()->first(),ErrorCode::PARAMS_ERROR);        }        $res = (new UserService())->update($id,$request->all());        return $this->success($id);    }    //问题反馈    public function feedback(Request $request)    {        $content  = $request->input('content');        $file_url = $request->input('file_url', '');        $validator = Validator::make($request->all(), [            'content' => 'required|min:2|max:200',        ]);        if($validator->fails()){            return $this->error($validator->errors()->first());        }        $feedback = new UserFeedback();        $feedback->user_id = $this->userId;        $feedback->content = $content;        $feedback->file = !empty($file_url) ? json_encode($file_url) : '';        $feedback->save();        return $this->success();    }    //按照首字母进行分组排序,类似手机通讯录(注意:get()后面直接 ->toArray()在数据为空的时候导致报错)    public function groupByInitial(Request $request)    {        $keyword = $request->input('keyword', '');        $list = User::query()            ->select('id', 'name', 'avatar')            ->when($keyword, function ($query, $keyword){                $query->where('name', 'like', '%'.$keyword.'%');            })            ->whereNotNull('name')            ->whereNull('deleted_at')            ->get();        if($list->isNotEmpty()){            $list = $list->toArray();            $list = SortService::getResultList($list);        }else{            $list = [];        }        return $this->success($list);    }    //绑定或解绑 手机号    public function bindMobile(Request $request)    {        try {            if(!$this->isAllowUnbound()){              return $this->output([],ErrorCode::NOT_ALLOW);            }            $user = User::find($this->user->id);            if (!empty($user->mobile)) { //要解绑                $user->mobile = '';            } else { //要绑定                $user->mobile = $request->mobile;            }            SmsServer::checkSmsCodeByVerifyKey($request->mobile, $request->smsCode);            if (!$user->save()) {              return $this->output([],ErrorCode::DATA_SAVE_FALSE);            }        } catch (\Exception $exception) {            return $this->error($exception->getMessage());        }        return $this->success();    }    //判断是否允许解绑    public function isAllowUnbound()    {        $user = $this->user;        $n = 0;        if(!empty($user->mobile)){            $n++;        }        if(!empty($user->email)){            $n++;        }        if(!empty($user->open_id)){            $n++;        }        if($n==1){            return false;        }        return true;    }}
 |