HomeController.php 4.98 KB
<?php

namespace App\Http\Controllers\V1;

use App\Http\Controllers\Controller;
use App\Models\Immerse;
use App\Models\OnePoem;
use App\Models\OnePoem2;
use App\Models\PackPoem;
use Illuminate\Http\Request;
use Jiannei\Response\Laravel\Support\Facades\Response;
use Laravel\Sanctum\Sanctum;

class HomeController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function index(Request $request)
    {
        $page = $request->get('page',1);
        $page_size = $request->get('page_size',20);
        $lists = Immerse::query()
            ->where('state', 1)
            ->orderByDesc('created_at')
            ->skip(($page - 1) * $page_size)->take($page_size + 1)->get();

        $token = $request->bearerToken();
        $user_id = $token ? ((Sanctum::$personalAccessTokenModel)::findToken($token))->tokenable_id : 'asdasd';

        $data = [];
        foreach ($lists as $list) {
            $data[] = [
                'id' => $list->id,
                'user_id' => $list->user_id,
                'title' => $list->title,
                'content' => $list->content,
                'weather' => $list->weather,
                'haungli' => $list->haungli,
                'longitude' => $list->longitude,
                'latitude' => $list->latitude,
                'location' => $list->location,
                'url' => $list->url,
                'type' => $list->type,
                'poem_id' => $list->poem_id,
                'temp_id' => $list->temp_id,
                'bgm' => $list->bgm,
                'praise' => $list->praise,
                'view' => $list->view,
                'collect' => $list->collect,
                'share' => $list->share,
                'is_praise' => $list->isPraise($list->id, $user_id),
                'is_collect' => $list->isCollect($list->id, $user_id),
            ];
        }
        if ($data == []) return Response::noContent();

        return Response::success($data);
    }


    public function packpoem(Request $request)
    {
        $packpoems = PackPoem::query()->where('state',0)
            ->orderByDesc('id')
            ->paginate(intval($request->per_page));

        return Response::success($packpoems);
    }


    public function poem($id)
    {
        // 一对多临时方案,下版本会改为数组结构
        try{
            $poem2 = OnePoem2::query()->find($id);
            $data = [
                'title' => $poem2->title,
                'author' => $poem2->author,
                'state' => 0,
            ];
            foreach ($poem2->verses as $item){
                $data['content'] .= $item->content."\n";
                $data['annotate'] .= $item->annotate."\n";
                $data['spelling'] .= $item->spelling."\n";
                $data['en'] .= $item->en."\n";
            }
            return Response::success($data);
        }catch (\Exception $exception){
            return Response::fail($exception->getMessage());
        }
    }

    /**
     * 目前的逻辑是:点赞或者收藏过的不显示在里面
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
     */
    public function fresh(Request $request)
    {
        $page = $request->get('page',1);
        $page_size = $request->get('page_size',20);
        $lists = Immerse::query()
            ->where('state', 1)
            ->orderByDesc('created_at')
            ->skip(($page - 1) * $page_size)->take($page_size + 1)->get();
        $token = $request->bearerToken();
        $user_id = $token ? ((Sanctum::$personalAccessTokenModel)::findToken($token))->tokenable_id : 'asdasd';

        $data = [];
        foreach ($lists as $list) {
            if (!$list->isPraise($list->id, $user_id) && !$list->isCollect($list->id, $user_id)){
                $data[] = [
                    'id' => $list->id,
                    'user_id' => $list->user_id,
                    'title' => $list->title,
                    'content' => $list->content,
                    'weather' => $list->weather,
                    'haungli' => $list->haungli,
                    'longitude' => $list->longitude,
                    'latitude' => $list->latitude,
                    'location' => $list->location,
                    'url' => $list->url,
                    'type' => $list->type,
                    'poem_id' => $list->poem_id,
                    'temp_id' => $list->temp_id,
                    'bgm' => $list->bgm,
                    'praise' => $list->praise,
                    'view' => $list->view,
                    'collect' => $list->collect,
                    'share' => $list->share,
                    'is_praise' => $list->isPraise($list->id, $user_id),
                    'is_collect' => $list->isCollect($list->id, $user_id),
                ];
            }
        }

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

        return Response::success($data);
    }
}