ldc-crm/app/Http/Resources/Api/V2/QuestionsResource.php

59 lines
2 KiB
PHP
Raw Permalink Normal View History

<?php
namespace App\Http\Resources\Api\V2;
2021-08-20 16:46:07 +02:00
use App\Models\Answer;
use App\Models\Question;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\ResourceCollection as JsonResourceCollection;
use Illuminate\Support\Collection;
class QuestionsResource extends JsonResourceCollection
{
/** @var \Illuminate\Support\Collection<\App\Models\CustomerAnswer> */
protected $userAnswers = null;
/**
* Create a new resource instance.
*
* @param mixed $resource
* @param \Illuminate\Support\Collection<\App\Models\CustomerAnswer> $userAnswers
* @return void
* @phpcs:disable Squiz.Commenting.FunctionComment.IncorrectTypeHint
*/
public function __construct(mixed $resource, Collection $userAnswers = null)
{
//phpcs:enable
$this->userAnswers = $userAnswers;
parent::__construct($resource);
}
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Support\Collection
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass
*/
public function toArray(Request $request): \Illuminate\Support\Collection
{
//phpcs:enable
return $this->collection->map(function (Question $question) {
2021-08-20 16:46:07 +02:00
/** @var \Illuminate\Support\Collection */
$answers = $question->answers;
$question = [
'id' => $question->id,
'type' => $question->type->value(),
'question' => $question->question,
2021-08-20 16:46:07 +02:00
'answers' => new AnswersResource($answers)
];
if ($this->userAnswers) {
2021-08-20 16:46:07 +02:00
$question['customerAnswers'] = new AnswersResource($answers->filter(function (Answer $answer) {
return $this->userAnswers->keyBy('id')->has($answer->id);
2021-08-20 16:46:07 +02:00
}));
}
return $question;
});
}
}