Browse Source

Update ApiV1Controller, fix account statuses and bookmark pagination

Daniel Supernault 2 years ago
parent
commit
9f66d6b640
1 changed files with 33 additions and 10 deletions
  1. 33 10
      app/Http/Controllers/Api/ApiV1Controller.php

+ 33 - 10
app/Http/Controllers/Api/ApiV1Controller.php

@@ -619,13 +619,20 @@ class ApiV1Controller extends Controller
 		->orderByDesc('id')
 		->orderByDesc('id')
 		->get()
 		->get()
 		->map(function($s) use($user, $napi, $profile) {
 		->map(function($s) use($user, $napi, $profile) {
-			$status = $napi ? StatusService::get($s->id, false) : StatusService::getMastodon($s->id, false);
+            try {
+                $status = $napi ? StatusService::get($s->id, false) : StatusService::getMastodon($s->id, false);
+            } catch (\Exception $e) {
+                $status = false;
+            }
+
 			if($profile) {
 			if($profile) {
 				$status['account'] = $profile;
 				$status['account'] = $profile;
 			}
 			}
 
 
 			if($user && $status) {
 			if($user && $status) {
 				$status['favourited'] = (bool) LikeService::liked($user->profile_id, $s->id);
 				$status['favourited'] = (bool) LikeService::liked($user->profile_id, $s->id);
+                $status['reblogged'] = (bool) ReblogService::get($user->profile_id, $s->id);
+                $status['bookmarked'] = (bool) BookmarkService::get($user->profile_id, $s->id);
 			}
 			}
 			return $status;
 			return $status;
 		})
 		})
@@ -2975,20 +2982,36 @@ class ApiV1Controller extends Controller
 		$dir = $min_id ? '>' : '<';
 		$dir = $min_id ? '>' : '<';
 		$id = $min_id ?? $max_id;
 		$id = $min_id ?? $max_id;
 
 
-		$bookmarks = Bookmark::whereProfileId($pid)
-			->when($id, function($query, $id) use($dir) {
-				return $query->where('status_id', $dir, $id);
-			})
-			->limit($limit)
-			->pluck('status_id')
-			->map(function($id) {
-				return \App\Services\StatusService::getMastodon($id);
+		$bookmarkQuery = Bookmark::whereProfileId($pid)
+            ->orderByDesc('id')
+            ->cursorPaginate($limit);
+
+        $bookmarks = $bookmarkQuery->map(function($bookmark) {
+				return \App\Services\StatusService::getMastodon($bookmark->status_id);
 			})
 			})
 			->filter()
 			->filter()
 			->values()
 			->values()
 			->toArray();
 			->toArray();
 
 
-		return $this->json($bookmarks);
+        $links = null;
+        $headers = [];
+
+        if($bookmarkQuery->nextCursor()) {
+            $links .= '<'.$bookmarkQuery->nextPageUrl().'&limit='.$limit.'>; rel="next"';
+        }
+
+        if($bookmarkQuery->previousCursor()) {
+            if($links != null) {
+                $links .= ', ';
+            }
+            $links .= '<'.$bookmarkQuery->previousPageUrl().'&limit='.$limit.'>; rel="prev"';
+        }
+
+        if($links) {
+            $headers = ['Link' => $links];
+        }
+
+		return $this->json($bookmarks, 200, $headers);
 	}
 	}
 
 
 	/**
 	/**