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