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

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