Class: Voluntary::Api::V1::Music::YearInReviewsController

Inherits:
BaseController
  • Object
show all
Defined in:
app/controllers/voluntary/api/v1/music/year_in_reviews_controller.rb

Instance Method Summary collapse

Instance Method Details

#indexObject



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'app/controllers/voluntary/api/v1/music/year_in_reviews_controller.rb', line 10

def index
  years_in_review = @user.years_in_review_music.published
  params[:page] = nil if params[:page] == ''
  params[:per_page] = nil if params[:per_page] == ''
  years_in_review = years_in_review.order('year DESC').paginate(per_page: params[:per_page] || 10, page: params[:page] || 1)

  respond_to do |f|
    f.json {
      render json: {
        current_page: years_in_review.current_page, per_page: years_in_review.per_page, total_entries: years_in_review.total_entries,
        total_pages: years_in_review.total_pages,
        entries: years_in_review.map{|r| { year: r.year } },
      }.to_json
    }
  end
end

#showObject



27
28
29
# File 'app/controllers/voluntary/api/v1/music/year_in_reviews_controller.rb', line 27

def show
  respond_to {|f| f.json { render json: { year: year_in_review.year }.to_json } }
end

#top_releasesObject



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'app/controllers/voluntary/api/v1/music/year_in_reviews_controller.rb', line 31

def top_releases
  releases = year_in_review.releases.order('position ASC')
  tracks = year_in_review.tracks.order('position ASC').group_by(&:release_id)
  tracks_count = tracks.values.flatten.length
  
  respond_to do |f|
    f.json {
      render json: releases.map {|year_in_review_release|
        {
          position: year_in_review_release.position,
          artist_name: year_in_review_release.artist_name,
          artist_id: year_in_review_release.artist_id,
          release_id: year_in_review_release.release_id,
          release_name: year_in_review_release.release_name,
          top_track_positions_sum: (
            (tracks[year_in_review_release.release_id] || []).sum{|t| tracks_count - t.position + 1 }
          ),
          top_tracks: (tracks[year_in_review_release.release_id] || []).map do |t| 
            { position: t.position, track_name: t.track_name, track_id: t.track_id }
          end
        }
      }.to_json
    }
  end
end

#top_tracksObject



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'app/controllers/voluntary/api/v1/music/year_in_reviews_controller.rb', line 57

def top_tracks
  tracks = year_in_review.tracks.order('position ASC')
  
  respond_to do |f|
    f.json {
      render json: tracks.map {|year_in_review_track|
        {
          position: year_in_review_track.position,
          artist_name: year_in_review_track.artist_name,
          artist_id: year_in_review_track.artist_id,
          release_id: year_in_review_track.release_id,
          release_name: year_in_review_track.release_name,
          track_id: year_in_review_track.track_id,
          track_name: year_in_review_track.track_name
        }
      }.to_json
    }
  end
end