浏览代码

Update ProfileService, use account transformer

Daniel Supernault 4 年之前
父节点
当前提交
391b1287ac
共有 2 个文件被更改,包括 23 次插入35 次删除
  1. 4 4
      app/Services/MediaTagService.php
  2. 19 31
      app/Services/ProfileService.php

+ 4 - 4
app/Services/MediaTagService.php

@@ -57,7 +57,7 @@ class MediaTagService
 
 	protected function idToUsername($id)
 	{
-		$profile = ProfileService::build()->profileId($id);
+		$profile = ProfileService::get($id);
 
 		if(!$profile) {
 			return 'unavailable';
@@ -65,8 +65,8 @@ class MediaTagService
 
 		return [
 			'id' => (string) $id,
-			'username' => $profile->username,
-			'avatar' => $profile->avatarUrl()
+			'username' => $profile['username'],
+			'avatar' => $profile['avatar']
 		];
 	}
 
@@ -98,4 +98,4 @@ class MediaTagService
 		Cache::forget($key);
 		return true;
 	}
-}
+}

+ 19 - 31
app/Services/ProfileService.php

@@ -4,41 +4,29 @@ namespace App\Services;
 
 use Cache;
 use Illuminate\Support\Facades\Redis;
-
-use App\{
-	Follower,
-	Profile
-};
+use App\Transformer\Api\AccountTransformer;
+use League\Fractal;
+use League\Fractal\Serializer\ArraySerializer;
+use League\Fractal\Pagination\IlluminatePaginatorAdapter;
+use App\Profile;
 
 class ProfileService {
 
-	protected $profile;
-	protected $profile_prefix;
-
-	public static function build()
-	{
-		return new self();
-	}
-
-	public function profile(Profile $profile)
-	{
-		$this->profile = $profile;
-		$this->profile_prefix = 'profile:model:'.$profile->id;
-		return $this;
-	}
-
-	public function profileId($id)
-	{
-		return Cache::rememberForever('profile:model:'.$id, function() use($id) {
-			return Profile::findOrFail($id);
-		});
-	}
-
-	public function get()
+	public static function get($id)
 	{
-		return Cache::rememberForever($this->profile_prefix, function() {
-			return $this->profile;
+		$key = 'profile:model:' . $id;
+		$ttl = now()->addHours(4);
+		$res = Cache::remember($key, $ttl, function() use($id) {
+			$profile = Profile::find($id);
+			if(!$profile) {
+				return false;
+			}
+			$fractal = new Fractal\Manager();
+			$fractal->setSerializer(new ArraySerializer());
+			$resource = new Fractal\Resource\Item($profile, new AccountTransformer());
+			return $fractal->createData($resource)->toArray();
 		});
+		return $res;
 	}
 
-}
+}