otwarchive-symphonyarchive/app/models/serial_work.rb
2026-03-11 22:22:11 +00:00

50 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