View difference between Paste ID: LCA8Jikd and QaPk0jaB
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
}