From 4fe46723ee7f23b1d59faa7ee9291db2558ff996 Mon Sep 17 00:00:00 2001
From: Daniel Supernault <danielsupernault@gmail.com>
Date: Sun, 10 Feb 2019 13:25:37 -0700
Subject: [PATCH] Update DiscoverController

---
 app/Http/Controllers/DiscoverController.php | 30 ++++++++++++++++++++-
 1 file changed, 29 insertions(+), 1 deletion(-)

diff --git a/app/Http/Controllers/DiscoverController.php b/app/Http/Controllers/DiscoverController.php
index a39dfd4b1..0eddeed96 100644
--- a/app/Http/Controllers/DiscoverController.php
+++ b/app/Http/Controllers/DiscoverController.php
@@ -3,10 +3,12 @@
 namespace App\Http\Controllers;
 
 use App\{
+  DiscoverCategory,
   Follower,
   Hashtag,
   Profile,
   Status, 
+  StatusHashtag, 
   UserFilter
 };
 use Auth, DB, Cache;
@@ -28,7 +30,7 @@ class DiscoverController extends Controller
     {
         $this->validate($request, [
           'page' => 'nullable|integer|min:1|max:10',
-      ]);
+        ]);
 
         $tag = Hashtag::with('posts')
           ->withCount('posts')
@@ -51,4 +53,30 @@ class DiscoverController extends Controller
         
         return view('discover.tags.show', compact('tag', 'posts'));
     }
+
+    public function showCategory(Request $request, $slug)
+    {
+      $tag = DiscoverCategory::whereActive(true)
+        ->whereSlug($slug)
+        ->firstOrFail();
+
+      // todo refactor this mess
+      $tagids = $tag->hashtags->pluck('id')->toArray();
+      $sids = StatusHashtag::whereIn('hashtag_id', $tagids)->orderByDesc('status_id')->take(500)->pluck('status_id')->toArray();
+      $posts = Status::whereIn('id', $sids)->whereNull('uri')->whereType('photo')->whereNull('in_reply_to_id')->whereNull('reblog_of_id')->orderByDesc('created_at')->paginate(21);
+      $tag->posts_count = $tag->posts()->count();
+      return view('discover.tags.category', compact('tag', 'posts'));
+    }
+
+    public function showPersonal(Request $request)
+    {
+      $profile = Auth::user()->profile;
+      // todo refactor this mess
+      $tags = Hashtag::whereHas('posts')->orderByRaw('rand()')->take(5)->get();
+      $following = $profile->following->pluck('id');
+      $following = $following->push($profile->id)->toArray();
+      $posts = Status::withCount(['likes','comments'])->whereNotIn('profile_id', $following)->whereHas('media')->whereType('photo')->orderByDesc('created_at')->paginate(21);
+      $posts->post_count = Status::whereNotIn('profile_id', $following)->whereHas('media')->whereType('photo')->count();
+      return view('discover.personal', compact('posts', 'tags'));
+    }
 }