2014-10-23 04:10:49 +00:00
|
|
|
module JamRuby
|
|
|
|
|
class UserSync < ActiveRecord::Base
|
|
|
|
|
|
|
|
|
|
belongs_to :recorded_track
|
|
|
|
|
belongs_to :mix
|
|
|
|
|
belongs_to :quick_mix
|
2015-02-16 04:01:06 +00:00
|
|
|
belongs_to :recorded_backing_track
|
2014-10-23 04:10:49 +00:00
|
|
|
|
|
|
|
|
def self.show(id, user_id)
|
|
|
|
|
self.index({user_id: user_id, id: id, limit: 1, offset: 0})[:query].first
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def self.index(params)
|
|
|
|
|
user_id = params[:user_id]
|
|
|
|
|
limit = params[:limit].to_i
|
|
|
|
|
limit = limit == 0 ? 20 : limit
|
|
|
|
|
offset = params[:offset].to_i
|
|
|
|
|
id = params[:id]
|
|
|
|
|
recording_id = params[:recording_id]
|
|
|
|
|
|
|
|
|
|
page = (offset / limit) + 1 # one-based madness
|
|
|
|
|
|
|
|
|
|
raise 'no user id specified' if user_id.blank?
|
|
|
|
|
|
2014-11-07 22:12:36 +00:00
|
|
|
query = UserSync
|
2015-02-16 04:01:06 +00:00
|
|
|
.includes(recorded_track: [{recording: [:owner, {claimed_recordings: [:share_token]}, {recorded_tracks: [:user]}, {comments:[:user]}, :likes, :plays, :mixes]}, user: [], instrument:[]], mix: [], quick_mix:[], recorded_backing_track:[])
|
2014-11-07 22:12:36 +00:00
|
|
|
.joins("LEFT OUTER JOIN claimed_recordings ON claimed_recordings.user_id = user_syncs.user_id AND claimed_recordings.recording_id = user_syncs.recording_id")
|
|
|
|
|
.where(user_id: user_id)
|
|
|
|
|
.where(%Q{
|
|
|
|
|
((claimed_recordings IS NULL OR claimed_recordings.discarded = TRUE) AND fully_uploaded = FALSE) OR (claimed_recordings IS NOT NULL AND claimed_recordings.discarded = FALSE)
|
|
|
|
|
})
|
|
|
|
|
.paginate(:page => page, :per_page => limit)
|
|
|
|
|
.order('created_at DESC, unified_id')
|
2014-10-23 04:10:49 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
# allow selection of single user_sync, by ID
|
|
|
|
|
unless id.blank?
|
|
|
|
|
query = query.where(unified_id: id)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
unless recording_id.blank?
|
|
|
|
|
query = query.where(recording_id: recording_id)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if query.length == 0
|
|
|
|
|
{ query:query, next: nil}
|
|
|
|
|
elsif query.length < limit
|
|
|
|
|
{ query:query, next: nil}
|
|
|
|
|
else
|
|
|
|
|
{ query:query, next: offset + limit}
|
|
|
|
|
end
|
|
|
|
|
end
|
2014-11-06 17:26:13 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def self.deletables(params)
|
|
|
|
|
user_id = params[:user_id]
|
|
|
|
|
recording_ids = params[:recording_ids]
|
|
|
|
|
|
|
|
|
|
limit = 1000
|
|
|
|
|
|
2015-01-08 16:25:54 +00:00
|
|
|
if recording_ids.nil?
|
|
|
|
|
return []
|
|
|
|
|
else
|
|
|
|
|
recording_ids = recording_ids.uniq
|
|
|
|
|
|
|
|
|
|
raise "too many recording_ids" if recording_ids.length > limit
|
|
|
|
|
|
|
|
|
|
found_recording_ids =
|
|
|
|
|
UserSync
|
|
|
|
|
.select('user_syncs.recording_id')
|
|
|
|
|
.joins("LEFT OUTER JOIN claimed_recordings ON claimed_recordings.user_id = user_syncs.user_id")
|
|
|
|
|
.where(%Q{
|
|
|
|
|
((claimed_recordings IS NULL OR claimed_recordings.discarded = TRUE) AND fully_uploaded = FALSE) OR (claimed_recordings IS NOT NULL AND claimed_recordings.discarded = FALSE)
|
|
|
|
|
})
|
|
|
|
|
.where(user_id: user_id)
|
|
|
|
|
.paginate(:page => 1, :per_page => limit)
|
|
|
|
|
.group('user_syncs.recording_id').map(&:recording_id)
|
|
|
|
|
|
|
|
|
|
recording_ids - found_recording_ids
|
|
|
|
|
end
|
2014-11-06 17:26:13 +00:00
|
|
|
end
|
2014-10-23 04:10:49 +00:00
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|