UserController.php 5.29 KB
<?php

namespace App\Http\Controllers\V1;

use App\Http\Controllers\Controller;
use App\Models\Immerse;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rules\Password;
use Jiannei\Response\Laravel\Support\Facades\Response;

class UserController extends Controller
{
    public function login(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'email' => 'required|email|max:255',
            'password' => 'required',
        ]);

        if ($validator->fails()){
            return Response::fail('',500,$validator->errors());
        }

        try{
            $user = User::query()->where('email', $request->email)->where('state', 1)->first();

            if (! $user || ! Hash::check($request->password, $user->password)) {
                Response::errorUnauthorized();
            }

            $token = $user->createToken($request->email)->plainTextToken;

            $response = ['token' => $token];

            return Response::success($response);
        }catch ( \Exception $exception ){
            return Response::fail('账号或密码错误',500,$exception->getMessage());
        }

    }

    public function avatar(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'avatar' => 'required|string',
        ]);

        if ($validator->fails()){
            return Response::fail('',500,$validator->errors());
        }

        try{
            $user = Auth::user();

            $user->avatar = $request->avatar;

            $user->save();

        }catch ( \Exception $exception ){
            return Response::fail('',500,$exception->getMessage());
        }

        return Response::success(['avatar' => $user->avatar]);
    }

    public function user(Request $request)
    {
        $user = Auth::user();

        if ($request->get('profile') == 1){
            $user->profile;
        }

        return Response::success($user);
    }

    public function videos(Request $request)
    {
        $type = $request->get('type');

        $user_id = Auth::user()->getAuthIdentifier();

        $immerse = Immerse::query()->where('user_id', $user_id)->orderByDesc('created_at');
        switch ($type)
        {
            case 0 : // 审核中...
                $data = $immerse->where('is_check', 0)->get();
                break;
            case 1 : // 审核通过...
                $data = $immerse->where('is_check',1)->get();
                break;
            default: // 全部
                $data = $immerse->get();
                break;
        }

        if ($data == []) return Response::noContent();

        return Response::success($data);
    }

    public function video($id)
    {
        $data = Immerse::query()->findOrFail($id);

        return Response::success($data);
    }

    public function deleteVideo($id)
    {
        $user_id = Auth::user()->getAuthIdentifier();

        $immerse = Immerse::query()->find($id);

        if ($immerse->user_id == $user_id){
            Storage::disk('public')->delete($immerse->url);
        }else{
            return Response::fail('',500,'错误的user_id');
        }

        $immerse->delete();

        return Response::success(['delete' => true]);
    }

    public function update(Request $request, $id)
    {
        $validator = Validator::make($request->all(), [
            'avatar' => 'required|string',
            'email' => 'required|string',
            'nickname' => 'required|string',
            'gender' => 'sometimes|integer',
        ]);

        if ($validator->fails()){
            return Response::fail('',500,$validator->errors());
        }

        try{
            $user = User::query()->find($id);
            if ($user->id != $request->user()->id) return Response::fail('不可修改他人信息',500);

            $user->email = $request->email;
            $user->avatar = $request->avatar;
            $user->nickname = $request->nickname;
            $user->gender = $request->gender ?? 0;

            $user->save();

        }catch ( \Exception $exception ){
            return Response::fail('',500,$exception->getMessage());
        }

        return Response::success($user);
    }

    public function destroy($id, Request $request)
    {
        $user = User::query()->find($id);

        if ($user->id != $request->user()->id) return Response::fail('不可注销他人信息',500);

        $user->state = 0;

        $user->save();

        return Response::success(['destroy' => true]);
    }

    public function changePassword(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'password' => 'required|confirmed|min:6',
            'password_confirmation' => 'required|same:password',
        ]);

        if ($validator->fails()){
            return Response::fail('',500,$validator->errors());
        }

        try{
            $validated = $validator->validated();
            $user = Auth::user();
            $user->password= Hash::make($validated['password']);
            $user->save();
        }catch (\Exception $exception){
            return Response::fail('',500,'修改密码失败');
        }

        return Response::success();
    }
}