Guest User

Untitled

a guest
May 19th, 2017
496
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.24 KB | None | 0 0
  1. <?php
  2.  
  3. public function list(Request $request){
  4.  
  5. //validate the request
  6. $this->validate($request, [
  7. 'company_guid' => 'required|exists:companies,guid',
  8. 'per_page' => 'integer|between:5,100',//the user cant ask for more than 100 rows in 1 query
  9. 'sort_order' => 'in:asc,desc'
  10. ]);
  11.  
  12. //check if the token is valid
  13. if (! $user = JWTAuth::parseToken()->authenticate()) {
  14. return response()->json(['msg' => 'User not found'], 200);//404
  15. }
  16.  
  17. //set variables from the request
  18. $guid = $request->input('company_guid');
  19. $page = $request->input('page');
  20. $search_query = $request->input('search_query');
  21. $per_page = $request->input('per_page');
  22. $sort_by = $request->input('sort_by');
  23. $sort_order = $request->input('sort_order');
  24.  
  25. //check if page is set
  26. if($page == null || !is_numeric($page)){
  27. $page = 1;
  28. }
  29.  
  30. // check if table sort order is exsist, if not set default value "asc"
  31. if($sort_order == null){
  32. $sort_order = "asc";
  33. }
  34.  
  35. // check if sort by is set, if not set dafault value "name"
  36. if($sort_by == null){
  37. $sort_by = "name";
  38. }
  39.  
  40. //check if the column name is exsist in the table
  41. if(!Schema::hasColumn('clients', $sort_by)){
  42. $response = [
  43. 'error' => "$sort_by column is not exsist"
  44. ];
  45. return response()->json($response, 200);//201
  46. }
  47.  
  48. //check if the page number is real
  49. $itemCount = Company::where('guid',$guid)
  50. ->first()
  51. ->items()
  52. ->count();
  53.  
  54. $total_amount = $itemCount;
  55. $max_pages = ceil($total_amount/$per_page);
  56. if($page > $max_pages){
  57. $response = [
  58. 'error' => "page $page is invalid, the pages range is $page - $max_pages"
  59. ];
  60. return response()->json($response, 200);//201
  61. }
  62.  
  63. // check if per_page is set
  64. if($per_page == null || !is_numeric($per_page)){
  65. $per_page = 5;
  66. }
  67.  
  68. $company_id = Company::where('guid',$guid)->first()->pluck('id');
  69.  
  70. $itemQuery = Item::with('currency')->whereIn('company_id', $company_id);
  71.  
  72. if($search_query != ""){
  73. $itemQuery = $itemQuery->where(function($query) use ($search_query) {
  74. $query->where('name','LIKE','%'.$search_query.'%')
  75. ->orWhere('description','LIKE','%'.$search_query.'%')
  76. ->orWhere('price','LIKE','%'.$search_query.'%');
  77. });
  78.  
  79. $search_amount = $itemQuery->count();
  80. }
  81.  
  82. $itemQuery = $itemQuery->skip($per_page*($page-1))->take($per_page);
  83.  
  84. $itemQuery = $itemQuery->orderBy($sort_by, $sort_order);
  85.  
  86. $response = [
  87. 'total_amount' => $total_amount,
  88. 'rows' => $itemQuery->get()
  89. ];
  90.  
  91. if(isset($search_amount)){
  92. $response['search_amount'] = $search_amount;
  93. }
  94.  
  95. return response()->json($response, 200);//201
  96. }
Add Comment
Please, Sign In to add comment