49 行
1.3 KiB
Ruby
49 行
1.3 KiB
Ruby
module Gekanator
|
|
class QuestionSuggestionPromoter
|
|
def self.call(...) = new(...).call
|
|
|
|
def initialize suggestion:, user:
|
|
@suggestion = suggestion
|
|
@user = user
|
|
end
|
|
|
|
def call
|
|
suggestion.with_lock do
|
|
return promoted_question if suggestion.processed?
|
|
|
|
question = GekanatorQuestion.create!(
|
|
text: suggestion.question_text,
|
|
kind: 'post_similarity',
|
|
source: 'user_suggested',
|
|
status: 'accepted',
|
|
priority_weight: 1.2,
|
|
condition: {
|
|
type: 'post-similarity',
|
|
postId: suggestion.gekanator_game.correct_post_id,
|
|
answer: suggestion.answer,
|
|
threshold: 0.65
|
|
},
|
|
gekanator_question_suggestion: suggestion,
|
|
created_by: user)
|
|
GekanatorQuestionExample.create!(
|
|
gekanator_question: question,
|
|
post: suggestion.gekanator_game.correct_post,
|
|
user: user,
|
|
gekanator_game: suggestion.gekanator_game,
|
|
answer: suggestion.answer,
|
|
source: 'initial_suggestion')
|
|
suggestion.update!(processed: true)
|
|
question
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :suggestion, :user
|
|
|
|
def promoted_question
|
|
suggestion.gekanator_questions.order(id: :desc).first
|
|
end
|
|
end
|
|
end
|