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 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
TeamQueryBuilder
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 2
30
0.00% covered (danger)
0.00%
0 / 1
 search
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
20
 bySector
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace Domain\Team\QueryBuilders;
4
5use App\Models\User;
6use Domain\Team\DTOs\TeamSearchDTO;
7use Illuminate\Database\Eloquent\Builder;
8
9class TeamQueryBuilder extends Builder
10{
11    /**
12     * @param TeamSearchDTO $userDTO
13     * @return $this
14     */
15    public function search(TeamSearchDTO $searchDTO): static
16    {
17        if ($searchDTO->id) {
18            $this->query->where('id', $searchDTO->id);
19        }
20
21        if ($searchDTO->description) {
22            $this->query->where('description', 'ilike', '%' . str_replace(' ', '%', $searchDTO->description) . '%');
23        }
24
25        if ($searchDTO->user) {
26            $this->query->select('teams.*');
27            $this->query->join('team_user', 'team_user.team_id', '=', 'teams.id');
28            $this->query->where('team_user.user_id', $searchDTO->user);
29        }
30
31        return $this;
32    }
33
34    /**
35     * @param User $user
36     * @return $this
37     */
38    public function bySector(User $user)
39    {
40        $abilities = $user->currentAccessToken()?->abilities;
41        $sector = array_key_first($abilities);
42
43        $this->where('sector', $sector);
44
45        return $this;
46    }
47}