Browse Source

Update StatusTransformer

Daniel Supernault 4 năm trước cách đây
mục cha
commit
1054b025b1
1 tập tin đã thay đổi với 52 bổ sung75 xóa
  1. 52 75
      app/Transformer/Api/Mastodon/v1/StatusTransformer.php

+ 52 - 75
app/Transformer/Api/Mastodon/v1/StatusTransformer.php

@@ -5,81 +5,58 @@ namespace App\Transformer\Api\Mastodon\v1;
 use App\Status;
 use League\Fractal;
 use Cache;
+use App\Services\MediaService;
+use App\Services\ProfileService;
+use App\Services\StatusHashtagService;
 
 class StatusTransformer extends Fractal\TransformerAbstract
 {
-    protected $defaultIncludes = [
-        'account',
-        'media_attachments',
-        'mentions',
-        'tags',
-    ];
-
-    public function transform(Status $status)
-    {
-        return [
-            'id'                        => (string) $status->id,
-            'created_at'                => $status->created_at->toJSON(),
-            'in_reply_to_id'            => $status->in_reply_to_id ? (string) $status->in_reply_to_id : null,
-            'in_reply_to_account_id'    => $status->in_reply_to_profile_id,
-            'sensitive'                 => (bool) $status->is_nsfw,
-            'spoiler_text'              => $status->cw_summary ?? '',
-            'visibility'                => $status->visibility ?? $status->scope,
-            'language'                  => 'en',
-            'uri'                       => $status->url(),
-            'url'                       => $status->url(),
-            'replies_count'             => 0,
-            'reblogs_count'             => $status->reblogs_count ?? 0,
-            'favourites_count'          => $status->likes_count ?? 0,
-            'reblogged'                 => $status->shared(),
-            'favourited'                => $status->liked(),
-            'muted'                     => false,
-            'bookmarked'                => false,
-            'pinned'                    => false,
-            'content'                   => $status->rendered ?? $status->caption ?? '',
-            'reblog'                    => null,
-            'application'               => [
-                'name'      => 'web',
-                'website'   => null
-             ],
-            'mentions'                  => [],
-            'tags'                      => [],
-            'emojis'                    => [],
-            'card'                      => null,
-            'poll'                      => null,
-        ];
-    }
-
-    public function includeAccount(Status $status)
-    {
-        $account = $status->profile;
-
-        return $this->item($account, new AccountTransformer());
-    }
-
-    public function includeMediaAttachments(Status $status)
-    {
-        return Cache::remember('mastoapi:status:transformer:media:attachments:'.$status->id, now()->addDays(14), function() use($status) {
-            if(in_array($status->type, ['photo', 'video', 'photo:album', 'loop', 'photo:video:album'])) {
-                $media = $status->media()->orderBy('order')->get();
-                return $this->collection($media, new MediaTransformer());
-            } else {
-                return $this->collection([], new MediaTransformer());
-            }
-        });
-    }
-
-    public function includeMentions(Status $status)
-    {
-        $mentions = $status->mentions;
-
-        return $this->collection($mentions, new MentionTransformer());
-    }
-
-    public function includeTags(Status $status)
-    {
-        $hashtags = $status->hashtags;
-
-        return $this->collection($hashtags, new HashtagTransformer());
-    }
-}
+	protected $defaultIncludes = [
+		'mentions',
+	];
+
+	public function transform(Status $status)
+	{
+		return [
+			'id'                        => (string) $status->id,
+			'created_at'                => $status->created_at->toJSON(),
+			'in_reply_to_id'            => $status->in_reply_to_id ? (string) $status->in_reply_to_id : null,
+			'in_reply_to_account_id'    => $status->in_reply_to_profile_id,
+			'sensitive'                 => (bool) $status->is_nsfw,
+			'spoiler_text'              => $status->cw_summary ?? '',
+			'visibility'                => $status->visibility ?? $status->scope,
+			'language'                  => 'en',
+			'uri'                       => $status->url(),
+			'url'                       => $status->url(),
+			'replies_count'             => 0,
+			'reblogs_count'             => $status->reblogs_count ?? 0,
+			'favourites_count'          => $status->likes_count ?? 0,
+			'reblogged'                 => $status->shared(),
+			'favourited'                => $status->liked(),
+			'muted'                     => false,
+			'bookmarked'                => false,
+			'pinned'                    => false,
+			'content'                   => $status->rendered ?? $status->caption ?? '',
+			'reblog'                    => null,
+			'application'               => [
+				'name'      => 'web',
+				'website'   => null
+			 ],
+			'mentions'                  => [],
+			'tags'                      => [],
+			'emojis'                    => [],
+			'card'                      => null,
+			'poll'                      => null,
+			'media_attachments'         => MediaService::get($status->id),
+			'account'                   => ProfileService::get($status->profile_id),
+			'tags'                      => StatusHashtagService::statusTags($status->id)
+		];
+	}
+
+	public function includeMentions(Status $status)
+	{
+		$mentions = $status->mentions;
+
+		return $this->collection($mentions, new MentionTransformer());
+	}
+}