86 lines
2.1 KiB
Ruby
86 lines
2.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# Copyright (c) 2010-2011, Diaspora Inc. This file is
|
|
# licensed under the Affero General Public License version 3 or later. See
|
|
# the COPYRIGHT file.
|
|
|
|
class CommentsController < ApplicationController
|
|
before_action :authenticate_user!, except: :index
|
|
|
|
respond_to :html, :mobile, :json
|
|
|
|
rescue_from ActiveRecord::RecordNotFound do
|
|
head :not_found
|
|
end
|
|
|
|
rescue_from Diaspora::NonPublic do
|
|
authenticate_user!
|
|
end
|
|
|
|
def create
|
|
begin
|
|
comment = comment_service.create(params[:post_id], params[:text])
|
|
rescue ActiveRecord::RecordNotFound
|
|
render plain: I18n.t("comments.create.error"), status: 404
|
|
return
|
|
end
|
|
|
|
if comment
|
|
respond_create_success(comment)
|
|
else
|
|
render plain: I18n.t("comments.create.error"), status: 422
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
if comment_service.destroy(params[:id])
|
|
respond_destroy_success
|
|
else
|
|
respond_destroy_error
|
|
end
|
|
end
|
|
|
|
def new
|
|
respond_to do |format|
|
|
format.mobile { render layout: false }
|
|
end
|
|
end
|
|
|
|
def index
|
|
comments = comment_service.find_for_post(params[:post_id])
|
|
respond_with do |format|
|
|
format.json { render json: CommentPresenter.as_collection(comments), status: 200 }
|
|
format.mobile { render layout: false, locals: {comments: comments} }
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def comment_service
|
|
@comment_service ||= CommentService.new(current_user)
|
|
end
|
|
|
|
def respond_create_success(comment)
|
|
respond_to do |format|
|
|
format.json { render json: CommentPresenter.new(comment), status: 201 }
|
|
format.html { head :created }
|
|
format.mobile { render partial: "comment", locals: {comment: comment} }
|
|
end
|
|
end
|
|
|
|
def respond_destroy_success
|
|
respond_to do |format|
|
|
format.mobile { redirect_back fallback_location: stream_path }
|
|
format.js { head :no_content }
|
|
format.json { head :no_content }
|
|
end
|
|
end
|
|
|
|
def respond_destroy_error
|
|
respond_to do |format|
|
|
format.mobile { redirect_back fallback_location: stream_path }
|
|
format.js { head :forbidden }
|
|
format.json { head :forbidden }
|
|
end
|
|
end
|
|
end
|