From e97900a060b8fc011782cd2605fd73e3b90915ab Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sat, 11 Jun 2022 05:16:38 -0600 Subject: [PATCH] Update follower counts on follow_request approval --- app/Http/Controllers/AccountController.php | 30 +++++++++++++------- app/Http/Controllers/Api/ApiV1Controller.php | 27 +++++++++++++----- 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index e1c9bfcb3..0d3177b9d 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -393,17 +393,27 @@ class AccountController extends Controller switch ($action) { case 'accept': - $follow = new Follower(); - $follow->profile_id = $follower->id; - $follow->following_id = $pid; - $follow->save(); + $follow = new Follower(); + $follow->profile_id = $follower->id; + $follow->following_id = $pid; + $follow->save(); - if($follower->domain != null && $follower->private_key === null) { - FollowAcceptPipeline::dispatch($followRequest); - } else { - FollowPipeline::dispatch($follow); - $followRequest->delete(); - } + $profile = Profile::findOrFail($pid); + $profile->followers_count++; + $profile->save(); + AccountService::del($profile->id); + + $profile = Profile::findOrFail($follower->id); + $profile->following_count++; + $profile->save(); + AccountService::del($profile->id); + + if($follower->domain != null && $follower->private_key === null) { + FollowAcceptPipeline::dispatch($followRequest); + } else { + FollowPipeline::dispatch($follow); + $followRequest->delete(); + } break; case 'reject': diff --git a/app/Http/Controllers/Api/ApiV1Controller.php b/app/Http/Controllers/Api/ApiV1Controller.php index 43f11b860..18890483b 100644 --- a/app/Http/Controllers/Api/ApiV1Controller.php +++ b/app/Http/Controllers/Api/ApiV1Controller.php @@ -1160,18 +1160,21 @@ class ApiV1Controller extends Controller { abort_if(!$request->user(), 403); $this->validate($request, [ - 'limit' => 'sometimes|integer|min:1|max:40' + 'limit' => 'sometimes|integer|min:1|max:100' ]); $user = $request->user(); - $followRequests = FollowRequest::whereFollowingId($user->profile->id) + $res = FollowRequest::whereFollowingId($user->profile->id) ->limit($request->input('limit', 40)) - ->pluck('follower_id'); + ->pluck('follower_id') + ->map(function($id) { + return AccountService::getMastodon($id, true); + }) + ->filter(function($acct) { + return $acct && isset($acct['id']); + }) + ->values(); - $profiles = Profile::find($followRequests); - - $resource = new Fractal\Resource\Collection($profiles, new AccountTransformer()); - $res = $this->fractal->createData($resource)->toArray(); return $this->json($res); } @@ -1204,6 +1207,16 @@ class ApiV1Controller extends Controller $follow->following_id = $pid; $follow->save(); + $profile = Profile::findOrFail($pid); + $profile->followers_count++; + $profile->save(); + AccountService::del($profile->id); + + $profile = Profile::findOrFail($follower->id); + $profile->following_count++; + $profile->save(); + AccountService::del($profile->id); + if($follower->domain != null && $follower->private_key === null) { FollowAcceptPipeline::dispatch($followRequest); } else {