3980e9651e
Reviewed-on: #357 Co-authored-by: miteruzo <miteruzo@naver.com> Co-committed-by: miteruzo <miteruzo@naver.com>
41 行
889 B
Ruby
41 行
889 B
Ruby
class TheatreSkipFinalizer
|
|
def self.call(theatre:, user:)
|
|
new(theatre:, user:).call
|
|
end
|
|
|
|
def initialize(theatre:, user:)
|
|
@theatre = theatre
|
|
@user = user
|
|
end
|
|
|
|
def call
|
|
return unless theatre.current_post
|
|
|
|
post = theatre.current_post
|
|
voters = TheatreSkipVote.where(theatre:, post:).includes(:user).map(&:user)
|
|
return if voters.empty?
|
|
|
|
event = TheatreSkipEvent.create!(
|
|
theatre:,
|
|
post:,
|
|
skipped_by_user: user,
|
|
programme_position: theatre.programmes.maximum(:position))
|
|
|
|
voters.uniq(&:id).each do |voter|
|
|
TheatreSkipEventVoter.create!(theatre_skip_event: event, user: voter)
|
|
end
|
|
|
|
post.tags.find_each do |tag|
|
|
TheatreSkipEventTag.create!(theatre_skip_event: event, tag:)
|
|
end
|
|
|
|
TheatreSkipVote.where(theatre:, post:).delete_all
|
|
|
|
event
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :theatre, :user
|
|
end
|