浏览代码

Update ApiV1Controller, improve favourites endpoint

Daniel Supernault 3 年之前
父节点
当前提交
151dc17c25
共有 1 个文件被更改,包括 18 次插入13 次删除
  1. 18 13
      app/Http/Controllers/Api/ApiV1Controller.php

+ 18 - 13
app/Http/Controllers/Api/ApiV1Controller.php

@@ -1026,33 +1026,38 @@ class ApiV1Controller extends Controller
 
 		$user = $request->user();
 
-		$status = Status::findOrFail($id);
+		$status = StatusService::getMastodon($id, false);
 
-		if($status->profile_id !== $user->profile_id) {
-			if($status->scope == 'private') {
-				abort_if(!$status->profile->followedBy($user->profile), 403);
+		abort_unless($status, 400);
+
+		$spid = $status['account']['id'];
+
+		if($spid !== $user->profile_id) {
+			if($status['visibility'] == 'private') {
+				abort_if(!FollowerService::follows($user->profile_id, $spid), 403);
 			} else {
-				abort_if(!in_array($status->scope, ['public','unlisted']), 403);
+				abort_if(!in_array($status['visibility'], ['public','unlisted']), 403);
 			}
 		}
 
 		$like = Like::firstOrCreate([
 			'profile_id' => $user->profile_id,
-			'status_id' => $status->id
+			'status_id' => $status['id']
 		]);
 
 		if($like->wasRecentlyCreated == true) {
-			$like->status_profile_id = $status->profile_id;
-			$like->is_comment = !empty($status->in_reply_to_id);
+			$like->status_profile_id = $spid;
+			$like->is_comment = !empty($status['in_reply_to_id']);
 			$like->save();
-			$status->likes_count = $status->likes()->count();
-			$status->save();
+			Status::findOrFail($status['id'])->update([
+				'favourites_count' => ($status['favourites_count'] ?? 0) + 1
+			]);
 			LikePipeline::dispatch($like);
 		}
 
-		$res = StatusService::getMastodon($status->id, false);
-		$res['favourited'] = true;
-		return response()->json($res);
+		$status['favourited'] = true;
+		$status['favourites_count'] = $status['favourites_count'] + 1;
+		return response()->json($status);
 	}
 
 	/**