Files
progress-test/app/graphql/mutations/create_review_message.rb

54 lines
1.5 KiB
Ruby

# frozen_string_literal: true
module Mutations
class CreateReviewMessage < BaseMutation
field :review_message, Types::ReviewMessageType, null: true
argument :message, Inputs::ReviewMessageInput, required: true
def resolve(message:)
message = message.to_h
ActiveRecord::Base.transaction do
review_message = ReviewMessage.create!({
**message,
user_id: current_user.id,
})
update_question_status(review_message.question, message[:feedback_type])
update_review_requests(review_message.question, message[:feedback_type])
{ review_message: review_message, errors: [] }
rescue ActiveRecord::RecordInvalid => e
{ review_message: nil, errors: e.record.errors.full_messages }
end
rescue Pundit::NotAuthorizedError => e
{ review_message: nil, errors: [e.message] }
end
private
def update_question_status(question, feedback_type)
new_question_status = case feedback_type
when "request_changes"
"with_requested_changes"
when "approve"
"approved"
when "answer"
"waiting_review"
end
question.update!(status: new_question_status)
end
def update_review_requests(question, feedback_type)
return question.review_requests.update_all(answered: false) if feedback_type == "answer"
question
.review_requests
.where(user_id: current_user.id)
.update_all(answered: question.user_id != current_user.id)
end
end
end