42 lines
1.0 KiB
Ruby
42 lines
1.0 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
class DiscourseSolved::AnswerController < ::ApplicationController
|
||
|
requires_plugin DiscourseSolved::PLUGIN_NAME
|
||
|
|
||
|
def accept
|
||
|
limit_accepts
|
||
|
|
||
|
post = Post.find(params[:id].to_i)
|
||
|
|
||
|
topic = post.topic
|
||
|
topic ||= Topic.with_deleted.find(post.topic_id) if guardian.is_staff?
|
||
|
|
||
|
guardian.ensure_can_accept_answer!(topic, post)
|
||
|
|
||
|
DiscourseSolved.accept_answer!(post, current_user, topic: topic)
|
||
|
|
||
|
render json: success_json
|
||
|
end
|
||
|
|
||
|
def unaccept
|
||
|
limit_accepts
|
||
|
|
||
|
post = Post.find(params[:id].to_i)
|
||
|
|
||
|
topic = post.topic
|
||
|
topic ||= Topic.with_deleted.find(post.topic_id) if guardian.is_staff?
|
||
|
|
||
|
guardian.ensure_can_accept_answer!(topic, post)
|
||
|
|
||
|
DiscourseSolved.unaccept_answer!(post, topic: topic)
|
||
|
|
||
|
render json: success_json
|
||
|
end
|
||
|
|
||
|
def limit_accepts
|
||
|
return if current_user.staff?
|
||
|
RateLimiter.new(nil, "accept-hr-#{current_user.id}", 20, 1.hour).performed!
|
||
|
RateLimiter.new(nil, "accept-min-#{current_user.id}", 4, 30.seconds).performed!
|
||
|
end
|
||
|
end
|