You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					133 lines
				
				4.5 KiB
			
		
		
			
		
	
	
					133 lines
				
				4.5 KiB
			| 
								 
											2 years ago
										 
									 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace App\Http\Controllers\Api\V1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use App\CentralLogics\CategoryLogic;
							 | 
						||
| 
								 | 
							
								use App\CentralLogics\Helpers;
							 | 
						||
| 
								 | 
							
								use App\Http\Controllers\Controller;
							 | 
						||
| 
								 | 
							
								use App\Models\Category;
							 | 
						||
| 
								 | 
							
								use Illuminate\Http\Request;
							 | 
						||
| 
								 | 
							
								use Illuminate\Support\Facades\Validator;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class CategoryController extends Controller
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    public function get_categories(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            $name= $request->query('name');
							 | 
						||
| 
								 | 
							
								            $categories = Category::withCount('products')->with(['childes' => function($query)  {
							 | 
						||
| 
								 | 
							
								                $query->withCount('products');
							 | 
						||
| 
								 | 
							
								            }])
							 | 
						||
| 
								 | 
							
								            ->where(['position'=>0,'status'=>1])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            ->when($name, function($q)use($name){
							 | 
						||
| 
								 | 
							
								                $key = explode(' ', $name);
							 | 
						||
| 
								 | 
							
								                $q->where(function($q)use($key){
							 | 
						||
| 
								 | 
							
								                    foreach ($key as $value){
							 | 
						||
| 
								 | 
							
								                        $q->orWhere('name', 'like', '%'.$value.'%')->orWhere('slug', 'like', '%'.$value.'%');
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                    return $q;
							 | 
						||
| 
								 | 
							
								                });
							 | 
						||
| 
								 | 
							
								            })
							 | 
						||
| 
								 | 
							
								            ->orderBy('priority','desc')->get();
							 | 
						||
| 
								 | 
							
								            return response()->json(Helpers::category_data_formatting($categories, true), 200);
							 | 
						||
| 
								 | 
							
								        } catch (\Exception $e) {
							 | 
						||
| 
								 | 
							
								            return response()->json([$e->getMessage()], 200);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function get_childes($id)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            $categories = Category::when(is_numeric($id),function ($qurey) use($id){
							 | 
						||
| 
								 | 
							
								                $qurey->where(['parent_id' => $id,'status'=>1]);
							 | 
						||
| 
								 | 
							
								                })
							 | 
						||
| 
								 | 
							
								                ->when(!is_numeric($id),function ($qurey) use($id){
							 | 
						||
| 
								 | 
							
								                    $qurey->where(['slug' => $id,'status'=>1]);
							 | 
						||
| 
								 | 
							
								                })
							 | 
						||
| 
								 | 
							
								            ->orderBy('priority','desc')->get();
							 | 
						||
| 
								 | 
							
								            return response()->json(Helpers::category_data_formatting($categories, true), 200);
							 | 
						||
| 
								 | 
							
								        } catch (\Exception $e) {
							 | 
						||
| 
								 | 
							
								            return response()->json([], 200);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function get_products($id, Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if (!$request->hasHeader('zoneId')) {
							 | 
						||
| 
								 | 
							
								            $errors = [];
							 | 
						||
| 
								 | 
							
								            array_push($errors, ['code' => 'zoneId', 'message' => translate('messages.zone_id_required')]);
							 | 
						||
| 
								 | 
							
								            return response()->json([
							 | 
						||
| 
								 | 
							
								                'errors' => $errors
							 | 
						||
| 
								 | 
							
								            ], 403);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $validator = Validator::make($request->all(), [
							 | 
						||
| 
								 | 
							
								            'limit' => 'required',
							 | 
						||
| 
								 | 
							
								            'offset' => 'required',
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($validator->fails()) {
							 | 
						||
| 
								 | 
							
								            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $zone_id= json_decode($request->header('zoneId'), true);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $type = $request->query('type', 'all');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $data = CategoryLogic::products($id, $zone_id, $request['limit'], $request['offset'], $type);
							 | 
						||
| 
								 | 
							
								        $data['products'] = Helpers::product_data_formatting($data['products'] , true, false, app()->getLocale());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if(auth('api')->user() !== null){
							 | 
						||
| 
								 | 
							
								            $customer_id =auth('api')->user()->id;
							 | 
						||
| 
								 | 
							
								            Helpers::visitor_log('category',$customer_id,$id,false);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return response()->json($data, 200);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function get_restaurants($id, Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if (!$request->hasHeader('zoneId')) {
							 | 
						||
| 
								 | 
							
								            $errors = [];
							 | 
						||
| 
								 | 
							
								            array_push($errors, ['code' => 'zoneId', 'message' => translate('messages.zone_id_required')]);
							 | 
						||
| 
								 | 
							
								            return response()->json([
							 | 
						||
| 
								 | 
							
								                'errors' => $errors
							 | 
						||
| 
								 | 
							
								            ], 403);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $validator = Validator::make($request->all(), [
							 | 
						||
| 
								 | 
							
								            'limit' => 'required',
							 | 
						||
| 
								 | 
							
								            'offset' => 'required',
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($validator->fails()) {
							 | 
						||
| 
								 | 
							
								            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $zone_id= json_decode($request->header('zoneId'), true);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $type = $request->query('type', 'all');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $data = CategoryLogic::restaurants($id, $zone_id, $request['limit'], $request['offset'], $type);
							 | 
						||
| 
								 | 
							
								        $data['restaurants'] = Helpers::restaurant_data_formatting($data['restaurants'] , true);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // if(auth('api')->user() !== null){
							 | 
						||
| 
								 | 
							
								        //     $customer_id =auth('api')->user()->id;
							 | 
						||
| 
								 | 
							
								        //     Helpers::visitor_log('category',$customer_id,$id,false);
							 | 
						||
| 
								 | 
							
								        // }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return response()->json($data, 200);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function get_all_products($id,Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            return response()->json(Helpers::product_data_formatting(CategoryLogic::all_products($id), true, false, app()->getLocale()), 200);
							 | 
						||
| 
								 | 
							
								        } catch (\Exception $e) {
							 | 
						||
| 
								 | 
							
								            return response()->json([], 200);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |