123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- <?php
- namespace App\Http\Controllers\V1;
- use App\Models\Banner;
- use App\Models\Episode;
- use App\Models\EpisodesCategory;
- use App\Models\NavBar;
- use App\Models\Tabbar;
- use App\Models\User;
- use App\Models\UserWatchRecord;
- use Carbon\Carbon;
- use Illuminate\Database\Eloquent\Builder;
- use Illuminate\Support\Collection;
- class EpisodeController extends Controller
- {
- /**
- * 推荐
- */
- public function recommend()
- {
- $history = UserWatchRecord::filterUser()
- ->withCount(['episode'])
- ->inRandomOrder()
- //->where('created_at','>=', Carbon::now()->subDays(7)->toDateTime())
- ->first();
- $limit = 3 - ($history?$history->count():0);
- // 推荐
- $episodes = Episode::withCount(['lists'])
- ->where('is_opend', 1)
- ->where('platform', \user()->info->platform)
- ->when($history,function ($query) use($history){
- /* @var Builder $query*/
- return $query->where('category_id', $history->episode->category_id)
- ->where('id','<>', $history->episode->id);
- })
- ->limit($limit)
- ->get();
- $lists = [];
- $ids = [];
- if($history){
- $ids[] = $history->episode->id;
- $history->episode->recent = true;
- $history->episode->status_text = $history->episode->status;
- $history->episode->total = $history->episode->lists->count();
- unset( $history->episode->lists);
- $lists[] = $history->episode;
- }
- /* @var Episode $episode*/
- foreach ($episodes as $episode){
- $ids[] = $episode->id;
- $episode->status_text = $episode->status;
- $episode->total = $episode->lists_count;
- $episode->guess = true;
- $lists[] = $episode;
- }
- // 推荐的不够两个 需要补充
- $limit = $limit -($episodes ? $episodes->count() : 0);
- $supplement = Episode::withCount(['lists'])
- ->where('is_opend', 1)
- ->where('platform', \user()->info->platform)
- ->when($ids, function ($query) use($ids){
- /* @var Builder $query*/
- return $query->whereNotIn('id',$ids);
- })
- ->limit($limit)
- ->get();
- /* @var Episode $episode*/
- foreach ($supplement as $episode){
- $episode->status_text = $episode->status;
- $episode->total = $episode->lists_count;
- $episode->guess = true;
- $lists[] = $episode;
- }
- return $this->success($lists);
- }
- /**
- * 最新
- */
- public function news()
- {
- $limit = request()->input('limit',3);
- $page = request()->input('page',1);
- $offset = ($page - 1) * $limit;
- $episodes = Episode::withCount(['lists'])
- ->where('is_opend', 1)
- ->where('platform', \user()->info->platform)
- ->inRandomOrder()
- ->orderByDesc('id')
- ->limit($limit)
- ->offset($offset)
- ->get();
- $lists = [];
- /* @var Episode $episode*/
- foreach ($episodes as $episode){
- $episode->status_text = $episode->status;
- $episode->total = $episode->lists_count;
- $lists[] = $episode;
- }
- return $this->success($lists);
- }
- /**
- * 排行
- */
- public function rank()
- {
- $limit = request()->input('limit',3);
- $page = request()->input('page',1);
- $offset = ($page - 1) * $limit;
- $episodes = Episode::withCount(['userEpisodesRecords','lists'])
- ->where('is_opend', 1)
- ->where('platform', \user()->info->platform)
- ->orderByDesc('user_episodes_records_count')
- ->limit($limit)
- ->offset($offset)
- ->get();
- $lists = [];
- $rank = (($page - 1) * $limit) + 1;
- /* @var Episode $episode*/
- foreach ($episodes as $episode){
- $episode->status_text = $episode->status;
- $episode->total = $episode->lists_count;
- $episode->rank = $rank++;
- $lists[] = $episode;
- }
- return $this->success($lists);
- }
- public function trace()
- {
- $lists = EpisodesCategory::with(['episodes' =>function($query){
- /* @var Builder $query*/
- return $query->limit(3);
- }])->has('episodes')
- ->orderByDesc('sort')
- ->get();
- /* @var EpisodesCategory $list*/
- foreach ($lists as $list){
- /* @var Episode $episode*/
- foreach ($list->episodes as $episode){
- $count = $episode->withCount('lists')->first()->toArray();
- $episode->total = $count['lists_count'];
- $episode->status_text = $episode->status;
- }
- }
- return $this->success($lists);
- }
- /**
- * 最新
- */
- public function search()
- {
- $keywords = request()->input('keywords','');
- $limit = request()->input('limit',3);
- $page = request()->input('page',1);
- $offset = ($page - 1) * $limit;
- $episodes = Episode::withCount(['lists'])
- ->where('is_opend', 1)
- ->where('platform', \user()->info->platform)
- ->when($keywords, function ($query, $keywords) {
- /* @var Builder $query*/
- return $query->where('name','like', "%$keywords%");
- })
- ->inRandomOrder()
- ->orderByDesc('id')
- ->limit($limit)
- ->offset($offset)
- ->get();
- $lists = [];
- /* @var Episode $episode*/
- foreach ($episodes as $episode){
- $episode->status_text = $episode->status;
- $episode->total = $episode->lists_count;
- $lists[] = $episode;
- }
- return $this->success($lists);
- }
- public function detail($id)
- {
- $episodes = Episode::withCount(['userWatchRecord','userCollect','userFavorite','lists'])
- ->with(['category:id,name','lists:id,episodes_id,sort,url,is_free,sale_price'])
- ->where('is_opend', 1)
- ->where('id', $id)
- ->where('platform', \user()->info->platform)
- ->first();
- return $this->success($episodes);
- }
- public function shared($id)
- {
- $res = Episode::find($id);
- if(!$res){
- return $this->success();
- }
- $res->share_count = $res->share_count + 1;
- $res->save();
- return $this->success();
- }
- }
|