Files
exchange-2.0/app/Classes/Modules/Questionnaires/Processors/SaveAnswerV1AdminWFProcessor.php
T
2024-12-02 23:06:44 +08:00

86 lines
2.8 KiB
PHP

<?php
namespace App\Classes\Modules\Questionnaires\Processors;
use App\Models\QAUserAnswerSelected;
use App\Classes\Modules\Questionnaires\Services\FetchesUserAnswerSelected;
use App\Classes\Modules\Documents\Processors\UploadDocumentProcessor;
use App\Classes\ValueObjects\Constants\QAType;
class SaveAnswerV1AdminWFProcessor
{
/** @var FetchesUserAnswerSelected */
private $fetchesUserAnswerSelected;
/** @var UploadDocumentProcessor */
private $uploadDocumentForProcessor;
/**
* SaveAnswerV1AdminWFProcessor constructor.
* @param FetchesUserAnswerSelected $fetchesUserAnswerSelected
* @param UploadDocumentProcessor $uploadDocumentForProcessor
*/
public function __construct(FetchesUserAnswerSelected $fetchesUserAnswerSelected, UploadDocumentProcessor $uploadDocumentForProcessor)
{
$this->fetchesUserAnswerSelected = $fetchesUserAnswerSelected;
$this->uploadDocumentForProcessor = $uploadDocumentForProcessor;
}
/**
* @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();
return $answer;
}
}