feature/share-libs
rb 76 lines 1.72 KB
Raw
1 module Api
2 module V1
3 class KaraokeController < ApiController
4 before_action :validate_request
5
6 def lyric_synches
7 render_file
8 end
9
10 def lyric_synches_post
11 return unless valid_payload?
12
13 @payload.map do |lyric_synch|
14 lyric_synch.delete('id')
15 lyric_synch['audio_file_id'] = params[:audio_file_id]
16 lyric_synch['user_id'] = current_user.id
17 end
18
19 LyricSynch.insert_all(@payload)
20 render_file
21 end
22
23 def lyric_synches_put
24 return unless valid_payload?
25
26 LyricSynch.upsert_all(@payload, unique_by: :id)
27 render_file
28 end
29
30 private
31
32 def validate_request
33 return render_error 'You must login.' unless user_signed_in?
34
35 return render_error 'We need the id.' if params[:audio_file_id].nil?
36
37 begin
38 @audio_file_id = Integer(params[:audio_file_id])
39 rescue ArgumentError
40 return render_error 'audio_file_id should be integer.'
41 end
42
43 true
44 end
45
46 def valid_payload?
47 information = request.raw_post
48 data_parsed = JSON.parse(information)
49 @payload = data_parsed['payload']
50 if @payload.nil?
51 render_error 'We need the payload.'
52 return false
53 end
54
55 true
56 end
57
58 def render_error(message)
59 render json: {
60 code: 500,
61 message: message,
62 audio_files: []
63 }
64 end
65
66 def render_file
67 @lyric_synches = LyricSynch.where(audio_file_id: @audio_file_id)
68 render json: {
69 code: 200,
70 message: 'OK.',
71 lyric_synches: @lyric_synches.as_json(only: %i[id lyric time])
72 }
73 end
74 end
75 end
76 end