mirror of
https://github.com/pixelfed/pixelfed.git
synced 2024-11-22 06:21:27 +00:00
Update Profile model, improve counter caching
This commit is contained in:
parent
b4573a8f0a
commit
4a14e970f0
5 changed files with 62 additions and 23 deletions
|
@ -376,6 +376,9 @@ class AccountController extends Controller
|
|||
break;
|
||||
}
|
||||
|
||||
Cache::forget('profile:follower_count:'.$pid);
|
||||
Cache::forget('profile:following_count:'.$pid);
|
||||
|
||||
return response()->json(['msg' => 'success'], 200);
|
||||
}
|
||||
|
||||
|
|
|
@ -468,6 +468,10 @@ class ApiV1Controller extends Controller
|
|||
Cache::forget('api:local:exp:rec:'.$user->profile_id);
|
||||
Cache::forget('user:account:id:'.$target->user_id);
|
||||
Cache::forget('user:account:id:'.$user->id);
|
||||
Cache::forget('profile:follower_count:'.$target->id);
|
||||
Cache::forget('profile:follower_count:'.$user->profile_id);
|
||||
Cache::forget('profile:following_count:'.$target->id);
|
||||
Cache::forget('profile:following_count:'.$user->profile_id);
|
||||
|
||||
$resource = new Fractal\Resource\Item($target, new RelationshipTransformer());
|
||||
$res = $this->fractal->createData($resource)->toArray();
|
||||
|
|
|
@ -115,6 +115,10 @@ class FollowerController extends Controller
|
|||
Cache::forget('px:profile:followers-v1.3:'.$target->id);
|
||||
Cache::forget('px:profile:following-v1.3:'.$user->id);
|
||||
Cache::forget('px:profile:following-v1.3:'.$target->id);
|
||||
Cache::forget('profile:follower_count:'.$target->id);
|
||||
Cache::forget('profile:follower_count:'.$user->id);
|
||||
Cache::forget('profile:following_count:'.$target->id);
|
||||
Cache::forget('profile:following_count:'.$user->id);
|
||||
|
||||
return $target->url();
|
||||
}
|
||||
|
|
|
@ -64,22 +64,52 @@ class Profile extends Model
|
|||
|
||||
public function followingCount($short = false)
|
||||
{
|
||||
$count = $this->following()->count();
|
||||
if ($short) {
|
||||
return PrettyNumber::convert($count);
|
||||
} else {
|
||||
$count = Cache::remember('profile:following_count:'.$this->id, now()->addMonths(1), function() {
|
||||
$count = $this->following_count;
|
||||
if($count) {
|
||||
return $count;
|
||||
}
|
||||
$count = $this->following()->count();
|
||||
$this->following_count = $count;
|
||||
$this->save();
|
||||
return $count;
|
||||
}
|
||||
});
|
||||
|
||||
return $short ? PrettyNumber::convert($count) : $count;
|
||||
}
|
||||
|
||||
public function followerCount($short = false)
|
||||
{
|
||||
$count = $this->followers()->count();
|
||||
if ($short) {
|
||||
return PrettyNumber::convert($count);
|
||||
} else {
|
||||
$count = Cache::remember('profile:follower_count:'.$this->id, now()->addMonths(1), function() {
|
||||
$count = $this->followers_count;
|
||||
if($count) {
|
||||
return $count;
|
||||
}
|
||||
$count = $this->followers()->count();
|
||||
$this->followers_count = $count;
|
||||
$this->save();
|
||||
return $count;
|
||||
}
|
||||
});
|
||||
return $short ? PrettyNumber::convert($count) : $count;
|
||||
}
|
||||
|
||||
public function statusCount()
|
||||
{
|
||||
return Cache::remember('profile:status_count:'.$this->id, now()->addMonths(1), function() {
|
||||
$count = $this->status_count;
|
||||
if($count) {
|
||||
return $count;
|
||||
}
|
||||
$count = $this->statuses()
|
||||
->getQuery()
|
||||
->whereHas('media')
|
||||
->whereNull('in_reply_to_id')
|
||||
->whereNull('reblog_of_id')
|
||||
->count();
|
||||
$this->status_count = $count;
|
||||
$this->save();
|
||||
return $count;
|
||||
});
|
||||
}
|
||||
|
||||
public function following()
|
||||
|
@ -148,18 +178,6 @@ class Profile extends Model
|
|||
return $url;
|
||||
}
|
||||
|
||||
public function statusCount()
|
||||
{
|
||||
return Cache::remember('profile:status_count:'.$this->id, now()->addMonths(1), function() {
|
||||
return $this->statuses()
|
||||
->getQuery()
|
||||
->whereHas('media')
|
||||
->whereNull('in_reply_to_id')
|
||||
->whereNull('reblog_of_id')
|
||||
->count();
|
||||
});
|
||||
}
|
||||
|
||||
// deprecated
|
||||
public function recommendFollowers()
|
||||
{
|
||||
|
|
|
@ -145,7 +145,7 @@ class Inbox
|
|||
return;
|
||||
}
|
||||
$to = $activity['to'];
|
||||
$cc = $activity['cc'];
|
||||
$cc = isset($activity['cc']) ? $activity['cc'] : [];
|
||||
if(count($to) == 1 &&
|
||||
count($cc) == 0 &&
|
||||
parse_url($to[0], PHP_URL_HOST) == config('pixelfed.domain.app')
|
||||
|
@ -342,6 +342,12 @@ class Inbox
|
|||
'follower_id' => $actor->id,
|
||||
'following_id' => $target->id
|
||||
]);
|
||||
|
||||
Cache::forget('profile:follower_count:'.$target->id);
|
||||
Cache::forget('profile:follower_count:'.$actor->id);
|
||||
Cache::forget('profile:following_count:'.$target->id);
|
||||
Cache::forget('profile:following_count:'.$actor->id);
|
||||
|
||||
} else {
|
||||
$follower = new Follower;
|
||||
$follower->profile_id = $actor->id;
|
||||
|
@ -365,6 +371,10 @@ class Inbox
|
|||
]
|
||||
];
|
||||
Helpers::sendSignedObject($target, $actor->inbox_url, $accept);
|
||||
Cache::forget('profile:follower_count:'.$target->id);
|
||||
Cache::forget('profile:follower_count:'.$actor->id);
|
||||
Cache::forget('profile:following_count:'.$target->id);
|
||||
Cache::forget('profile:following_count:'.$actor->id);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue