class CommentsController < ApplicationController before_action :authenticate_user!, only: [:create, :update] def index comments = Comment .select( :id, :body, :parent_id, :is_post_update, :updated_at, 'users.full_name as user_full_name', 'users.email as user_email', ) .where(post_id: params[:post_id]) .left_outer_joins(:user) .order(updated_at: :desc) render json: comments end def create comment = Comment.new(comment_params) if comment.save send_notifications(comment) render json: comment.attributes.merge( { user_full_name: current_user.full_name, user_email: current_user.email} ), status: :created else render json: { error: I18n.t('errors.comment.create', message: comment.errors.full_messages) }, status: :unprocessable_entity end end def update comment = Comment.find(params[:id]) comment.assign_attributes(comment_params) if !current_user.power_user? && current_user.id != post.user_id render json: I18n.t('errors.unauthorized'), status: :unauthorized 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: { error: I18n.t('errors.comment.update', message: comment.errors.full_messages) }, status: :unprocessable_entity end end private 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 def send_notifications(comment) if comment.post.user.notifications_enabled? UserMailer.notify_post_owner(comment: comment).deliver_later end end end