json([]); } public function siteConfiguration(Request $request) { $res = Cache::remember('api:site:configuration', now()->addMinutes(30), function() { return [ 'uploader' => [ 'max_photo_size' => config('pixelfed.max_photo_size'), 'max_caption_length' => config('pixelfed.max_caption_length'), 'album_limit' => config('pixelfed.max_album_length'), 'image_quality' => config('pixelfed.image_quality'), 'optimize_image' => config('pixelfed.optimize_image'), 'optimize_video' => config('pixelfed.optimize_video'), 'media_types' => config('pixelfed.media_types'), 'enforce_account_limit' => config('pixelfed.enforce_account_limit') ], 'activitypub' => [ 'enabled' => config('federation.activitypub.enabled'), 'remote_follow' => config('pixelfed.remote_follow_enabled') ], 'ab' => [ 'lc' => config('exp.lc'), 'rec' => config('exp.rec'), 'loops' => config('exp.loops') ], ]; }); return response()->json($res); } public function userRecommendations(Request $request) { abort_if(!Auth::check(), 403); abort_if(!config('exp.rec'), 400); $id = Auth::user()->profile->id; $following = Cache::remember('profile:following:'.$id, now()->addHours(12), function() use ($id) { return Follower::whereProfileId($id)->pluck('following_id')->toArray(); }); array_push($following, $id); $ids = SuggestionService::get(); $filters = UserFilter::whereUserId($id) ->whereFilterableType('App\Profile') ->whereIn('filter_type', ['mute', 'block']) ->pluck('filterable_id')->toArray(); $following = array_merge($following, $filters); $key = config('cache.prefix').':api:local:exp:rec:'.$id; $ttl = (int) Redis::ttl($key); if($request->filled('refresh') == true && (290 > $ttl) == true) { Cache::forget('api:local:exp:rec:'.$id); } $res = Cache::remember('api:local:exp:rec:'.$id, now()->addMinutes(5), function() use($id, $following, $ids) { return Profile::select( 'id', 'username' ) ->whereNotIn('id', $following) ->whereIn('id', $ids) ->whereIsPrivate(0) ->whereNull('status') ->whereNull('domain') ->inRandomOrder() ->take(3) ->get() ->map(function($item, $key) { return [ 'id' => $item->id, 'avatar' => $item->avatarUrl(), 'username' => $item->username, 'message' => 'Recommended for You' ]; }); }); return response()->json($res->all()); } }