From 50c3731dffd717c7b3ee03672e5d152ccfd9e0b1 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Wed, 25 Nov 2015 03:47:22 +0000 Subject: [PATCH] VRFS-3728 check for purchases and mixes outside of ios --- ruby/lib/jam_ruby/models/jam_track.rb | 20 +++++++++++ .../controllers/api_jam_tracks_controller.rb | 35 ++++++++++++++++++- web/app/controllers/api_users_controller.rb | 2 +- .../views/api_jam_track_mixdowns/show.rabl | 4 +++ .../views/api_jam_tracks/show_for_client.rabl | 6 ++-- 5 files changed, 61 insertions(+), 6 deletions(-) diff --git a/ruby/lib/jam_ruby/models/jam_track.rb b/ruby/lib/jam_ruby/models/jam_track.rb index b361d3fe5..2bbb8b698 100644 --- a/ruby/lib/jam_ruby/models/jam_track.rb +++ b/ruby/lib/jam_ruby/models/jam_track.rb @@ -471,5 +471,25 @@ 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.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) + + dates = dates.map do |date| + date.created_at.to_i.to_s + end.join('') + + Digest::MD5.hexdigest(dates) + end end end diff --git a/web/app/controllers/api_jam_tracks_controller.rb b/web/app/controllers/api_jam_tracks_controller.rb index e1ddbb4c6..0d0b03c26 100644 --- a/web/app/controllers/api_jam_tracks_controller.rb +++ b/web/app/controllers/api_jam_tracks_controller.rb @@ -97,8 +97,41 @@ 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(204) + return + end + end + elsif params[:syncbuys] + syncbuys = params[:syncbuys].to_i + if 0 == syncbuys + head(204) + return + end + latestPurchase = JamTrack.latestPurchase(current_user.id) + if 0 < latestPurchase && (latestPurchase < syncbuys) + head 204, 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 ad8ec6583..a4eaa6c5c 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, affiliate_referral_id: cookies[:affiliate_visitor] 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 }