validate([ // 'name' => 'required|max:255', // 'description' => 'required', //'price' => 'required|numeric', //'release_date' => 'required|date', //]); $game = new Game; $game->fillGameDetails($request->game_slug); ddd($game); //$game->price = $request->price; //$game->release_date = $request->release_date; $game->save(); // Redirect the user to the games index page with a success message return redirect()->route('games.index')->with('success', 'Game added and linked successfully.'); } /** * Display the specified resource. * * @param string slug * @return \Illuminate\Http\Response */ public function show(string $slug) { $game = IGDBController::getGameDetails($slug); return view('games.show', [ 'game' => $this->formatGameForView($game), ]); } /** * Show the form for editing the specified resource. */ public function edit(string $id) { // } /** * Update the specified resource in storage. */ public function update(Request $request, string $id) { // } /** * Remove the specified resource from storage. */ public function destroy(string $id) { // } public function index_old() { $before = Carbon::now()->subMonths(2)->timestamp; $current = Carbon::now()->timestamp; $after = Carbon::now()->addMonths(2)->timestamp; $afterFourMonths = Carbon::now()->addMonths(4)->timestamp; /*$popularGames = Http::withHeaders(config('services.igdb'))->withBody( "fields name, cover.url, first_release_date, total_rating_count, platforms.abbreviation, rating, rating_count, slug; where platforms = (48,49,130,6) & (first_release_date >= {$before} & first_release_date < {$after}); & total_rating_count > 5; sort total_rating_count desc; limit 12;", "text/plain" )->post('https://api.igdb.com/v4/games') ->json(); */ $multiQuery = Cache::remember('multiQuery-games', 7, function () use ($before, $after, $current, $afterFourMonths){ return Http::withHeaders(config('services.igdb'))->withBody( 'query games "popularGames" { fields name, cover.url, release_date.human, first_release_date, total_rating_count, platforms.abbreviation, rating, rating_count, slug; where platforms = (48,49,130,6) & (first_release_date >= '.$before.' & first_release_date < '.$after.') & total_rating_count > 5; sort total_rating_count desc; limit 12; }; query games "recentlyReviewed" { fields name, cover.url, first_release_date, total_rating_count, platforms.abbreviation, rating, rating_count, summary, slug; where platforms = (48,49,130,6) & (first_release_date >= '.$before.' & first_release_date < '.$current.' & rating_count > 5) & total_rating_count > 5; sort total_rating_count desc; limit 3; }; query games "mostAnticipated" { fields name, cover.url, first_release_date, total_rating_count, platforms.abbreviation, rating, rating_count, summary, slug; where platforms = (48,49,130,6) & (first_release_date >= '.$current.' & first_release_date < '.$afterFourMonths.'); sort total_rating_count desc; limit 4; }; query games "comingSoon" { fields name, cover.url, first_release_date, total_rating_count, platforms.abbreviation, rating, rating_count, summary, slug; where platforms = (48,49,130,6) & first_release_date >= '.$current.'; sort first_release_date asc; limit 4; }; ' )->post('https://api.igdb.com/v4/multiquery') ->json(); }); #dd($multiQuery); foreach($multiQuery as $query){ if ($query['name'] == 'popularGames'){ $popularGames = $query['result']; continue; } if ($query['name'] == 'recentlyReviewed'){ $recentlyReviewed = $query['result']; continue; } if ($query['name'] == 'mostAnticipated'){ $mostAnticipated = $query['result']; continue; } if ($query['name'] == 'comingSoon'){ $comingSoon = $query['result']; continue; } } return view('games', [ 'popularGames' => $this->formatForView($popularGames), 'recentlyReviewed' => $this->formatForView($recentlyReviewed), 'mostAnticipated' => $this->formatForView($mostAnticipated), 'comingSoon' => $comingSoon ]); } /** * Format Covers for use */ private function formatForView($games) { return collect($games)->map(function($game){ return collect($game)->merge([ 'coverImageUrl' => isset($game['cover']) ? Str::replaceFirst('thumb', 'cover_big', $game['cover']['url']) : null, 'rating' => isset($game['rating']) ? round($game['rating']) . '%' : null, 'platforms' => collect($game['platforms'])->pluck('abbreviation')->implode(', '), 'formated_release_date' => Carbon::parse($game['first_release_date'])->format('d, M Y') ]); })->toArray(); } private function formatGameForView($game) { return collect($game)->merge([ 'coverImageUrl' => isset($game['cover']) ? Str::replaceFirst('thumb', 'cover_big', $game['cover']['url']) : null, 'member_score' => array_key_exists('rating', $game) ? round($game['rating']): '0', 'critics_score' => array_key_exists('aggregated_rating', $game) ? round($game['aggregated_rating']) : '0', 'genres' => collect($game['genres'])->pluck('name')->implode(', '), 'formatedCompanies' => collect($game['involved_companies'])->pluck('company')->pluck('name')->implode(', '), 'platforms' => array_key_exists('platforms', $game) ? collect($game['platforms'])->pluck('abbreviation')->implode(', ') : null, 'trailer' => array_key_exists('videos', $game) ? 'https://youtube.com/embed/'.$game['videos'][0]['video_id'] : null, 'screenshots' => collect($game['screenshots'])->map(function ($screenshot){ return [ 'big' => Str::replaceFirst('thumb', 'screenshot_big', $screenshot['url']), 'huge' => Str::replaceFirst('thumb', 'screenshot_huge', $screenshot['url']) ]; })->take(9), 'similarGames' => collect($game['similar_games'])->map(function($game){ return collect($game)->merge([ 'coverImageUrl' => array_key_exists('cover', $game) ? Str::replaceFirst('thumb','cover_big', $game['cover']['url']) : 'https://via.placeholder.com/264x352', 'rating' => isset($game['rating']) ? round($game['rating']) : '0', 'platforms' => array_key_exists('platforms',$game) ? collect($game['platforms'])->pluck('abbreviation')->implode(', ') : null, ]); })->take(6), 'social' => [ 'website' => collect($game['websites'])->first(), 'facebook' => collect($game['websites'])->filter(function ($website){ return Str::contains($website['url'],'facebook'); })->first(), 'twitter' => collect($game['websites'])->filter(function ($website){ return Str::contains($website['url'],'twitter'); })->first(), 'instagram' => collect($game['websites'])->filter(function ($website){ return Str::contains($website['url'],'instagram'); })->first(), ], 'formated_release_date' => array_key_exists('first_release_date', $game) ? Carbon::parse($game['first_release_date'])->format('d, M Y') : 'not released, yet' ])->toArray(); } }