plays-hub/app/services/create_spotify_activity.rb

39 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"]}")
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