File size: 3,380 Bytes
0c117c4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
111
112
113
114
115
116
<?php

namespace App\Http\Controllers\ApiControllers\V1\Frontend;

use App\Http\Controllers\BaseController;

use App\Services\UserServices;
use App\Tranformers\UserResource\UserDetailResource;
use App\Tranformers\UserResource\UserListResource;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;

class UserController extends BaseController
{

    private $userServices;
    public function __construct(UserServices $userServices)
    {
        $this->userServices = $userServices;
        parent::__construct();
    }

	public function indexWishlist(Request $request)
    {
        $request['loadRelation'] = [
            "wishlists",
        ];
        $lists = $this->userServices->getAllWishlists($request);

		if ($lists instanceof \Illuminate\Pagination\LengthAwarePaginator){
            return (new UserListResource($lists))->additional([
            'totalPage' => $lists->total(),
            'lastPage' => $lists->lastPage(),
            'currentPage' => $lists->currentPage(),
            'perPage' => (int)$lists->perPage(),
			]);

        }
        return (new UserListResource($lists));

    }

	public function updateWishlist(Request $request,$customerId)
    {
		$info = $request->only([
            "room_types",
            "id",
        ]);

		DB::beginTransaction();
        try {
             $entity = $this->userServices->saveWishlists($request,$info);
            DB::commit();
            return $this->responseJson('success', Response::HTTP_OK, new UserDetailResource($entity));
        } catch (\Exception $e) {
            DB::rollback();
            return $this->responseJson('fail', Response::HTTP_INTERNAL_SERVER_ERROR, []);
        }

    }

	public function index(Request $request)
    {
        $request['loadRelation'] = [
            "bookings",
        ];
        $lists = $this->userServices->index($request);

		if ($lists instanceof \Illuminate\Pagination\LengthAwarePaginator){
            return (new UserListResource($lists))->additional([
            'totalPage' => $lists->total(),
            'lastPage' => $lists->lastPage(),
            'currentPage' => $lists->currentPage(),
            'perPage' => (int)$lists->perPage(),
			]);

        }
        return (new UserListResource($lists));

    }

    public function update(Request $request,$id)
    {
		$validator = Validator::make($request->all(), [
            'first_name' => 'required|string|between:2,100',
            'last_name' => 'required|string|between:2,100',
            'phone' => 'required|string|max:20|between:6,20',
        ]);

        if ($validator->fails()) {
            return $this->responseErrorJson("fail", Response::HTTP_CONFLICT, $validator->errors()->first());
        }

        $info = $request->only([
            "email",
            "first_name",
            "last_name",
            "phone",
			"birthday",
			"national"
        ]);
		$info['id'] = $id;
        DB::beginTransaction();
        try {
            $entity = $this->userServices->save($info);
            DB::commit();
            return $this->responseJson('success', Response::HTTP_OK, new UserDetailResource($entity));
        } catch (\Exception $e) {
            DB::rollback();
            return $this->responseJson('fail', Response::HTTP_INTERNAL_SERVER_ERROR, []);
        }
    }
}