module Recordings class NotifyExpiring WINDOW_DAYS = 7 def initialize(recording) @recording = recording end def call return @recording if @recording.expiry_warning_sent_at.present? return @recording unless @recording.ready? return @recording if @recording.expires_at.blank? return @recording unless @recording.expires_at <= WINDOW_DAYS.days.from_now recipients.each do |user| Recordings::ReplayMailer.replay_expiring_soon(recording: @recording, recipient: user).deliver_now end @recording.update!(expiry_warning_sent_at: Time.current) @recording end private def recipients club = @recording.team.club owner = club.owner users = club.users.distinct.to_a users << owner if owner && users.none? { |u| u.id == owner.id } users.uniq.select { |u| u.email.present? } end end end