| 
<?php
 namespace App\Http\Controllers;
 
 use App\Models\User;
 use App\Transformers\TransactionsTransformer;
 use App\Transformers\UserTransformer;
 use Illuminate\Http\Request;
 
 class UserController extends Controller
 {
 /**
 * get all users
 *
 */
 public function index()
 {
 return response()->json(
 fractal()
 ->collection(User::withTrashed()->get())
 ->transformWith(new UserTransformer())
 ->toArray()['data']
 );
 }
 
 /**
 * get logged-in user details
 * @param  Request  $request
 * @return \Illuminate\Http\JsonResponse
 */
 public function me(Request $request)
 {
 $data =fractal()
 ->item($request->user())
 ->transformWith(new UserTransformer())
 ->parseIncludes('wallet')
 ->toArray()['data'];
 
 return response()->json($data);
 }
 
 /**
 * get specified user details
 * @param  User  $user
 */
 public function details(User $user)
 {
 $data = fractal()
 ->item($user)
 ->transformWith(new UserTransformer())
 ->toArray()['data'];
 
 return $this->sendResponse($data);
 }
 
 /**
 * block or unblock user
 * @param  Request  $request
 */
 public function blockUnblock(Request $request)
 {
 $user = User::withTrashed()->where('email', $request->email)->first();
 if ($user === null)
 return $this->sendError(['user not found']);
 $user->deleted_at === null  ?
 $user->delete() :
 $user->restore();
 
 return $this->sendResponse(['ok']);
 }
 
 /**
 * user transactions
 */
 
 /**
 * get all user transactions
 * @param  Request  $request
 * @return \Illuminate\Http\JsonResponse
 */
 public function allTransaction(Request  $request)
 {
 return response()->json(
 fractal()
 ->collection(auth()->user()->wallet->transactions()->get())
 ->transformWith(new TransactionsTransformer())
 ->toArray()['data']
 );
 }
 
 /**
 * get approved transaction for user
 * @param  Request  $request
 * @return \Illuminate\Http\JsonResponse
 */
 public function approved(Request $request)
 {
 return response()->json(
 fractal()
 ->collection($request->user()->wallet->transactions()->approved())
 ->transformWith(new TransactionsTransformer())
 ->toArray()['data']
 );
 }
 
 /**
 * get declined transactions for user
 * @param  Request  $request
 * @return \Illuminate\Http\JsonResponse
 */
 public function declined(Request $request)
 {
 return response()->json(
 fractal()
 ->collection($request->user()->wallet->transactions()->declined())
 ->transformWith(new TransactionsTransformer())
 ->toArray()['data']
 );
 }
 
 /**
 * get pending transactions for user
 * @param  Request  $request
 * @return \Illuminate\Http\JsonResponse
 */
 public function pending(Request $request)
 {
 return response()->json(
 fractal()
 ->collection($request->user()->wallet->transactions()->waiting())
 ->transformWith(new TransactionsTransformer())
 ->toArray()['data']
 );
 }
 }
 
 |