Files
astuto/app/controllers/comments_controller.rb

107 lines
2.8 KiB
Ruby
Raw Normal View History

2019-09-16 18:02:52 +02:00
class CommentsController < ApplicationController
before_action :authenticate_user!, only: [:create, :update, :destroy]
2024-05-03 18:11:07 +02:00
before_action :check_tenant_subscription, only: [:create, :update, :destroy]
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,
:created_at,
2019-09-30 23:28:52 +02:00
:updated_at,
'users.id as user_id', # required for avatar_url
2019-09-30 23:28:52 +02:00
'users.full_name as user_full_name',
'users.email as user_email',
'users.role as user_role',
2019-09-30 23:28:52 +02:00
)
2019-09-16 18:02:52 +02:00
.where(post_id: params[:post_id])
.left_outer_joins(:user)
.order(created_at: :desc)
.includes(user: { avatar_attachment: :blob }) # Preload avatars
comments = comments.map do |comment|
user_avatar_url = comment.user.avatar.attached? ? url_for(comment.user.avatar) : nil
comment.attributes.merge(user_avatar: user_avatar_url)
end
2019-09-16 18:02:52 +02:00
render json: comments
end
def create
@comment = Comment.new
@comment.assign_attributes(comment_create_params)
if @comment.save
SendNotificationForCommentWorkflow.new(comment: @comment).run
render json: @comment.attributes.merge(
{
user_full_name: current_user.full_name,
user_email: current_user.email,
user_avatar: current_user.avatar.attached? ? url_for(current_user.avatar) : nil,
user_role: current_user.role_before_type_cast
}
2019-09-30 23:28:52 +02:00
), status: :created
else
2019-09-18 13:40:00 +02:00
render json: {
error: @comment.errors.full_messages
2019-09-18 13:40:00 +02:00
}, status: :unprocessable_entity
end
end
def update
@comment = Comment.find(params[:id])
authorize @comment
if @comment.update(comment_update_params)
render json: @comment.attributes.merge(
{
user_full_name: @comment.user.full_name,
user_email: @comment.user.email,
user_avatar: @comment.user.avatar.attached? ? url_for(@comment.user.avatar) : nil,
user_role: @comment.user.role_before_type_cast
}
)
else
render json: {
error: @comment.errors.full_messages
}, status: :unprocessable_entity
end
end
def destroy
@comment = Comment.find(params[:id])
authorize @comment
if @comment.destroy
render json: {
id: @comment.id,
}, status: :accepted
else
render json: {
error: @comment.errors.full_messages
}, status: :unprocessable_entity
end
end
private
def comment_create_params
2022-06-10 12:03:33 +02:00
params
.require(:comment)
.permit(policy(@comment).permitted_attributes_for_create)
2022-06-10 12:03:33 +02:00
.merge(
user_id: current_user.id,
post_id: params[:post_id]
)
end
def comment_update_params
params
.require(:comment)
.permit(policy(@comment).permitted_attributes_for_update)
end
2019-09-16 18:02:52 +02:00
end