SHOW:
|
|
- or go back to the newest paste.
| 1 | <?php | |
| 2 | ||
| 3 | namespace App\Directory\Http\Responses; | |
| 4 | ||
| 5 | use App\Account\Transformers\AccountTransformer; | |
| 6 | use Illuminate\Contracts\Support\Responsable; | |
| 7 | use Illuminate\Database\Eloquent\Builder; | |
| 8 | ||
| 9 | class FindPeopleResponse implements Responsable | |
| 10 | {
| |
| 11 | /** | |
| 12 | * @var \Illuminate\Database\Eloquent\Builder | |
| 13 | */ | |
| 14 | private $users; | |
| 15 | ||
| 16 | /** | |
| 17 | * FindPeopleResponse constructor. | |
| 18 | * | |
| 19 | * @param \Illuminate\Database\Eloquent\Builder $users | |
| 20 | */ | |
| 21 | public function __construct(Builder $users) | |
| 22 | {
| |
| 23 | $this->users = $users; | |
| 24 | } | |
| 25 | ||
| 26 | /** | |
| 27 | * @param \Illuminate\Http\Request $request | |
| 28 | * | |
| 29 | * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Response | |
| 30 | */ | |
| 31 | public function toResponse($request) | |
| 32 | {
| |
| 33 | if ($request->isJson() || $request->wantsJson() || $request->ajax()) {
| |
| 34 | return response()->json($this->mergeInfo()); | |
| 35 | } | |
| 36 | ||
| 37 | return response()->view('directory::find-people');
| |
| 38 | } | |
| 39 | ||
| 40 | /** | |
| 41 | * Merge all the information for the response | |
| 42 | * | |
| 43 | * @return array | |
| 44 | */ | |
| 45 | private function mergeInfo(): array | |
| 46 | {
| |
| 47 | return array_merge( | |
| 48 | $this->getPeople(), | |
| 49 | $this->getMeta() | |
| 50 | ); | |
| 51 | } | |
| 52 | ||
| 53 | /** | |
| 54 | * Transform the users | |
| 55 | * | |
| 56 | * @return array | |
| 57 | */ | |
| 58 | private function getPeople(): array | |
| 59 | {
| |
| 60 | return ['people' => $this->users->paginate(20) | |
| 61 | ->getCollection() | |
| 62 | ->map(function ($user) {
| |
| 63 | return (new AccountTransformer)->transform($user); | |
| 64 | }) | |
| 65 | ->toArray()]; | |
| 66 | } | |
| 67 | ||
| 68 | ||
| 69 | /** | |
| 70 | * Returns the routes and meta information | |
| 71 | * | |
| 72 | * @return array | |
| 73 | */ | |
| 74 | private function getMeta(): array | |
| 75 | {
| |
| 76 | return ['meta' => [ | |
| 77 | 'counts' => [ | |
| 78 | 'results' => $this->users->count() | |
| 79 | ], | |
| 80 | 'routes' => [ | |
| 81 | 'search' => route('find.people')
| |
| 82 | ] | |
| 83 | ]]; | |
| 84 | } | |
| 85 | } |