33 lines
1003 B
Ruby
33 lines
1003 B
Ruby
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)
|
|
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
|