# frozen_string_literal: true require_relative '../log/loggable' require_relative '../vle/vle_vendor_schedule' require_relative 'models/schedule' require_relative '../auth/auth_token_service' require 'auth/client/request/auth_aware_request' module SchedulePipeline class PublishSchedule include Log::Loggable def initialize(queue, errors, tokens = Auth::AuthTokenService.instance) @queue = queue @errors = errors @tokens = tokens end def start @queue.subscribe do |msg| msg = Models::Schedule.from_hash(msg) if msg.is_a? Hash process_msg(msg) end end def process_msg(msg) logger.info("Publishing schedule: #{msg.name}...") Auth::Client::Request::AuthAwareRequest.new( Vle::VleVendorSchedule.new( msg.vendor, msg.player, { name: msg.name, start_time: msg.start_time, items: msg.to_hash[:items] } ), @tokens ).call logger.info("Published schedule: #{msg.name}") rescue StandardError => e @errors.push(e.message) end end end