diff --git a/app/Services/UserFilterService.php b/app/Services/UserFilterService.php new file mode 100644 index 000000000..e365fe8b2 --- /dev/null +++ b/app/Services/UserFilterService.php @@ -0,0 +1,100 @@ +whereUserId($profile_id) + ->pluck('filterable_id') + ->toArray(); + foreach ($ids as $muted_id) { + Redis::zadd($key, (int) $muted_id, (int) $muted_id); + } + return $ids; + } + } + + public static function blocks(int $profile_id) : array + { + $key = self::USER_BLOCKS_KEY . $profile_id; + $cached = Redis::zrevrange($key, 0, -1); + if($cached) { + return $cached; + } else { + $ids = UserFilter::whereFilterType('block') + ->whereUserId($profile_id) + ->pluck('filterable_id') + ->toArray(); + foreach ($ids as $blocked_id) { + Redis::zadd($key, $blocked_id, $blocked_id); + } + return $ids; + } + } + + public static function filters(int $profile_id) : array + { + return array_merge(self::mutes($profile_id), self::blocks($profile_id)); + } + + public static function mute(int $profile_id, int $muted_id) + { + $key = self::USER_MUTES_KEY . $profile_id; + $mutes = self::mutes($profile_id); + $exists = in_array($muted_id, $mutes); + if(!$exists) { + Redis::zadd($key, $muted_id, $muted_id); + } + return true; + } + + public static function unmute(int $profile_id, string $muted_id) + { + $key = self::USER_MUTES_KEY . $profile_id; + $mutes = self::mutes($profile_id); + $exists = in_array($muted_id, $mutes); + if($exists) { + Redis::zrem($key, $muted_id); + } + return true; + } + + public static function block(int $profile_id, int $blocked_id) + { + $key = self::USER_BLOCKS_KEY . $profile_id; + $exists = in_array($blocked_id, self::blocks($profile_id)); + if(!$exists) { + Redis::zadd($key, $blocked_id, $blocked_id); + } + return true; + } + + public static function unblock(int $profile_id, string $blocked_id) + { + $key = self::USER_BLOCKS_KEY . $profile_id; + $exists = in_array($blocked_id, self::blocks($profile_id)); + if($exists) { + Redis::zrem($key, $blocked_id); + } + return $exists; + } +} \ No newline at end of file