class LoadUserActivitiesJob < ApplicationJob attr_reader :user def perform(user) logger.info("Loading for #{user.id} started") @user = user user.logins.alive.each do |login| update_spotify(login) end end def update_spotify(login) client = SpotifyClient.new(login) last_spotify_activity_at = latest_activity_iso(login.platform) new_activities = client.load_since(last_spotify_activity_at) # log some info about the response with status and parts of the body Rails.logger.info("Response: #{new_activities}") create_action = CreateSpotifyActivity.new(user, new_activities) create_action.perform logger.info("Loading for #{user.id} finished with #{new_activities.size} new activities") rescue StandardError => e Rails.logger.error(e) end def latest_activity(platform) latest = Activity.where(user: user, platform: platform).order(started_at: :desc).limit(1).last latest.started_at&.to_datetime if latest.present? end def latest_activity_iso(platform) latest = latest_activity(platform) latest.strftime("%Q") if latest.present? end end