UserController.php 4.84 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 Jiannei\Response\Laravel\Support\Facades\Response;

class UserController extends Controller
{
    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','all');

        $page = $request->get('page',1);
        $page_size = $request->get('page_size',20);

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

        $immerse = Immerse::query()
            ->where('user_id', $user_id)
            ->orderByDesc('created_at')
            ->offset(($page - 1) * $page_size)
            ->limit($page_size);
        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' => 'sometimes|string',
            'email' => 'sometimes|string',
            'nickname' => 'sometimes|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);

            $data = $validator->validated();
            foreach ($data as $key => $value) {
                $user->$key = $value;
                if (isset($data['gender'])) {
                    $user->gender = $value ?? 0;
                }
            }

//            $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();
    }

}