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.
		
		
		
		
		
			
		
			
				
					
					
						
							229 lines
						
					
					
						
							9.1 KiB
						
					
					
				
			
		
		
	
	
							229 lines
						
					
					
						
							9.1 KiB
						
					
					
				<?php
 | 
						|
 | 
						|
namespace App\Http\Controllers\Api\V1;
 | 
						|
 | 
						|
use App\Models\Coupon;
 | 
						|
use App\Models\Review;
 | 
						|
use App\Models\Restaurant;
 | 
						|
use Illuminate\Http\Request;
 | 
						|
use App\CentralLogics\Helpers;
 | 
						|
use Illuminate\Support\Facades\DB;
 | 
						|
use App\Http\Controllers\Controller;
 | 
						|
use Illuminate\Support\Facades\Auth;
 | 
						|
use App\CentralLogics\RestaurantLogic;
 | 
						|
use Illuminate\Support\Facades\Validator;
 | 
						|
 | 
						|
class RestaurantController extends Controller
 | 
						|
{
 | 
						|
    public function get_restaurants(Request $request, $filter_data="all")
 | 
						|
    {
 | 
						|
        if (!$request->hasHeader('zoneId')) {
 | 
						|
            $errors = [];
 | 
						|
            array_push($errors, ['code' => 'zoneId', 'message' => translate('messages.zone_id_required')]);
 | 
						|
            return response()->json([
 | 
						|
                'errors' => $errors
 | 
						|
            ], 403);
 | 
						|
        }
 | 
						|
 | 
						|
        $longitude= $request->header('longitude');
 | 
						|
        $latitude= $request->header('latitude');
 | 
						|
        $type = $request->query('type', 'all');
 | 
						|
        $cuisine= $request->query('cuisine', 'all');
 | 
						|
        $name= $request->query('name');
 | 
						|
        $zone_id= json_decode($request->header('zoneId'), true);
 | 
						|
        $restaurants = RestaurantLogic::get_restaurants($zone_id, $filter_data, $request['limit'], $request['offset'],$type, $name,$longitude,$latitude,$cuisine);
 | 
						|
        $restaurants['restaurants'] = Helpers::restaurant_data_formatting($restaurants['restaurants'], true);
 | 
						|
 | 
						|
        return response()->json($restaurants, 200);
 | 
						|
    }
 | 
						|
 | 
						|
    public function get_latest_restaurants(Request $request, $filter_data="all")
 | 
						|
    {
 | 
						|
        if (!$request->hasHeader('zoneId')) {
 | 
						|
            $errors = [];
 | 
						|
            array_push($errors, ['code' => 'zoneId', 'message' => translate('messages.zone_id_required')]);
 | 
						|
            return response()->json([
 | 
						|
                'errors' => $errors
 | 
						|
            ], 403);
 | 
						|
        }
 | 
						|
 | 
						|
        $type = $request->query('type', 'all');
 | 
						|
        $longitude= $request->header('longitude');
 | 
						|
        $latitude= $request->header('latitude');
 | 
						|
        $zone_id= json_decode($request->header('zoneId'), true);
 | 
						|
        $restaurants = RestaurantLogic::get_latest_restaurants($zone_id, $request['limit'], $request['offset'], $type ,$longitude,$latitude);
 | 
						|
        $restaurants['restaurants'] = Helpers::restaurant_data_formatting($restaurants['restaurants'], true);
 | 
						|
 | 
						|
        return response()->json($restaurants['restaurants'], 200);
 | 
						|
    }
 | 
						|
 | 
						|
    public function get_popular_restaurants(Request $request)
 | 
						|
    {
 | 
						|
        if (!$request->hasHeader('zoneId')) {
 | 
						|
            $errors = [];
 | 
						|
            array_push($errors, ['code' => 'zoneId', 'message' => translate('messages.zone_id_required')]);
 | 
						|
            return response()->json([
 | 
						|
                'errors' => $errors
 | 
						|
            ], 403);
 | 
						|
        }
 | 
						|
        $longitude= $request->header('longitude');
 | 
						|
        $latitude= $request->header('latitude');
 | 
						|
        $type = $request->query('type', 'all');
 | 
						|
        $zone_id= json_decode($request->header('zoneId'), true);
 | 
						|
        $restaurants = RestaurantLogic::get_popular_restaurants($zone_id, $request['limit'], $request['offset'], $type,$longitude,$latitude);
 | 
						|
        $restaurants['restaurants'] = Helpers::restaurant_data_formatting($restaurants['restaurants'], true);
 | 
						|
 | 
						|
        return response()->json($restaurants['restaurants'], 200);
 | 
						|
    }
 | 
						|
    public function recently_viewed_restaurants(Request $request)
 | 
						|
    {
 | 
						|
        if (!$request->hasHeader('zoneId')) {
 | 
						|
            $errors = [];
 | 
						|
            array_push($errors, ['code' => 'zoneId', 'message' => translate('messages.zone_id_required')]);
 | 
						|
            return response()->json([
 | 
						|
                'errors' => $errors
 | 
						|
            ], 403);
 | 
						|
        }
 | 
						|
        $longitude= $request->header('longitude');
 | 
						|
        $latitude= $request->header('latitude');
 | 
						|
        $type = $request->query('type', 'all');
 | 
						|
        $zone_id= json_decode($request->header('zoneId'), true);
 | 
						|
        $restaurants = RestaurantLogic::recently_viewed_restaurants_data($zone_id, $request['limit'], $request['offset'], $type,$longitude,$latitude);
 | 
						|
        $restaurants['restaurants'] = Helpers::restaurant_data_formatting($restaurants['restaurants'], true);
 | 
						|
 | 
						|
        return response()->json($restaurants['restaurants'], 200);
 | 
						|
    }
 | 
						|
 | 
						|
    public function get_details($id)
 | 
						|
    {
 | 
						|
        $restaurant = RestaurantLogic::get_restaurant_details($id);
 | 
						|
        if($restaurant)
 | 
						|
        {
 | 
						|
            $category_ids = DB::table('food')
 | 
						|
            ->join('categories', 'food.category_id', '=', 'categories.id')
 | 
						|
            ->selectRaw('IF((categories.position = "0"), categories.id, categories.parent_id) as categories')
 | 
						|
            ->where('food.restaurant_id', $id)
 | 
						|
            ->where('categories.status',1)
 | 
						|
            ->groupBy('categories')
 | 
						|
            ->get();
 | 
						|
            $restaurant = Helpers::restaurant_data_formatting($restaurant);
 | 
						|
            $restaurant['category_ids'] = array_map('intval', $category_ids->pluck('categories')->toArray());
 | 
						|
 | 
						|
            if(auth('api')->user() !== null){
 | 
						|
                $customer_id =auth('api')->user()->id;
 | 
						|
                Helpers::visitor_log('restaurant',$customer_id,$restaurant->id,false);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return response()->json($restaurant, 200);
 | 
						|
    }
 | 
						|
 | 
						|
    public function get_searched_restaurants(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(), [
 | 
						|
            'name' => 'required',
 | 
						|
        ]);
 | 
						|
 | 
						|
        if ($validator->fails()) {
 | 
						|
            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
 | 
						|
        }
 | 
						|
 | 
						|
        $type = $request->query('type', 'all');
 | 
						|
        $longitude= $request->header('longitude');
 | 
						|
        $latitude= $request->header('latitude');
 | 
						|
        $zone_id= json_decode($request->header('zoneId'), true);
 | 
						|
        $restaurants = RestaurantLogic::search_restaurants($request['name'], $zone_id, $request->category_id,$request['limit'], $request['offset'], $type,$longitude,$latitude);
 | 
						|
        $restaurants['restaurants'] = Helpers::restaurant_data_formatting($restaurants['restaurants'], true);
 | 
						|
        return response()->json($restaurants, 200);
 | 
						|
    }
 | 
						|
 | 
						|
    public function reviews(Request $request)
 | 
						|
    {
 | 
						|
        $validator = Validator::make($request->all(), [
 | 
						|
            'restaurant_id' => 'required',
 | 
						|
        ]);
 | 
						|
 | 
						|
        if ($validator->fails()) {
 | 
						|
            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
 | 
						|
        }
 | 
						|
        $id = $request['restaurant_id'];
 | 
						|
 | 
						|
 | 
						|
        $reviews = Review::with(['customer', 'food'])
 | 
						|
        ->whereHas('food', function($query)use($id){
 | 
						|
            return $query->where('restaurant_id', $id);
 | 
						|
        })
 | 
						|
        ->active()->latest()->get();
 | 
						|
 | 
						|
        $storage = [];
 | 
						|
        foreach ($reviews as $item) {
 | 
						|
            $item['attachment'] = json_decode($item['attachment']);
 | 
						|
            $item['food_name'] = null;
 | 
						|
            $item['food_image'] = null;
 | 
						|
            $item['customer_name'] = null;
 | 
						|
            if($item->food)
 | 
						|
            {
 | 
						|
                $item['food_name'] = $item->food->name;
 | 
						|
                $item['food_image'] = $item->food->image;
 | 
						|
                if(count($item->food->translations)>0)
 | 
						|
                {
 | 
						|
                    $translate = array_column($item->food->translations->toArray(), 'value', 'key');
 | 
						|
                    $item['food_name'] = $translate['name'];
 | 
						|
                }
 | 
						|
            }
 | 
						|
            if($item->customer)
 | 
						|
            {
 | 
						|
                $item['customer_name'] = $item->customer->f_name.' '.$item->customer->l_name;
 | 
						|
            }
 | 
						|
 | 
						|
            unset($item['food']);
 | 
						|
            unset($item['customer']);
 | 
						|
            array_push($storage, $item);
 | 
						|
        }
 | 
						|
 | 
						|
        return response()->json($storage, 200);
 | 
						|
    }
 | 
						|
 | 
						|
    // public function get_product_rating($id)
 | 
						|
    // {
 | 
						|
    //     try {
 | 
						|
    //         $product = Food::find($id);
 | 
						|
    //         $overallRating = ProductLogic::get_overall_rating($product->reviews);
 | 
						|
    //         return response()->json(floatval($overallRating[0]), 200);
 | 
						|
    //     } catch (\Exception $e) {
 | 
						|
    //         return response()->json(['errors' => $e], 403);
 | 
						|
    //     }
 | 
						|
    // }
 | 
						|
 | 
						|
    public function get_coupons(Request $request){
 | 
						|
 | 
						|
        $validator = Validator::make($request->all(), [
 | 
						|
            'restaurant_id' => 'required',
 | 
						|
        ]);
 | 
						|
        if ($validator->fails()) {
 | 
						|
            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
 | 
						|
        }
 | 
						|
        $restaurant_id=$request->restaurant_id;
 | 
						|
        $customer_id=$request->customer_id;
 | 
						|
 | 
						|
        $coupons = Coupon::Where(function ($q) use ($restaurant_id,$customer_id) {
 | 
						|
            $q->Where('coupon_type', 'restaurant_wise')->whereJsonContains('data', [$restaurant_id])
 | 
						|
                ->where(function ($q1) use ($customer_id) {
 | 
						|
                    $q1->whereJsonContains('customer_id', [$customer_id])->orWhereJsonContains('customer_id', ['all']);
 | 
						|
                });
 | 
						|
        })->orWhereHas('restaurant',function($q) use ($restaurant_id){
 | 
						|
            $q->where('id',$restaurant_id);
 | 
						|
        })
 | 
						|
        ->active()->whereDate('expire_date', '>=', date('Y-m-d'))->whereDate('start_date', '<=', date('Y-m-d'))
 | 
						|
        ->get();
 | 
						|
        return response()->json($coupons, 200);
 | 
						|
    }
 | 
						|
 | 
						|
}
 | 
						|
 |