1
0
Эх сурвалжийг харах

Merge pull request #850 from leuc/status-transform-cache

Status transform cache
daniel 6 жил өмнө
parent
commit
3e59f6b3cf

+ 3 - 0
app/Http/Controllers/CommentController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
 
 use Illuminate\Http\Request;
 use Auth;
+use Cache;
 
 use App\Comment;
 use App\Jobs\CommentPipeline\CommentPipeline;
@@ -50,6 +51,8 @@ class CommentController extends Controller
         $profile = $user->profile;
         $status = Status::findOrFail($statusId);
 
+        Cache::forget('transform:status:'.$status->url());
+
         $reply = new Status();
         $reply->profile_id = $profile->id;
         $reply->caption = e($comment);

+ 2 - 0
app/Http/Controllers/LikeController.php

@@ -26,6 +26,8 @@ class LikeController extends Controller
         $profile = Auth::user()->profile;
         $status = Status::withCount('likes')->findOrFail($request->input('item'));
 
+        Cache::forget('transform:status:'.$status->url());
+
         $count = $status->likes_count;
 
         if ($status->likes()->whereProfileId($profile->id)->count() !== 0) {

+ 2 - 0
app/Http/Controllers/StatusController.php

@@ -218,6 +218,8 @@ class StatusController extends Controller
         $profile = Auth::user()->profile;
         $status = Status::withCount('shares')->findOrFail($request->input('item'));
 
+        Cache::forget('transform:status:'.$status->url());
+
         $count = $status->shares_count;
 
         $exists = Status::whereProfileId(Auth::user()->profile->id)

+ 29 - 26
app/Transformer/Api/StatusTransformer.php

@@ -4,6 +4,7 @@ namespace App\Transformer\Api;
 
 use App\Status;
 use League\Fractal;
+use Cache;
 
 class StatusTransformer extends Fractal\TransformerAbstract
 {
@@ -16,33 +17,35 @@ class StatusTransformer extends Fractal\TransformerAbstract
 
     public function transform(Status $status)
     {
-        return [
-            'id'                        => (string) $status->id,
-            'uri'                       => $status->url(),
-            'url'                       => $status->url(),
-            'in_reply_to_id'            => $status->in_reply_to_id,
-            'in_reply_to_account_id'    => $status->in_reply_to_profile_id,
-            'reblog'                    => $status->reblog_of_id || $status->in_reply_to_id ? $this->transform($status->parent()) : null,
-            'content'                   => $status->rendered ?? $status->caption,
-            'created_at'                => $status->created_at->format('c'),
-            'emojis'                    => [],
-            'reblogs_count'             => $status->shares()->count(),
-            'favourites_count'          => $status->likes()->count(),
-            'reblogged'                 => $status->shared(),
-            'favourited'                => $status->liked(),
-            'muted'                     => null,
-            'sensitive'                 => (bool) $status->is_nsfw,
-            'spoiler_text'              => $status->cw_summary,
-            'visibility'                => $status->visibility,
-            'application'               => [
-                'name'      => 'web',
-                'website'   => null
-             ],
-            'language'                  => null,
-            'pinned'                    => null,
+        return Cache::remember('transform:status:'. $status->url(), 60, function() use($status) {
+            return [
+                'id'                        => (string) $status->id,
+                'uri'                       => $status->url(),
+                'url'                       => $status->url(),
+                'in_reply_to_id'            => $status->in_reply_to_id,
+                'in_reply_to_account_id'    => $status->in_reply_to_profile_id,
+                'reblog'                    => $status->reblog_of_id || $status->in_reply_to_id ? $this->transform($status->parent()) : null,
+                'content'                   => $status->rendered ?? $status->caption,
+                'created_at'                => $status->created_at->format('c'),
+                'emojis'                    => [],
+                'reblogs_count'             => $status->shares()->count(),
+                'favourites_count'          => $status->likes()->count(),
+                'reblogged'                 => $status->shared(),
+                'favourited'                => $status->liked(),
+                'muted'                     => null,
+                'sensitive'                 => (bool) $status->is_nsfw,
+                'spoiler_text'              => $status->cw_summary,
+                'visibility'                => $status->visibility,
+                'application'               => [
+                    'name'      => 'web',
+                    'website'   => null
+                 ],
+                'language'                  => null,
+                'pinned'                    => null,
 
-            'pf_type'          => $status->type ?? $status->setType(),
-        ];
+                'pf_type'          => $status->type ?? $status->setType(),
+            ];
+        });
     }
 
     public function includeAccount(Status $status)