diff --git a/ruby/lib/jam_ruby/models/jam_track.rb b/ruby/lib/jam_ruby/models/jam_track.rb index 7db7b3905..a00206792 100644 --- a/ruby/lib/jam_ruby/models/jam_track.rb +++ b/ruby/lib/jam_ruby/models/jam_track.rb @@ -528,6 +528,28 @@ module JamRuby "#{self.name} (#{self.original_artist})" end + def self.latestPurchase(user_id) + jtx_created = JamTrackRight + .select('created_at') + .where(user_id: user_id) + .order('created_at DESC') + .limit(1) + jtx_created.first.created_at.to_i + end + + def self.mixdownChecksum(user_id, jam_track_id) + dates = JamTrackMixdown + .select('created_at') + .where(user_id: user_id, jam_track_id: jam_track_id) + .order(:id) + + dates = dates.map do |date| + date.created_at.to_i.to_s + end.join('') + + Digest::MD5.hexdigest(dates) + end + attr_accessor :preview_generate_error before_save :jmep_json_generate diff --git a/web/app/controllers/api_jam_tracks_controller.rb b/web/app/controllers/api_jam_tracks_controller.rb index a07170432..86af55c28 100644 --- a/web/app/controllers/api_jam_tracks_controller.rb +++ b/web/app/controllers/api_jam_tracks_controller.rb @@ -97,8 +97,40 @@ class ApiJamTracksController < ApiController end end + def _handlePurchasedHead + if jtid = params[:id] + if params[:mixcheck] + checksum = JamTrack.mixdownChecksum(current_user.id, jtid) + head :ok, checksum: checksum + return + else + # if the requested jamtrack is not purchased, send status code 204 + if 0 == JamTrack.where(id: jtid, user_id: current_user.id).count + head(:no_content) + return + end + end + elsif params[:syncbuys] + syncbuys = params[:syncbuys].to_i + latestPurchase = JamTrack.latestPurchase(current_user.id) + if 0 == syncbuys || (0 < latestPurchase && (latestPurchase <= syncbuys)) + head :no_content, latestpurchase: latestPurchase + return + else + head :ok, latestpurchase: latestPurchase + return + end + end + head(:ok) + end + def purchased - params[:show_purchased_only] = true + if request.head? + self._handlePurchasedHead + return + end + + params[:show_purchased_only] = true data = JamTrack.index(params, current_user) @jam_tracks, @next = data[0], data[1] diff --git a/web/app/controllers/api_users_controller.rb b/web/app/controllers/api_users_controller.rb index e664e4697..c267e23bd 100644 --- a/web/app/controllers/api_users_controller.rb +++ b/web/app/controllers/api_users_controller.rb @@ -78,7 +78,7 @@ ApiUsersController < ApiController email: params[:email], password: params[:password], password_confirmation: params[:password], - terms_of_service: params[:terms], + terms_of_service: params[:terms_of_service].to_i, location: {:country => nil, :state => nil, :city => nil}, signup_hint: signup_hint, gift_card: params[:gift_card], diff --git a/web/app/views/api_jam_track_mixdowns/show.rabl b/web/app/views/api_jam_track_mixdowns/show.rabl index a599f8a64..4ec76afb1 100644 --- a/web/app/views/api_jam_track_mixdowns/show.rabl +++ b/web/app/views/api_jam_track_mixdowns/show.rabl @@ -2,6 +2,10 @@ object @jam_track_mixdown attributes :id, :name, :description, :jam_track_id +node :created_at do |item| + item.created_at.to_i +end + node :settings do |item| JSON.parse(item.settings) end diff --git a/web/app/views/api_jam_tracks/show_for_client.rabl b/web/app/views/api_jam_tracks/show_for_client.rabl index da99ba6e9..8d19fc807 100644 --- a/web/app/views/api_jam_tracks/show_for_client.rabl +++ b/web/app/views/api_jam_tracks/show_for_client.rabl @@ -10,10 +10,6 @@ node :jmep do |jam_track| jam_track.jmep_json ? JSON.parse(jam_track.jmep_json) : nil end -node :jam_track_right_id do |jam_track| - jam_track.right_for_user(current_user).id -end - child(:jam_track_tracks => :tracks) { attributes :id, :part, :instrument, :track_type, :position @@ -29,6 +25,8 @@ child(:jam_track_tracks => :tracks) { node do |jam_track| right = jam_track.right_for_user(current_user) { + jam_track_right_id: right.id, + purchased_at: right.created_at.to_i, last_mixdown_id: right.last_mixdown_id, last_stem_id: right.last_stem_id }