Browse Source

Add FollowerService

Daniel Supernault 6 years ago
parent
commit
e45a3c4b93
1 changed files with 58 additions and 0 deletions
  1. 58 0
      app/Services/FollowerService.php

+ 58 - 0
app/Services/FollowerService.php

@@ -0,0 +1,58 @@
+<?php
+
+namespace App\Services;
+
+use Redis;
+
+use App\{
+	Follower,
+	Profile
+};
+
+class FollowerService {
+
+	protected $profile;
+	protected $follower_prefix;
+	protected $following_prefix;
+
+	public static function build()
+	{
+		return new self();
+	}
+
+	public function profile(Profile $profile)
+	{
+		$this->profile = $profile;
+		$this->follower_prefix = config('cache.prefix').':profile:followers:'.$profile->id;
+		$this->following_prefix = config('cache.prefix').':profile:following:'.$profile->id;
+		return $this;
+	}
+
+	public function followers($limit = 100, $offset = 0)
+	{
+		if(Redis::llen($this->follower_prefix) == 0) {
+			$followers = $this->profile->followers;
+			$followers->map(function($i) {
+				Redis::lpush($this->follower_prefix, $i->id);
+			});
+			return $followers;
+		} else {
+			return Redis::lrange($this->follower_prefix, $offset, $limit);
+		}
+	}
+
+
+	public function following($limit = 100, $offset = 0)
+	{
+		if(Redis::llen($this->following_prefix) == 0) {
+			$following = $this->profile->following;
+			$following->map(function($i) {
+				Redis::lpush($this->following_prefix, $i->id);
+			});
+			return $following;
+		} else {
+			return Redis::lrange($this->following_prefix, $offset, $limit);
+		}
+	}
+
+}