-
Notifications
You must be signed in to change notification settings - Fork 2.9k
/
likes_controller.rb
59 lines (50 loc) · 1.51 KB
/
likes_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
56
57
58
59
# frozen_string_literal: true
# Copyright (c) 2010-2011, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
class LikesController < ApplicationController
include ApplicationHelper
before_action :authenticate_user!, except: :index
respond_to :html,
:mobile,
:json
rescue_from Diaspora::NonPublic do
authenticate_user!
end
def index
like = if params[:post_id]
like_service.find_for_post(params[:post_id])
else
like_service.find_for_comment(params[:comment_id])
end
render json: like
.includes(author: :profile)
.as_api_response(:backbone)
end
def create
like = if params[:post_id]
like_service.create_for_post(params[:post_id])
else
like_service.create_for_comment(params[:comment_id])
end
rescue ActiveRecord::RecordNotFound, ActiveRecord::RecordInvalid
render plain: I18n.t("likes.create.error"), status: 422
else
respond_to do |format|
format.html { head :created }
format.mobile { redirect_to post_path(like.post_id) }
format.json { render json: like.as_api_response(:backbone), status: 201 }
end
end
def destroy
if like_service.destroy(params[:id])
head :no_content
else
render plain: I18n.t("likes.destroy.error"), status: 404
end
end
private
def like_service
@like_service ||= LikeService.new(current_user)
end
end