51 lines
1.5 KiB
Ruby
51 lines
1.5 KiB
Ruby
|
|
class SerialWork < ApplicationRecord
|
||
|
|
belongs_to :series, touch: true
|
||
|
|
belongs_to :work, touch: true
|
||
|
|
validates_uniqueness_of :work_id, scope: [:series_id]
|
||
|
|
acts_as_list scope: :series
|
||
|
|
|
||
|
|
after_create :adjust_series_visibility
|
||
|
|
after_destroy :adjust_series_visibility
|
||
|
|
after_destroy :delete_empty_series
|
||
|
|
after_create :update_series_index, :update_work_index
|
||
|
|
after_destroy :update_series_index, :update_work_index
|
||
|
|
|
||
|
|
scope :in_order, -> { order(:position) }
|
||
|
|
|
||
|
|
# If you add or remove a work from a series, make sure restricted? is still accurate
|
||
|
|
def adjust_series_visibility
|
||
|
|
self.series.adjust_restricted unless self.series.blank?
|
||
|
|
end
|
||
|
|
|
||
|
|
# If you delete a work from a series and it was the last one, delete the series too
|
||
|
|
def delete_empty_series
|
||
|
|
if self.series.present? && self.series.serial_works.blank?
|
||
|
|
self.series.destroy
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
# Reindex works added to or removed from a series
|
||
|
|
def update_work_index
|
||
|
|
work&.enqueue_to_index
|
||
|
|
end
|
||
|
|
|
||
|
|
# Ensure series bookmarks are reindexed when a new work is added to a series
|
||
|
|
def update_series_index
|
||
|
|
return if series.blank?
|
||
|
|
series.enqueue_to_index
|
||
|
|
IndexQueue.enqueue_ids(Bookmark, series.bookmarks.pluck(:id), :main)
|
||
|
|
end
|
||
|
|
|
||
|
|
after_create :update_series_creatorships
|
||
|
|
def update_series_creatorships
|
||
|
|
return unless work && series
|
||
|
|
|
||
|
|
work.pseuds_after_saving.each do |pseud|
|
||
|
|
creatorship = series.creatorships.find_or_initialize_by(pseud: pseud)
|
||
|
|
creatorship.approved = true
|
||
|
|
creatorship.enable_notifications = true
|
||
|
|
creatorship.save
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|