|
- 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
|