@@ -3,54 +3,44 @@ module V1
3
3
class PayloadsController < ApplicationController
4
4
include RateLimitable
5
5
6
+ before_action :set_client_token
7
+
6
8
def create
7
- payload = Payload . new ( payload_params )
8
- payload . hash_id = SecureRandom . hex ( 10 )
9
-
10
- if payload . save
11
- render json : payload_response ( payload ) , status : :created
12
- else
13
- render json : { errors : payload . errors . full_messages } , status : :unprocessable_entity
14
- end
9
+ @payload = PayloadService . create ( payload_params , @client_token )
10
+ render json : @payload , status : :created
11
+ rescue ActiveRecord ::RecordInvalid => e
12
+ render_error ( e . message , :unprocessable_entity )
15
13
end
16
14
17
15
def update
18
- payload = Payload . find_by! ( hash_id : params [ :hash_id ] )
19
-
20
- if payload . update ( payload_params )
21
- render json : payload_response ( payload )
22
- else
23
- render json : { errors : payload . errors . full_messages } , status : :unprocessable_entity
24
- end
16
+ @payload = PayloadService . update ( params [ :hash_id ] , payload_params , @client_token )
17
+ render json : @payload
25
18
rescue ActiveRecord ::RecordNotFound
26
- render json : { error : "Payload not found" } , status : :not_found
19
+ render_error ( "Payload not found" , :not_found )
20
+ rescue ActiveRecord ::RecordInvalid => e
21
+ render_error ( e . message , :unprocessable_entity )
27
22
end
28
23
29
24
def show
30
- payload = Payload . find_by! ( hash_id : params [ :hash_id ] )
31
- payload . update ( viewed_at : Time . current )
32
-
33
- render json : payload_response ( payload )
25
+ @payload = PayloadService . find ( params [ :hash_id ] , @client_token )
26
+ render json : @payload
34
27
rescue ActiveRecord ::RecordNotFound
35
- render json : { error : "Payload not found" } , status : : not_found
28
+ render_error ( "Payload not found" , : not_found)
36
29
end
37
30
38
31
private
39
32
40
33
def payload_params
41
- params . require ( :payload ) . permit ( :content , :mime_type , :expiry_time )
34
+ params . require ( :payload ) . permit ( :content , :expiry_time )
35
+ end
36
+
37
+ def set_client_token
38
+ @client_token = request . headers [ "X-Client-Token" ]
39
+ render_error ( "Missing client token" , :unauthorized ) unless @client_token
42
40
end
43
41
44
- def payload_response ( payload )
45
- {
46
- hash_id : payload . hash_id ,
47
- content : payload . content ,
48
- mime_type : payload . mime_type ,
49
- created_at : payload . created_at ,
50
- updated_at : payload . updated_at ,
51
- viewed_at : payload . viewed_at ,
52
- expiry_time : payload . expiry_time
53
- }
42
+ def render_error ( message , status )
43
+ render json : { errors : [ message ] } , status : status
54
44
end
55
45
end
56
46
end
0 commit comments