-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathSearchController.php
More file actions
110 lines (94 loc) · 3.24 KB
/
Copy pathSearchController.php
File metadata and controls
110 lines (94 loc) · 3.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use HMS\Repositories\UserRepository;
use HMS\Repositories\InviteRepository;
class SearchController extends Controller
{
/**
* @var UserRepository
*/
protected $userRepository;
/**
* @var InviteRepository
*/
protected $inviteRepository;
/**
* Create a new controller instance.
*
* @param UserRepository $userRepository
* @param InviteRepository $inviteRepository
*/
public function __construct(
UserRepository $userRepository,
InviteRepository $inviteRepository
) {
$this->userRepository = $userRepository;
$this->inviteRepository = $inviteRepository;
$this->middleware('can:search.users')->only(['users']);
$this->middleware('can:search.invites')->only(['invites']);
}
/**
* Search for users.
*
* @param string $searchQuery
* @param Request $request
*
* @return \Illuminate\Http\Response
*/
public function users(string $searchQuery = null, Request $request)
{
if ($request['q']) {
$searchQuery = $request['q'];
} elseif (is_null($searchQuery)) {
return response()->json([]);
}
// TODO: consider how to paginate response (posible fractal)
$users = $this->userRepository->searchLike($searchQuery, $request->input('withAccount', null), true, 30);
$users->setCollection($users->getCollection()->map(function ($user) {
$ret = [
'id' => $user->getId(),
'fullname' => $user->getFullname(),
'username' => $user->getUsername(),
'email' => $user->getEmail(),
'accountId' => $user->getAccount() ? $user->getAccount()->getId() : null,
'paymentRef' => $user->getAccount() ? $user->getAccount()->getPaymentRef() : '',
'google2fa' => $user->isGoogle2faEnable(),
];
if (\Gate::allows('profile.view.all')) {
$ret = array_merge($ret, [
'address1' => $user->getProfile() ? $user->getProfile()->getAddress1() : null,
'addressPostcode' => $user->getProfile() ? $user->getProfile()->getAddressPostcode() : null,
]);
}
return $ret;
}));
return response()->json($users);
}
/**
* Search for Invites.
*
* @param string $searchQuery
* @param Request $request
*
* @return \Illuminate\Http\Response
*/
public function invites(string $searchQuery = null, Request $request)
{
if ($request['q']) {
$searchQuery = $request['q'];
} elseif (is_null($searchQuery)) {
return response()->json([]);
}
// TODO: consider how to paginate response (posible fractal)
$invites = $this->inviteRepository->searchLike($searchQuery, true, 30);
$invites->setCollection($invites->getCollection()->map(function ($invite) {
return [
'id' => $invite->getId(),
'email' => $invite->getEmail(),
];
}));
return response()->json($invites);
}
}