You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
688 B
31 lines
688 B
# frozen_string_literal: true |
|
|
|
class PotentialFriendshipTracker |
|
EXPIRE_AFTER = 90.days.seconds |
|
MAX_ITEMS = 80 |
|
|
|
WEIGHTS = { |
|
reply: 1, |
|
favourite: 10, |
|
reblog: 20, |
|
}.freeze |
|
|
|
class << self |
|
include Redisable |
|
|
|
def record(account_id, target_account_id, action) |
|
return if account_id == target_account_id |
|
|
|
key = "interactions:#{account_id}" |
|
weight = WEIGHTS[action] |
|
|
|
redis.zincrby(key, weight, target_account_id) |
|
redis.zremrangebyrank(key, 0, -MAX_ITEMS) |
|
redis.expire(key, EXPIRE_AFTER) |
|
end |
|
|
|
def remove(account_id, target_account_id) |
|
redis.zrem("interactions:#{account_id}", target_account_id) |
|
end |
|
end |
|
end
|
|
|