2019-09-16 18:02:52 +02:00
|
|
|
class CommentsController < ApplicationController
|
2019-10-02 16:43:13 +02:00
|
|
|
before_action :authenticate_user!, only: [:create, :update]
|
2021-01-29 00:49:27 +01:00
|
|
|
|
2019-09-16 18:02:52 +02:00
|
|
|
def index
|
|
|
|
|
comments = Comment
|
2019-09-30 23:28:52 +02:00
|
|
|
.select(
|
|
|
|
|
:id,
|
|
|
|
|
:body,
|
|
|
|
|
:parent_id,
|
2019-10-01 19:15:03 +02:00
|
|
|
:is_post_update,
|
2019-09-30 23:28:52 +02:00
|
|
|
:updated_at,
|
|
|
|
|
'users.full_name as user_full_name',
|
|
|
|
|
'users.email as user_email',
|
|
|
|
|
)
|
2019-09-16 18:02:52 +02:00
|
|
|
.where(post_id: params[:post_id])
|
|
|
|
|
.left_outer_joins(:user)
|
|
|
|
|
.order(updated_at: :desc)
|
|
|
|
|
|
|
|
|
|
render json: comments
|
|
|
|
|
end
|
2019-09-17 11:33:18 +02:00
|
|
|
|
|
|
|
|
def create
|
|
|
|
|
comment = Comment.new(comment_params)
|
|
|
|
|
|
|
|
|
|
if comment.save
|
2021-01-29 00:49:27 +01:00
|
|
|
send_notifications(comment)
|
|
|
|
|
|
2019-09-30 23:28:52 +02:00
|
|
|
render json: comment.attributes.merge(
|
|
|
|
|
{ user_full_name: current_user.full_name, user_email: current_user.email}
|
|
|
|
|
), status: :created
|
2019-09-17 11:33:18 +02:00
|
|
|
else
|
2019-09-18 13:40:00 +02:00
|
|
|
render json: {
|
2022-06-05 11:40:43 +02:00
|
|
|
error: comment.errors.full_messages
|
2019-09-18 13:40:00 +02:00
|
|
|
}, status: :unprocessable_entity
|
2019-09-17 11:33:18 +02:00
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2019-10-02 16:43:13 +02:00
|
|
|
def update
|
2019-10-09 15:23:59 +02:00
|
|
|
comment = Comment.find(params[:id])
|
|
|
|
|
|
2019-10-02 16:43:13 +02:00
|
|
|
comment.assign_attributes(comment_params)
|
|
|
|
|
|
|
|
|
|
if !current_user.power_user? && current_user.id != post.user_id
|
2022-06-05 11:40:43 +02:00
|
|
|
render json: t('backend.errors.unauthorized'), status: :unauthorized
|
2019-10-02 16:43:13 +02:00
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if comment.save
|
|
|
|
|
render json: comment.attributes.merge(
|
|
|
|
|
{ user_full_name: current_user.full_name, user_email: current_user.email}
|
|
|
|
|
)
|
|
|
|
|
else
|
|
|
|
|
render json: {
|
2022-06-05 11:40:43 +02:00
|
|
|
error: comment.errors.full_messages
|
2019-10-02 16:43:13 +02:00
|
|
|
}, status: :unprocessable_entity
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2019-09-17 11:33:18 +02:00
|
|
|
private
|
2021-01-29 00:49:27 +01:00
|
|
|
def comment_params
|
|
|
|
|
params
|
|
|
|
|
.require(:comment)
|
|
|
|
|
.permit(:body, :parent_id, :is_post_update)
|
|
|
|
|
.merge(
|
|
|
|
|
user_id: current_user.id,
|
|
|
|
|
post_id: params[:post_id]
|
|
|
|
|
)
|
|
|
|
|
end
|
2019-09-17 11:33:18 +02:00
|
|
|
|
2021-01-29 00:49:27 +01:00
|
|
|
def send_notifications(comment)
|
2022-05-28 11:03:36 +02:00
|
|
|
if comment.is_post_update # Post update
|
|
|
|
|
UserMailer.notify_followers_of_post_update(comment: comment).deliver_later
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if comment.parent_id == nil # Reply to a post
|
|
|
|
|
user = comment.post.user
|
|
|
|
|
|
|
|
|
|
if comment.user.id != user.id and
|
|
|
|
|
user.notifications_enabled? and
|
|
|
|
|
comment.post.follows.exists?(user_id: user.id)
|
|
|
|
|
|
|
|
|
|
UserMailer.notify_post_owner(comment: comment).deliver_later
|
|
|
|
|
end
|
|
|
|
|
else # Reply to a comment
|
|
|
|
|
parent_comment = comment.parent
|
|
|
|
|
user = parent_comment.user
|
|
|
|
|
|
|
|
|
|
if user.notifications_enabled? and
|
|
|
|
|
parent_comment.user.id != comment.user.id
|
|
|
|
|
|
|
|
|
|
UserMailer.notify_comment_owner(comment: comment).deliver_later
|
|
|
|
|
end
|
2019-09-17 11:33:18 +02:00
|
|
|
end
|
2022-05-28 11:03:36 +02:00
|
|
|
|
2021-01-29 00:49:27 +01:00
|
|
|
end
|
2019-09-16 18:02:52 +02:00
|
|
|
end
|