Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
QuestionController
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 3
12
0.00% covered (danger)
0.00%
0 / 1
 index
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 indexWithResponse
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 unAnsweredBy
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace App\Http\Controllers\Api\V2;
4
5use App\Http\Controllers\Controller;
6use App\Http\Resources\Api\V2\QuestionsResource;
7use App\Models\Answer;
8use App\Models\Customer;
9use App\Models\Question;
10use App\Models\Service;
11use Illuminate\Http\Resources\Json\JsonResource;
12use Illuminate\Http\Resources\Json\ResourceCollection;
13
14class QuestionController extends Controller
15{
16    /**
17     * Returns all service questions.
18     *
19     * @param  Service $service
20     * @return JsonResource
21     */
22    public function index(Service $service): ResourceCollection
23    {
24        return new QuestionsResource($service->brand->questions);
25    }
26
27    /**
28     * Returns all service questions with user answers for all of them.
29     *
30     * @param  Service  $service
31     * @param  Customer $customer
32     * @return JsonResource
33     */
34    public function indexWithResponse(Service $service, Customer $customer): ResourceCollection
35    {
36        // * Make sure we are accessing a customer that belongs to our service.
37        $this->authorize('customerBelongsToService', $customer);
38
39        $customerAnswers = $customer->getAnswers($service);
40        return new QuestionsResource($service->brand->questions, $customerAnswers);
41    }
42
43    /**
44     * Returns all service questions that was not answered by a user.
45     *
46     * @param  Service  $service
47     * @param  Customer $customer
48     * @return JsonResource
49     */
50    public function unAnsweredBy(Service $service, Customer $customer): JsonResource
51    {
52        // * Make sure we are accessing a customer that belongs to our service.
53        $this->authorize('customerBelongsToService', $customer);
54
55        $questions = Question::whereHas('brand', function ($q) use ($service) {
56            $q->where('id', $service->brand->id);
57        })->whereDoesntHave('answers', function ($q) use ($customer) {
58            $q->whereIn('id', Answer::whereHas('customers', function ($q) use ($customer) {
59                $q->where('id', $customer->id);
60            })->pluck('id'));
61        })->with('answers')->get();
62        return new QuestionsResource($questions);
63    }
64}