jam-cloud/web/app/views/api_music_sessions/show.rabl

94 lines
3.1 KiB
Ruby

object @music_session
attributes :id, :description, :musician_access, :approval_required, :fan_access, :fan_chat, :band_id, :user_id, :claimed_recording_initiator_id
node :genres do |item|
item.genres.map(&:description)
end
if :is_recording?
node do |music_session|
{ :recording => partial("api_recordings/show", :object => music_session.recording) }
end
end
node :share_url do |music_session|
unless music_session.music_session_history.share_token.nil?
share_token_url(music_session.music_session_history.share_token.token)
end
end
child(:connections => :participants) {
collection @music_sessions, :object_root => false
attributes :ip_address, :client_id
node :user do |connection|
{ :id => connection.user.id, :photo_url => connection.user.photo_url, :name => connection.user.name, :is_friend => connection.user.friends?(current_user), :connection_state => connection.aasm_state }
end
child(:tracks => :tracks) {
attributes :id, :connection_id, :instrument_id, :sound, :client_track_id
}
}
child({:invitations => :invitations}) {
attributes :id, :sender_id, :receiver_id
}
# only show join_requests if the current_user is in the session
node(:join_requests, :if => lambda { |music_session| music_session.users.exists?(current_user) } ) do |music_session|
child(:join_requests => :join_requests) {
attributes :id, :text
child(:user => :user) {
attributes :id, :name
}
}
end
# only show currently playing recording data if the current_user is in the session
node(:claimed_recording, :if => lambda { |music_session| music_session.users.exists?(current_user) } ) do |music_session|
child(:claimed_recording => :claimed_recording) {
attributes :id, :name, :description, :is_public, :is_downloadable
child(:recording => :recording) {
attributes :id, :created_at, :duration
child(:band => :band) {
attributes :id, :name
}
child(:mixes => :mixes) {
attributes :id, :is_completed
node :mp3_url do |mix|
mix[:url]
end
node :ogg_url do |mix|
mix[:url]
end
}
child(:recorded_tracks => :recorded_tracks) {
attributes :id, :fully_uploaded, :client_track_id, :client_id, :instrument_id
node :url do |recorded_track|
recorded_track[:url]
end
child(:user => :user) {
attributes :id, :first_name, :last_name, :city, :state, :country, :photo_url
}
}
}
}
end
# only show mount info if fan_acces is public. Eventually we'll also need to show this in other scenarios, like if invited
child({:mount => :mount}, :if => lambda { |music_session| music_session.fan_access}) {
attributes :id, :name, :sourced, :listeners, :bitrate, :subtype
node(:mime_type) { |mount| mount.resolve_string(:mime_type) }
node(:bitrate) { |mount| mount.resolve_string(:bitrate) }
node(:subtype) { |mount| mount.resolve_string(:subtype) }
}