thorpedosg

Untitled

Aug 6th, 2018
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
Add Comment
Please, Sign In to add comment