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!