lib/jotify/api.rb in jberkel-spotify-api-0.0.3 vs lib/jotify/api.rb in jberkel-spotify-api-0.0.4

- old
+ new

@@ -59,14 +59,16 @@ }.to_json end Sinatra::Application.get('/playlists') do content_type :json - #playlists = jotify.playlists { 'status'=>'OK', - 'result'=> { 'playlists' => jotify.playlists.map { |p| p.to_h } } + 'result'=> { 'playlists' => jotify.playlists.map do |p| + p.to_h + end.each { |h| h.delete(:tracks) } + } }.to_json end Sinatra::Application.get('/playlists/:id') do content_type :json @@ -82,15 +84,15 @@ Sinatra::Application.post('/playlists') do content_type :json body = request.body.read data = JSON.parse(body) - playlist = jotify.create_playlist(data['name'], data['collaborative']) + playlist = jotify.create_playlist(data['name'], !!data['collaborative']) if playlist if data['tracks'] ids = data['tracks'].map { |t| t['id'] } - unless jotify.add_tracks_to_playlist(playlist, ids) + unless jotify.set_tracks_on_playlist(playlist, ids) return 500, 'status' => 'ERROR', 'message' => 'playlist created but tracks could not be added' end end redirect playlist.link, 201 # created else @@ -99,21 +101,35 @@ end Sinatra::Application.put('/playlists/:id') do content_type :json playlist = jotify.playlist(params[:id]) + return 404, { 'status' => 'ERROR', 'message' => 'playlist not found' }.to_json unless playlist body = request.body.read data = JSON.parse(body) - raise ArgumentError, "invalid format" unless data.is_a?(Hash) && data['tracks'].is_a?(Array) - ids = data['tracks'].map { |t| t['id'] } - return 200, { 'status' => 'OK', 'message' => 'not modified' }.to_json if ids.empty? - if jotify.add_tracks_to_playlist(playlist, ids) - return 200, { 'status' => 'OK', 'message' => "successfully added #{ids.size} tracks" }.to_json - else - return 500, { 'status' => 'ERROR', 'message' => 'could not add to playlist' }.to_json - end + raise ArgumentError, "invalid format" unless data.is_a?(Hash) + + if data.has_key?('name') && data['name'] != playlist.name + unless jotify.rename_playlist(playlist, data['name']) + return 500, { 'status' => 'ERROR', 'message' => 'could rename playlist' }.to_json + end + end + + if data.has_key?('collaborative') && data['collaborative'] != playlist.collaborative? + unless jotify.set_collaborative_flag(playlist, data['collaborative']) + return 500, { 'status' => 'ERROR', 'message' => 'could not change collaborative flag' }.to_json + end + end + + if data['tracks'].is_a?(Array) + ids = data['tracks'].map { |t| t['id'] } + unless jotify.set_tracks_on_playlist(playlist, ids) + return 500, { 'status' => 'ERROR', 'message' => 'could update tracks' }.to_json + end + end + return 200, { 'status' => 'OK', 'message' => "update successful" }.to_json end if __FILE__ == $0 Sinatra::Application.run!