diff --git a/app/Http/Controllers/Api/BaseApiController.php b/app/Http/Controllers/Api/BaseApiController.php index 29487fc5a..41c9f68fb 100644 --- a/app/Http/Controllers/Api/BaseApiController.php +++ b/app/Http/Controllers/Api/BaseApiController.php @@ -2,7 +2,7 @@ namespace App\Http\Controllers\Api; -use Auth; +use Auth, Cache; use App\{ Avatar, Like, @@ -83,15 +83,16 @@ class BaseApiController extends Controller ]); try { $user = Auth::user(); + $profile = $user->profile; $file = $request->file('upload'); $path = (new AvatarController())->getPath($user, $file); $dir = $path['root']; $name = $path['name']; $public = $path['storage']; - $currentAvatar = storage_path('app/'.$user->profile->avatar->media_path); + $currentAvatar = storage_path('app/'.$profile->avatar->media_path); $loc = $request->file('upload')->storeAs($public, $name); - $avatar = Avatar::whereProfileId($user->profile->id)->firstOrFail(); + $avatar = Avatar::whereProfileId($profile->id)->firstOrFail(); $opath = $avatar->media_path; $avatar->media_path = "$public/$name"; $avatar->thumb_path = null; @@ -99,6 +100,7 @@ class BaseApiController extends Controller $avatar->last_processed_at = null; $avatar->save(); + Cache::forget("avatar:{$profile->id}"); AvatarOptimize::dispatch($user->profile, $currentAvatar); } catch (Exception $e) { } diff --git a/app/Http/Controllers/AvatarController.php b/app/Http/Controllers/AvatarController.php index fb1515bda..3c131f2a5 100644 --- a/app/Http/Controllers/AvatarController.php +++ b/app/Http/Controllers/AvatarController.php @@ -3,7 +3,7 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; -use Auth, Log, Storage; +use Auth, Cache, Log, Storage; use App\Avatar; use App\Jobs\AvatarPipeline\AvatarOptimize; @@ -21,15 +21,16 @@ class AvatarController extends Controller ]); try { $user = Auth::user(); + $profile = $user->profile; $file = $request->file('avatar'); $path = $this->getPath($user, $file); $dir = $path['root']; $name = $path['name']; $public = $path['storage']; - $currentAvatar = storage_path('app/'.$user->profile->avatar->media_path); + $currentAvatar = storage_path('app/'.$profile->avatar->media_path); $loc = $request->file('avatar')->storeAs($public, $name); - $avatar = Avatar::whereProfileId($user->profile->id)->firstOrFail(); + $avatar = Avatar::whereProfileId($profile->id)->firstOrFail(); $opath = $avatar->media_path; $avatar->media_path = "$public/$name"; $avatar->thumb_path = null; @@ -37,6 +38,7 @@ class AvatarController extends Controller $avatar->last_processed_at = null; $avatar->save(); + Cache::forget("avatar:{$profile->id}"); AvatarOptimize::dispatch($user->profile, $currentAvatar); } catch (Exception $e) { } diff --git a/app/Profile.php b/app/Profile.php index 4192da0f8..b1b73abf6 100644 --- a/app/Profile.php +++ b/app/Profile.php @@ -2,7 +2,7 @@ namespace App; -use Auth, Storage; +use Auth, Cache, Storage; use App\Util\Lexer\PrettyNumber; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; @@ -130,7 +130,12 @@ class Profile extends Model public function avatarUrl() { - $url = url(Storage::url($this->avatar->media_path ?? 'public/avatars/default.png')); + $url = Cache::remember("avatar:{$this->id}", 1440, function() { + $path = $this->avatar->media_path ?? 'public/avatars/default.png'; + $version = hash('sha1', $this->avatar->created_at); + $path = "{$path}?v={$version}"; + return url(Storage::url($path)); + }); return $url; }