40 lines
1.3 KiB
Ruby
40 lines
1.3 KiB
Ruby
class CreateSpotifyActivity
|
|
attr_accessor :response, :user
|
|
|
|
def initialize(user, spotify_response)
|
|
@response = spotify_response
|
|
@user = user
|
|
end
|
|
|
|
# rubocop:disable Metrics/AbcSize
|
|
def perform
|
|
begin
|
|
# log some info about the response with status and parts of the body
|
|
Rails.logger.info("Response status: #{response["status"]}")
|
|
Rails.logger.info("Response body: #{response["body"]}")
|
|
counts = response["items"].size
|
|
Rails.logger.info("Saving #{counts} activities")
|
|
response["items"].reverse.each do |play|
|
|
activity = new_activity
|
|
activity.item_ref = play["track"]["id"]
|
|
artist_names = play["track"]["artists"].map { |a| a["name"] }
|
|
artists = artist_names.join(", ")
|
|
title = "#{artists} - #{play['track']['name']}"
|
|
activity.item_title = title
|
|
activity.item_length = play["track"]["duration"].to_s
|
|
activity.started_at = DateTime.parse(play["played_at"])
|
|
activity.save!
|
|
end
|
|
rescue => e
|
|
Rails.logger.error("[CreateSpotifyActivity] Error: #{e.message}\n#{e.backtrace.join("\n")}")
|
|
Rails.logger.error("[CreateSpotifyActivity] Response object: #{response.inspect}")
|
|
raise e
|
|
end
|
|
end
|
|
# rubocop:enable Metrics/AbcSize
|
|
|
|
def new_activity
|
|
Activity.new(user: user, platform: "spotify")
|
|
end
|
|
end
|