ImmerseController.php 5.73 KB
<?php

namespace App\Http\Controllers\V1;

use App\Http\Controllers\Controller;
use App\Jobs\UserMakeImmerse;
use App\Models\Collect;
use App\Models\Immerse;
use App\Models\UserProfile;
use App\Models\Praise;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Jiannei\Response\Laravel\Support\Facades\Response;

class ImmerseController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @throws \Illuminate\Validation\ValidationException
     * @return \Illuminate\Http\JsonResponse
     */
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(),[
            'item_url' => 'required|string',
            'item_id'  => 'required',
            'type'     => 'required',
            'content'  => 'sometimes',
            'weather'  => 'sometimes',
            'haungli'  => 'sometimes',
            'longitude' => 'sometimes',
            'latitude'  => 'sometimes',
            'location'  => 'sometimes',
        ]);

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

        $validated = $validator->validated();

        $user_id = $request->user()->id;
        $user_profile = UserProfile::query()->where('user_id', $user_id)->first();
        if ($user_profile->is_vip == UserProfile::NO_VIP || $user_profile->video_count > 5) {
            return Response::fail("非VIP用户最多发布5个视频");
        }

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

        $create = Immerse::query()->create([
            'user_id' => $user_id,
            'title' => '',
            'content' => $validated['content'],
            'weather' => $validated['weather'] ?? '',
            'haungli' => $validated['haungli'] ?? '',
            'longitude' => $validated['longitude'] ?? '',
            'latitude' => $validated['latitude'] ?? '',
            'location' => $validated['location'] ?? '',
            'url' => '',
            'type' => $validated['type'],
            'upload_file' => $validated['item_url'],
            'duration' => 0,
            'size' => 0,
            'origin_video_url' => $immerse->origin_video_url,
            'origin_image_url' => $immerse->origin_image_url,
            'poem_id' => $immerse->poem_id,
            'temp_id' => $immerse->temp_id,
            'thumbnail' => '',
            'bgm' => $immerse->bgm,
            'state' => 0
        ]);

        // 添加至队列
        UserMakeImmerse::dispatch($create);

        return Response::success($create);
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\JsonResponse
     */
    public function show($id)
    {
        return Response::success(Immerse::query()->find($id));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }

    public function addview($id)
    {
        try{
            Immerse::query()->where('id', $id)->increment('view');
        }catch (\Exception $exception){
            return Response::fail($exception->getMessage());
        }

        return Response::success();
    }

    public function praise($id, Request $request)
    {
        $user = $request->user();

        $praise = (new Praise())->zanOrCancel($id, $user->id);

        if (!$praise) return Response::fail('服务端异常');

        else return Response::success();
    }

    public function collect($id, Request $request)
    {
        $user = $request->user();

        $coll = (new Collect())->collOrCancel($id, $user->id);

        if (!$coll) return Response::fail('服务端异常');

        else return Response::success();
    }

    public function collectList(Request $request)
    {
        $page = $request->get('page',1);
        $page_size = $request->get('page_size',20);

        $user = $request->user();

        $collects = Collect::query()->where(['user_id' => $user->id, 'state' => 1])
            ->orderByDesc('created_at')
            ->skip(($page - 1) * $page_size)->take($page_size + 1)->get();

        $lists = [];

        if ($collects->count()){
            foreach ($collects as $collect){
                if ($collect->immerse){  // 避免删除过临境的还存在收藏列表里
                    $data['user_id'] = $collect->user_id;
                    $data['immerse_id'] = $collect->immerse_id;
                    $data['content'] = $collect->immerse->content;
                    $data['thumbnail'] = $collect->immerse->thumbnail;
                    $data['url'] = $collect->immerse->url;
                    $data['type'] = $collect->immerse->type;
                    $data['is_praise'] = $collect->immerse->isPraise($collect->immerse_id, $user->id);
                    $data['is_collect'] = $collect->immerse->isCollect($collect->immerse_id, $user->id);

                    $lists[] = $data;
                }
            }
        }

//        if ($lists == []) return Response::success(\response($lists, 'success'));
//        return Response::success($lists);

        return \response([
            'status' => 'success',
            'code' => 200,
            'message' => 'Http ok',
            'data' => $lists,
        ], 200);
    }
}