ImmerseController.php 4.02 KB
<?php

namespace App\Http\Controllers\V1;

use App\Http\Controllers\Controller;
use App\Models\Immerse;
use App\Models\UserMakeVideo;
use App\Jobs\UserMakeVideo as MakeVideo;
use App\Jobs\UserMakeImages as MakeImages;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
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',
            'thumbnail_url'  => 'sometimes',
        ]);

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

        $validated = $validator->validated();

        if (Str::contains($validated['item_url'],'//')){
            $item_url = '' ;
        }elseif (Str::contains($validated['item_url'],'/storage/app/public/')){
            $item_url = $validated['item_url'];
        }else{
            $item_url = Storage::disk('public')->path($validated['item_url']);
        }

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

        if ($validated['type'] == 1){
            // 图文音频
            $create = UserMakeVideo::query()->create([
                'poem_id'         => $immerse->poem_id,
                'type'            => $immerse->type,
                'video_url'       => $item_url,
                'image_url'       => $immerse->image_url,
                'bg_music'        => $immerse->bg_music,
                'bgm_url'         => $immerse->bgm_url,
                'feel'            => $validated['content'],
                'weather'         => $validated['weather'],
                'temp_id'         => $immerse->temp_id,
                'thumbnail'       => $validated['thumbnail_url'] ? 1 : 0,
                'thumbnail_url'   => $validated['thumbnail_url'],
            ]);
            // 添加至队列
            MakeImages::dispatch($create);
        }else{
            // 视频
            $create = UserMakeVideo::query()->create([
                'poem_id'         => $immerse->poem_id,
                'type'            => $immerse->type,
                'video_url'       => $item_url,
                'image_url'       => $immerse->image_url,
                'bg_music'        => $immerse->bg_music,
                'bgm_url'         => $immerse->bgm_url,
                'feel'            => $validated['content'],
                'weather'         => $validated['weather'],
                'temp_id'         => $immerse->temp_id,
                'thumbnail'       => $validated['thumbnail_url'] ? 1 : 0,
                'thumbnail_url'   => $validated['thumbnail_url'],
            ]);

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



        return Response::created();
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($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)
    {
        //
    }
}