123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- <?php
- namespace App\Services;
- use Cache;
- use Illuminate\Support\Facades\Redis;
- use App\{
- Follower,
- Profile,
- UserFilter
- };
- class UserFilterService {
- const USER_MUTES_KEY = 'pf:services:mutes:ids:';
- const USER_BLOCKS_KEY = 'pf:services:blocks:ids:';
- public static function mutes(int $profile_id) : array
- {
- $key = self::USER_MUTES_KEY . $profile_id;
- $cached = Redis::zrevrange($key, 0, -1);
- if($cached) {
- return $cached;
- } else {
- $ids = UserFilter::whereFilterType('mute')
- ->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_unique(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;
- }
- public static function blockCount(int $profile_id)
- {
- return Redis::zcard(self::USER_BLOCKS_KEY . $profile_id);
- }
- public static function muteCount(int $profile_id)
- {
- return Redis::zcard(self::USER_MUTES_KEY . $profile_id);
- }
- }
|