Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 32
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
ClientManagementGroupResource
0.00% covered (danger)
0.00%
0 / 32
0.00% covered (danger)
0.00%
0 / 3
90
0.00% covered (danger)
0.00%
0 / 1
 toArray
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
6
 processSubGroups
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 1
20
 getAllUsers
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3namespace App\Http\Resources;
4
5use App\Http\Models\UserInfo;
6use Illuminate\Support\Str;
7use Illuminate\Http\Request;
8use Illuminate\Http\Resources\Json\JsonResource;
9
10class ClientManagementGroupResource extends JsonResource
11{
12    /**
13     * Transform the resource into an array.
14     *
15     * @return array<string, mixed>
16     */
17    public function toArray(Request $request): array
18    {
19        $allUsers = $this->getAllUsers($this);
20
21        $data = [
22            'id' => $this->id,
23            'name' => $this->name,
24            'slug' => Str::slug($this->name),
25            'members' => UserInfo::where('group_id', $this->id)->count(),
26            'subgroups' => $this->processSubGroups($request, $this->subgroups),
27        ];
28
29        if (Str::contains($request->url(), 'group-users')) {
30            $data['users'] = ClientManagementUserResource::collection($allUsers);
31        }
32
33        return $data;
34    }
35
36    private function processSubGroups($request, $subgroups)
37    {
38        if (empty($subgroups) || count($subgroups) < 1) {
39            return null;
40        }
41
42        return $subgroups->map(function ($subgroup) use ($request) {
43            $allUsers = $this->getAllUsers($subgroup);
44
45            $data = [
46                'id' => $this->id,
47                'name' => $subgroup->name,
48                'slug' => Str::slug($subgroup->name),
49                'members' => UserInfo::where('subgroup_id', $subgroup->id)->count()
50            ];
51
52            if (Str::contains($request->url(), 'group-users')) {
53                $data['users'] = ClientManagementUserResource::collection($allUsers);
54            }
55
56            return $data;
57        });
58    }
59
60    private function getAllUsers($group)
61    {
62        $users = $group->users;
63        $users = $users->merge($group->groupInvitedUsers);
64        $users = $users->merge($group->subgroupInvitedUsers);
65
66        if (filled($group->subgroups)) {
67            foreach ($group->subgroups as $subgroup) {
68                $users = $users->merge($this->getAllUsers($subgroup));
69            }
70        }
71
72        return $users;
73    }
74}