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

<?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);
}
}