From 7dcbadb75ffa643b49b778e5d04db35249b55657 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Thu, 16 Mar 2017 11:23:30 -0700 Subject: [PATCH] VRFS-3936 mobile recording json saves --- ruby/lib/jam_ruby.rb | 1 + ruby/lib/jam_ruby/models/mobile_recording.rb | 8 ++++ ruby/lib/jam_ruby/models/recording.rb | 5 +++ .../controllers/api_recordings_controller.rb | 38 +++++++++++++++++-- web/config/routes.rb | 1 + 5 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 ruby/lib/jam_ruby/models/mobile_recording.rb diff --git a/ruby/lib/jam_ruby.rb b/ruby/lib/jam_ruby.rb index cd051e8bb..1ac125372 100755 --- a/ruby/lib/jam_ruby.rb +++ b/ruby/lib/jam_ruby.rb @@ -317,6 +317,7 @@ require "jam_ruby/models/teacher_language" require "jam_ruby/models/teacher_genre" require "jam_ruby/models/jam_class_report" require "jam_ruby/models/campaign_spend" +require "jam_ruby/models/mobile_recording" include Jampb module JamRuby diff --git a/ruby/lib/jam_ruby/models/mobile_recording.rb b/ruby/lib/jam_ruby/models/mobile_recording.rb new file mode 100644 index 000000000..79ac04533 --- /dev/null +++ b/ruby/lib/jam_ruby/models/mobile_recording.rb @@ -0,0 +1,8 @@ +module JamRuby + class MobileRecording < JsonStore + + # this class keeps backups of mobile recording jobs + belongs_to :recording, class_name: 'JamRuby::Recording', foreign_key: :foreign_key1_id + + end +end diff --git a/ruby/lib/jam_ruby/models/recording.rb b/ruby/lib/jam_ruby/models/recording.rb index dbfd2e01e..348ab6de5 100644 --- a/ruby/lib/jam_ruby/models/recording.rb +++ b/ruby/lib/jam_ruby/models/recording.rb @@ -27,6 +27,11 @@ module JamRuby accepts_nested_attributes_for :recorded_tracks, :mixes, :claimed_recordings, allow_destroy: true + has_one :mobile_recording, + class_name: 'JamRuby::MobileRecording', + foreign_key: :foreign_key1_id, + dependent: :destroy + validate :not_already_recording, :on => :create validate :not_still_finalizing_previous, :on => :create validate :not_playback_recording, :on => :create diff --git a/web/app/controllers/api_recordings_controller.rb b/web/app/controllers/api_recordings_controller.rb index 507369945..db91059dc 100644 --- a/web/app/controllers/api_recordings_controller.rb +++ b/web/app/controllers/api_recordings_controller.rb @@ -1,7 +1,7 @@ class ApiRecordingsController < ApiController before_filter :api_signed_in_user, :except => [ :add_like ] - before_filter :lookup_recording, :only => [ :show, :stop, :claim, :discard, :keep, :delete_claim, :add_timeline, :add_video_data, :delete_video_data ] + before_filter :lookup_recording, :only => [ :show, :stop, :claim, :discard, :keep, :delete_claim, :add_timeline, :add_video_data, :delete_video_data, :mobile_update ] before_filter :lookup_recorded_track, :only => [ :download, :upload_next_part, :upload_sign, :upload_part_complete, :upload_complete ] before_filter :lookup_recorded_backing_track, :only => [ :backing_track_download, :backing_track_upload_next_part, :backing_track_upload_sign, :backing_track_upload_part_complete, :backing_track_upload_complete ] before_filter :lookup_recorded_video, :only => [ :video_upload_sign, :video_upload_start, :video_upload_complete ] @@ -13,16 +13,48 @@ class ApiRecordingsController < ApiController @log || Logging.logger[ApiRecordingsController] end + def mobile_update + mobile_rec = @recording.mobile_recording + + if mobile_rec + mobile_rec.data_blob(JSON.parse(request.body.read)) + mobile_rec.save + + unless mobile_rec.errors.any? + render :json => @recording, :status => 200 + return + end + end + response.status = :unprocessable_entity + render nothing: true + end + def create if request.headers['Jamk-Mobile-Env'] - result = Recording.create_immediately(current_user, params) + json = JSON.parse(request.body.read) + + record_params = { + name: json['title'], + description: json['description'], + genre: json['genre']['id'], + record_video: json['isVideo'], + is_public: false, # NOTE: figure out why we this one and the yt one + upload_to_youtube: false, + } + result = Recording.create_immediately(current_user, record_params) unless result.errors.any? + + mr = MobileRecording.new + mr.data_blob = json + mr.recording = result + mr.save! + render :json => result, :status => 200 return end end response.status = :unprocessable_entity - render :nothing + render nothing: true end def index diff --git a/web/config/routes.rb b/web/config/routes.rb index ac10aca9b..fa0b5b95e 100644 --- a/web/config/routes.rb +++ b/web/config/routes.rb @@ -601,6 +601,7 @@ Rails.application.routes.draw do match '/recordings/:id/video_data' => 'api_recordings#add_video_data', :via => :post, :as => 'api_recordings_video_data' match '/recordings/:id/video_data' => 'api_recordings#delete_video_data', :via => :delete, :as => 'api_recordings_video_data_delete' match '/recordings' => 'api_recordings#create_immediately', :via => :post + match '/recordings/:id/mobile_update' => 'api_recordings#mobile_update', :via => :post, :as => 'api_recordings_mobile_update' # Recordings - recorded_tracks