uploadDocumentForProcessor = $uploadDocumentForProcessor; $this->saveAnswerActionProcessor = $saveAnswerActionProcessor; } /** * @return QAUserAnswerSelected|\Illuminate\Database\Eloquent\Model */ public function execute($userId, $sourceId, $questionId, $questionType, $questionMetadata, $answerInText, $answerOptionId, $filesUpload, $timeUsedSeconds, $isPrevious, $reference = null){ $answer = null; $attachments = null; if(is_null($answer)) { $answer = new QAUserAnswerSelected; } $answer->user_id = $userId; $answer->source_id = $sourceId; $answer->question_id = $questionId; $answer->question_metadata = json_encode($questionMetadata); $answer->answer_option_id = $answerOptionId; $answer->time_used_seconds = $timeUsedSeconds; $answer->is_previous = $isPrevious; if($reference){ $answer->reference = $reference; } $answer->save(); //cief todo: why 2 save() in this file, this is wrong if($filesUpload){ $result = $this->uploadDocumentForProcessor->execute($filesUpload, $answer, 'questionnaires'); $attachments = array_map(function ($item) { return [ 'document_id' => $item->document_id, 'file_id' => $item->id, ]; }, $result); } if($questionType === QAType::REMARKS_WITH_DOCUMENT_UPLOAD){ $structuredAnswer = [ 'text' => $answerInText, 'files' => $attachments, ]; $answer->answer = json_encode($structuredAnswer); } else if($questionType === QAType::DOCUMENT_UPLOAD){ $structuredAnswer = [ 'files' => $attachments, ]; $answer->answer = json_encode($structuredAnswer); } else { $answer->answer = $answerInText; } $answer->save(); $this->saveAnswerActionProcessor->execute($questionMetadata, $answerInText); return $answer; } }