54 lines
1.3 KiB
Ruby
54 lines
1.3 KiB
Ruby
class TheatreCommentsController < ApplicationController
|
|
def index
|
|
limit = params[:limit].to_i
|
|
limit = 20 if limit <= 0
|
|
|
|
no_gt = params[:no_gt].to_i
|
|
no_gt = 0 if no_gt < 0
|
|
|
|
comments = TheatreComment
|
|
.where(theatre_id: params[:theatre_id])
|
|
.where('no > ?', no_gt)
|
|
.order(no: :desc)
|
|
.limit(limit)
|
|
|
|
render json: comments.map {
|
|
_1.as_json(include: { user: { only: [:id, :name] } })
|
|
.merge(content: _1.discarded? ? nil : _1.content, deleted: _1.discarded?)
|
|
}
|
|
end
|
|
|
|
def create
|
|
return head :unauthorized unless current_user
|
|
|
|
content = params[:content]
|
|
return head :unprocessable_entity if content.blank?
|
|
|
|
theatre = Theatre.find_by(id: params[:theatre_id])
|
|
return head :not_found unless theatre
|
|
|
|
comment = nil
|
|
theatre.with_lock do
|
|
no = theatre.next_comment_no
|
|
comment = TheatreComment.create!(theatre:, no:, user: current_user, content:)
|
|
theatre.update!(next_comment_no: no + 1)
|
|
end
|
|
|
|
render json: comment, status: :created
|
|
end
|
|
|
|
def destroy
|
|
return head :unauthorized unless current_user
|
|
|
|
theatre_id = params[:theatre_id].to_i
|
|
no = params[:id].to_i
|
|
|
|
comment = TheatreComment.find_by(theatre_id:, no:)
|
|
return head :not_found unless comment
|
|
|
|
comment.discard!
|
|
|
|
head :no_content
|
|
end
|
|
end
|