jam-cloud/web/app/controllers/api_reviews_controller.rb

77 lines
2.1 KiB
Ruby
Raw Permalink Normal View History

require 'sanitize'
class ApiReviewsController < ApiController
before_filter :api_signed_in_user, :except => [:index]
before_filter :lookup_review_summary, :only => [:details]
before_filter :lookup_review, :only => [:update, :delete, :show]
respond_to :json
2015-07-21 21:55:40 +00:00
# List review summaries according to params:
def index
summaries = ReviewSummary.index(params[:review])
@reviews = summaries.paginate(page: params[:page], per_page: params[:per_page])
respond_with @reviews, responder: ApiResponder, :status => 200
end
# Create a review:
def create
2016-08-03 01:46:15 +00:00
if params[:target_type] == 'JamRuby::JamTrack'
target = JamTrack.find(params['target_id'])
else
target = User.find(params['target_id'])
if params[:target_type] == 'JamRuby::Teacher'
target = target.teacher
end
end
params[:target] = target
params[:user] = current_user
@review = Review.create_or_update(params)
if @review.errors.any?
respond_with_model(@review)
return
end
end
2015-07-21 21:55:40 +00:00
# List reviews matching targets for given review summary:
def details
2016-08-03 01:46:15 +00:00
reviews = Review.index(:target_id => @review_summary.target_id)
@reviews = reviews.paginate(page: params[:page], per_page: params[:per_page])
respond_with @reviews, responder: ApiResponder, :status => 200
end
2015-07-21 21:55:40 +00:00
# Update a review:
def update
mods = params[:mods]
if mods.present?
@review.rating = mods[:rating] if mods.key?(:rating)
@review.description = mods[:description] if mods.key?(:description)
@review.save
end
respond_with_model(@review)
end
2015-07-21 21:55:40 +00:00
# Mark a review as deleted:
def delete
@review.deleted_at = Time.now()
2015-07-21 21:55:40 +00:00
@review
@review.save
render :json => {}, status: 204
end
2016-08-03 01:46:15 +00:00
private
def lookup_review_summary
@review_summary = ReviewSummary.find(params[:review_summary_id])
end
def lookup_review
arel = Review.where("id=?", params[:id])
arel = arel.where("user_id=?", current_user) unless current_user.admin
@review = arel.first
2015-07-21 21:55:40 +00:00
raise ActiveRecord::RecordNotFound, "Couldn't find review matching #{arel}" if @review.nil?
end
end