Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
16 / 16
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
QuestionsResource
100.00% covered (success)
100.00%
16 / 16
100.00% covered (success)
100.00%
2 / 2
3
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 toArray
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3namespace App\Http\Resources\Api\V2;
4
5use App\Models\Answer;
6use App\Models\Question;
7use Illuminate\Http\Request;
8use Illuminate\Http\Resources\Json\ResourceCollection as JsonResourceCollection;
9use Illuminate\Support\Collection;
10
11class QuestionsResource extends JsonResourceCollection
12{
13    /** @var \Illuminate\Support\Collection<\App\Models\CustomerAnswer> */
14    protected $userAnwsers = null;
15
16    /**
17     * Create a new resource instance.
18     *
19     * @param  mixed                                                      $resource
20     * @param  \Illuminate\Support\Collection<\App\Models\CustomerAnswer> $userAnwsers
21     * @return void
22     * @phpcs:disable Squiz.Commenting.FunctionComment.IncorrectTypeHint
23     */
24    public function __construct(mixed $resource, Collection $userAnwsers = null)
25    {
26        //phpcs:enable
27        $this->userAnwsers = $userAnwsers;
28        parent::__construct($resource);
29    }
30
31    /**
32     * Transform the resource into an array.
33     *
34     * @param \Illuminate\Http\Request $request
35     * @return \Illuminate\Support\Collection
36     * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass
37     */
38    public function toArray(Request $request): \Illuminate\Support\Collection
39    {
40        //phpcs:enable
41        return $this->collection->map(function (Question $question) {
42            /** @var \Illuminate\Support\Collection */
43            $answers  = $question->answers;
44            $question = [
45                'id' => $question->id,
46                'type' => $question->type->value(),
47                'question' => $question->question,
48                'answers' => new AnswersResource($answers)
49            ];
50            if ($this->userAnwsers) {
51                $question['customerAnswers'] = new AnswersResource($answers->filter(function (Answer $answer) {
52                    return $this->userAnwsers->keyBy('id')->has($answer->id);
53                }));
54            }
55            return $question;
56        });
57    }
58}