30 行
615 B
Ruby
30 行
615 B
Ruby
class TheatrePostAdvancer
|
|
def self.call(theatre:)
|
|
new(theatre:).call
|
|
end
|
|
|
|
def initialize(theatre:)
|
|
@theatre = theatre
|
|
end
|
|
|
|
def call
|
|
previous_post = theatre.current_post
|
|
post = TheatrePostSelector.new(theatre:).select
|
|
|
|
TheatreSkipVote.where(theatre:, post: previous_post).delete_all if previous_post
|
|
|
|
theatre.update!(current_post: post, current_post_started_at: post ? Time.current : nil)
|
|
|
|
if post
|
|
position = (theatre.programmes.maximum(:position) || 0) + 1
|
|
theatre.programmes.create!(position:, post:)
|
|
end
|
|
|
|
post
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :theatre
|
|
end
|