mirror of
https://github.com/Retrospring/retrospring.git
synced 2024-11-20 16:19:52 +01:00
73 lines
1.7 KiB
Ruby
73 lines
1.7 KiB
Ruby
class Subscription < ApplicationRecord
|
|
belongs_to :user
|
|
belongs_to :answer
|
|
|
|
class << self
|
|
def for(target)
|
|
Subscription.where(answer: target)
|
|
end
|
|
|
|
def is_subscribed(recipient, target)
|
|
existing = Subscription.find_by(user: recipient, answer: target)
|
|
if existing.nil?
|
|
false
|
|
else
|
|
existing.is_active
|
|
end
|
|
end
|
|
|
|
def subscribe(recipient, target, force = true)
|
|
existing = Subscription.find_by(user: recipient, answer: target)
|
|
if existing.nil?
|
|
Subscription.new(user: recipient, answer: target).save!
|
|
elsif force
|
|
existing.update(is_active: true)
|
|
end
|
|
end
|
|
|
|
def unsubscribe(recipient, target)
|
|
if recipient.nil? or target.nil?
|
|
return nil
|
|
end
|
|
|
|
subs = Subscription.find_by(user: recipient, answer: target)
|
|
subs.update(is_active: false) unless subs.nil?
|
|
end
|
|
|
|
def destruct(target)
|
|
if target.nil?
|
|
return nil
|
|
end
|
|
Subscription.where(answer: target).destroy_all
|
|
end
|
|
|
|
def destruct_by(recipient, target)
|
|
if recipient.nil? or target.nil?
|
|
return nil
|
|
end
|
|
|
|
subs = Subscription.find_by(user: recipient, answer: target)
|
|
subs.destroy unless subs.nil?
|
|
end
|
|
|
|
def notify(source, target)
|
|
if source.nil? or target.nil?
|
|
return nil
|
|
end
|
|
|
|
Subscription.where(answer: target, is_active: true).each do |subs|
|
|
next unless not subs.user == source.user
|
|
Notification.notify subs.user, source
|
|
end
|
|
end
|
|
|
|
def denotify(source, target)
|
|
if source.nil? or target.nil?
|
|
return nil
|
|
end
|
|
Subscription.where(answer: target).each do |subs|
|
|
Notification.denotify subs.user, source
|
|
end
|
|
end
|
|
end
|
|
end
|