Viewing File: /home/ubuntu/vedadeals-backend-base/app/Http/Controllers/Api/ProductApiController.php
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Helpers\Helper;
use DB, Exception, Setting, stdClass, CountryState;
use Carbon\Carbon;
use App\Models\{ User, Product, Cart, Wishlist, DeliveryAddress, Review, ReviewFile, Country };
use Illuminate\Validation\Rule;
use App\Http\Resources\{ ProductResource, CartResource, DeliveryAddressResource, ReviewResource, ReviewFileResource, CountryResource };
use Illuminate\Support\Facades\Cache;
use App\Services\{ ProductService, OrderService, EmailService };
use Illuminate\Support\Str;
class ProductApiController extends Controller
{
protected $loginUser;
protected $skip, $take;
public function __construct(Request $request) {
info(url()->current());
info("Request Data".print_r($request->all(), true));
$this->loginUser = User::find($request->id);
$this->skip = $request->skip ?: 0;
$this->take = $request->take ?: (Setting::get('admin_take_count') ?: TAKE_COUNT);
$this->timezone = $this->loginUser->timezone ?? "America/New_York";
$request->request->add(['timezone' => $this->timezone ? : "America/New_York"]);
}
/**
* @method products_list()
*
* @uses to get all available products list
*
* @created Karthick
*
* @updated
*
* @param
*
* @return
*/
public function products_list(Request $request) {
try {
$rules = [ 'from' => ['nullable', 'numeric'], 'to' => ['nullable', 'numeric', 'gt:'.$request->from] ];
$custom_errors = ['to.gt' => api_error(137)];
Helper::custom_validator($request->all(), $rules, $custom_errors);
$base_query = Product::Available()->withCount(['orderProducts'])->withAvg('reviews', 'star')
->with(['category:id,name', 'subCategory:id,name', 'discount']);
if($request->filled('search_key')) {
$base_query->where(function($query) use ($request) {
$query->where('name', "LIKE", "%{$request->search_key}%");
});
}
if($request->filled('category_id')) {
if(!Str::startsWith($request->category_id, '[') || !Str::endsWith($request->category_id, ']')) {
throw new Exception(api_error(130), 130);
}
$category_ids = json_decode($request->category_id, true);
$base_query = $base_query->whereIn('category_id', $category_ids);
}
if($request->filled('sub_category_id')) {
if(!Str::startsWith($request->sub_category_id, '[') || !Str::endsWith($request->sub_category_id, ']')) {
throw new Exception(api_error(130), 130);
}
$sub_category_ids = json_decode($request->sub_category_id, true);
$base_query = $base_query->whereIn('sub_category_id', $sub_category_ids);
}
if($request->filled('stock_status')) {
$base_query = $base_query->where('stock_status', $request->stock_status);
}
if($request->filled('from') && $request->filled('to')) {
$base_query = $base_query->whereBetween('price', [$request->from, $request->to]);
}
switch($request->order_by) {
case ORDER_BY_NEWEST:
$base_query->orderBy('updated_at', 'desc');
break;
case ORDER_BY_OLDEST:
$base_query->orderBy('updated_at', 'asc');
break;
case ORDER_BY_PRICE_HIGH_TO_LOW:
$base_query->orderBy('price', 'desc');
break;
case ORDER_BY_PRICE_LOW_TO_HIGH:
$base_query->orderBy('price', 'asc');
break;
default:
$base_query->orderBy('updated_at', 'desc');
break;
}
$data['total_products'] = $base_query->count();
$data['total_out_of_stock_products'] = (clone $base_query)->where(['stock_status' => OUT_OF_STOCK])->count();
$data['total_in_stock_products'] = $data['total_products'] - $data['total_out_of_stock_products'];
$products = $base_query->skip($this->skip)->take($this->take)->get();
$data['products'] = ProductResource::collection($products);
return $this->sendResponse("", "", $data);
} catch (Exception $e) {
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method products_view()
*
* @uses to view a product details based on product_unique_id
*
* @created Karthick
*
* @updated
*
* @param
*
* @return
*/
public function products_view(Request $request) {
try {
$rules = [ 'product_unique_id' => ['required', 'exists:products,unique_id'] ];
$custom_errors = ['exists' => api_error(1009, strtolower(tr('product')))];
Helper::custom_validator($request->all(), $rules, $custom_errors);
$product = Product::Available()->withAvg('reviews', 'star')
->withCount(['orderProducts'])
->with(['category:id,name', 'subCategory:id,name', 'productFiles.product:id,name', 'productInventory'])
->firstWhere('unique_id', $request->product_unique_id);
if(!$product) {
throw new Exception(api_error(1009, strtolower(tr('product'))));
}
$request->request->add(['decimal' => 2]);
$data['product'] = new ProductResource($product);
return $this->sendResponse("", "", $data);
} catch (Exception $e) {
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method wishlists_save()
*
* @uses to add / remove product from wishlists.
*
* @created Karthick
*
* @updated
*
* @param product_id
*
* @return success / failure message
*/
public function wishlists_save(Request $request) {
try {
$rules = [ 'product_unique_id' => ['required', 'exists:products,unique_id'] ];
$custom_errors = ['exists' => api_error(1009, strtolower(tr('product')))];
Helper::custom_validator($request->all(), $rules, $custom_errors);
$product = Product::Available()->firstWhere('unique_id', $request->product_unique_id);
if(!$product) {
throw new Exception(api_error(1009, strtolower(tr('product'))));
}
DB::beginTransaction();
$wishlist = Wishlist::firstOrCreate(['user_id' => $request->id, 'product_id' => $product->id]);
if($wishlist->wasRecentlyCreated) {
$success_code = 137;
} else {
$wishlist->delete();
$success_code = 138;
}
DB::commit();
Helper::cache_update_for_products($request->id, WISHLIST);
$data['is_wishlisted'] = $success_code == 137 ? YES : NO;
$data['product_unique_id'] = $request->product_unique_id;
return $this->sendResponse(api_success($success_code), $success_code , $data);
throw new Exception(api_error(104), 104);
} catch (Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method wishlists_list()
*
* @uses to get all Wishlist details of user
*
* @created Arun
*
* @updated
*
* @param
*
* @return
*/
public function wishlists_list(Request $request) {
try {
$product_ids = Wishlist::where('user_id', $request->id)->orderBy('updated_at', 'desc')->pluck('product_id');
$base_query = Product::whereIn('id', $product_ids)->Available()->withCount(['orderProducts'])
->withAvg('reviews', 'star')
->with(['category:id,name', 'subCategory:id,name']);
$data['total_products'] = $base_query->count();
$products = $base_query->skip($this->skip)->take($this->take)->get();
$data['products'] = ProductResource::collection($products);
return $this->sendResponse("", "", $data);
} catch (Exception $e) {
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method delivery_addresses_save()
*
* @uses to create / update delivery address details
*
* @created Karthick
*
* @updated
*
* @param object $request
*
* @return JSON response with delivery address details
*/
public function delivery_addresses_save(Request $request) {
try {
DB::beginTransaction();
$request->request->add(['user_id' => $request->id]);
$rules = [
'delivery_address_id' => 'nullable|exists:delivery_addresses,id,user_id,'.$request->id.'|exclude',
'user_id' => 'exists:users,id',
'name' => 'required|max:250',
'address' => 'required|max:250',
'pincode' => 'required|regex:/^[1-9][0-9]{5}$/',
'city' => 'required|max:250',
'state' => 'required|max:50',
'country' => 'required|max:50',
'landmark' => 'required|max:250',
'contact_number' => 'required|digits_between:6,13'
];
$custom_errors = ['exists' => api_error(123), 123];
$validated = Helper::custom_validator($request->all(), $rules, $custom_errors);
$availability = ProductService::check_country_availability($request->state, $request->country, COUNTRY);
if(!$availability['is_available']) {
throw new Exception($availability['availability_msg']);
}
$delivery_addresses = DeliveryAddress::where(['user_id' => $request->id, 'is_default' => YES])->exists();
$delivery_address = DeliveryAddress::updateOrCreate(['id' => $request->delivery_address_id], $validated);
if($delivery_address) {
!$delivery_addresses && $delivery_address->update(['is_default' => YES]);
$delivery_address->refresh();
DB::commit();
}
$success_code = $request->delivery_address_id ? 140 : 139;
return $this->sendResponse(api_success($success_code), $success_code, new DeliveryAddressResource($delivery_address));
} catch(Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method delivery_addresses_list()
*
* @uses to get all delivery address details of user
*
* @created Karthick
*
* @updated
*
* @param
*
* @return
*/
public function delivery_addresses_list(Request $request) {
try {
$base_query = DeliveryAddress::where('user_id', $request->id)->latest('is_default')->latest('updated_at');
$data['total_delivery_addresses'] = $base_query->count();
$delivery_addresses = $base_query->skip($this->skip)->take($this->take)->get();
$data['delivery_addresses'] = DeliveryAddressResource::collection($delivery_addresses);
return $this->sendResponse("", "", $data);
} catch (Exception $e) {
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method delivery_addresses_make_default()
*
* @uses to make an delivery address as default
*
* @created Karthick
*
* @updated
*
* @param delivery_address_id
*
* @return success / failure message
*/
public function delivery_addresses_make_default(Request $request) {
try {
$rules = ['delivery_address_id' => ['required', 'exists:delivery_addresses,id,user_id,'.$request->id]];
$custom_errors = ['exists' => api_error(123)];
$validated = Helper::custom_validator($request->all(), $rules, $custom_errors);
DB::beginTransaction();
$delivery_address = DeliveryAddress::find($request->delivery_address_id);
Helper::check_model_exists($delivery_address->id ?? '', DELIVERY_ADDRESS);
if($delivery_address->is_default == YES) {
throw new Exception(api_error(124), 124);
}
$old_default_billing_account = DeliveryAddress::where(['user_id' => $request->id, 'is_default' => YES])->update(['is_default' => NO]);
$result = $delivery_address->update(['is_default' => YES]);
if($result && $old_default_billing_account) {
DB::commit();
$data['delivery_address'] = $delivery_address;
return $this->sendResponse(api_success(141), 141 , $data);
}
throw new Exception(api_error(104), 104);
} catch (Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method delivery_addresses_view()
*
* @uses to get the details of an delivery details based on delivery_address_unique_id
*
* @created Karthick
*
* @updated
*
* @param delivery_address_unique_id
*
* @return delivery address details.
*/
public function delivery_addresses_view(Request $request) {
try {
$rules = [ 'delivery_address_unique_id' => ['required', 'exists:delivery_addresses,unique_id,user_id,'.$request->id] ];
$custom_errors = ['exists' => api_error(1009, tr('delivery_address'))];
Helper::custom_validator($request->all(), $rules);
$delivery_address = DeliveryAddress::firstWhere('unique_id', $request->delivery_address_unique_id);
Helper::check_model_exists($delivery_address->id ?? '', DELIVERY_ADDRESS);
$data['delivery_address'] = new DeliveryAddressResource($delivery_address);
return $this->sendResponse("", "", $data);
} catch (Exception $e) {
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method delivery_addresses_delete()
*
* @uses to delete a delivery address
*
* @created Karthick
*
* @updated
*
* @param delivery_address_id
*
* @return success / failure message
*/
public function delivery_addresses_delete(Request $request) {
try {
$rules = ['delivery_address_id' => ['required', 'exists:delivery_addresses,id,user_id,'.$request->id]];
$custom_errors = ['exists' => api_error(123)];
$validated = Helper::custom_validator($request->all(), $rules, $custom_errors);
DB::beginTransaction();
$delivery_address = DeliveryAddress::find($request->delivery_address_id);
Helper::check_model_exists($delivery_address->id ?? '', DELIVERY_ADDRESS);
if($delivery_address->is_default == YES) {
$new_default_billing_account = DeliveryAddress::firstWhere(['user_id' => $request->id, 'is_default' => NO]);
if($new_default_billing_account) {
$new_default_billing_account->update(['is_default' => YES]);
}
}
$result = $delivery_address->delete();
if($result) {
DB::commit();
return $this->sendResponse(api_success(142), 142, '');
}
} catch (Exception $e) {
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method carts_list()
*
* @uses to get all carts details of user
*
* @created Karthick
*
* @updated
*
* @param
*
* @return
*/
public function carts_list(Request $request) {
try {
$base_query = Cart::has('product')->with(['product'])->where('user_id', $request->id)->orderBy('updated_at', 'desc');
$data['total_carts'] = $base_query->count();
$carts = $base_query->get();
$data['carts'] = CartResource::collection($carts);
$data['user_cart_amount'] = ProductService::get_user_cart_amount($request->id);
$data['availability'] = ProductService::check_country_availability($request->state ? : $this->loginUser->state ?? '', $request->country_code ? : $this->loginUser->country_code ?? '', COUNTRY_CODE);
return $this->sendResponse("", "", $data);
} catch (Exception $e) {
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method carts_save()
*
* @uses to create / update product from user carts list.
*
* @created Karthick
*
* @updated
*
* @param product_id, quantity
*
* @return success / failure message
*/
public function carts_save(Request $request) {
try {
$rules = [
'product_id' => [Rule::requiredIf(!$request->carts), 'exists:products,id'],
'quantity' => [Rule::requiredIf(!$request->carts), 'numeric', 'min:1'],
];
$custom_errors = ['exists' => api_error(1009, strtolower(tr('product')))];
Helper::custom_validator($request->all(), $rules, $custom_errors);
if($request->product_id && $request->quantity) {
$product = Product::Available()->find($request->product_id);
ProductService::products_base_validations($product, $request->quantity);
DB::beginTransaction();
$cart = Cart::updateOrCreate(['user_id' => $request->id, 'product_id' => $product->id], [ 'quantity' => $request->quantity ]);
$success_code = $cart->wasRecentlyCreated ? 135 : 136;
} elseif($request->carts) {
$carts_data = json_decode($request->carts);
if(!$carts_data) {
throw new Exception(api_error(136), 136);
}
DB::beginTransaction();
foreach($carts_data as $cart_data) {
$product = Product::Available()->find($cart_data->product_id);
ProductService::products_base_validations($product, $cart_data->quantity);
$cart = Cart::updateOrCreate(['user_id' => $request->id, 'product_id' => $product->id], [ 'quantity' => $cart_data->quantity ]);
$success_code = 135;
}
}
if($cart) {
DB::commit();
Helper::cache_update_for_products($request->id, CART);
$data['cart_count'] = Cart::has('product')->where('user_id', $request->id)->count();
$data['cart'] = new CartResource($cart);
$data['user_cart_amount'] = ProductService::get_user_cart_amount($request->id);
return $this->sendResponse(api_success($success_code), $success_code , $data);
}
throw new Exception(api_error(104), 104);
} catch (Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method carts_delete()
*
* @uses to delete a cart
*
* @created Karthick
*
* @updated
*
* @param product_id
*
* @return success / failure message
*/
public function carts_delete(Request $request) {
try {
$rules = [ 'product_id' => ['required', 'exists:products,id'] ];
$custom_errors = ['exists' => api_error(1009, strtolower(tr('product')))];
Helper::custom_validator($request->all(), $rules, $custom_errors);
$product = Product::Available()->find($request->product_id);
if(!$product) {
throw new Exception(api_error(1009, strtolower(tr('product'))));
}
$cart = Cart::firstWhere(['user_id' => $request->id, 'product_id' => $product->id]);
if(!$cart) {
throw new Exception(api_error(125), 125);
}
$result = $cart->delete();
if($result) {
DB::commit();
Helper::cache_update_for_products($request->id, CART);
$data['cart_count'] = Cart::has('product')->where('user_id', $request->id)->count();
$data['user_cart_amount'] = ProductService::get_user_cart_amount($request->id);
return $this->sendResponse(api_success(143), 143, $data);
}
throw new Exception(api_error(104), 104);
} catch (Exception $e) {
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method reviews_save()
*
* @uses to post a review for an product
*
* @created Karthick
*
* @updated
*
* @param
*
* @note review_file_ids format example : [1,2,3]
*
* @return success / failure message
*/
public function reviews_save(Request $request) {
try {
$request->request->add(['user_id' => $request->id]);
$rules = [
'review_id' => ['nullable', 'exists:reviews,id', 'exclude'],
'product_id' => ['required', 'exists:products,id'],
'user_id' => ['nullable', 'exists:users,id'],
'review' => ['nullable'],
'star' => ['required', 'numeric', 'min:0' ,'max:5'],
'review_file_ids' => ['nullable', 'exclude']
];
$custom_errors = [
'product_id.exists' => api_error(1009, strtolower(tr('product'))),
'user_id.exists' => api_error(1009, strtolower(tr('user')))
];
$validated = Helper::custom_validator($request->all(), $rules, $custom_errors);
DB::beginTransaction();
$review = Review::updateOrCreate(['id' => $request->review_id], $validated);
if(!$review) {
throw new Exception(api_error(104), 104);
}
if($request->review_file_ids) {
if(!Str::startsWith($request->review_file_ids, '[') || !Str::endsWith($request->review_file_ids, ']')) {
throw new Exception(api_error(130), 130);
}
$review_file_ids = json_decode($request->review_file_ids, true);
foreach($review_file_ids as $review_file_id) {
$review_file = ReviewFile::find($review_file_id);
if(!$review_file) {
throw new Exception(api_error(132), 132);
}
if($review_file->review_id) {
throw new Exception(api_error(131), 131);
}
$review_file->update(['review_id' => $review->id]);
}
}
DB::commit();
$success_code = $review->wasRecentlyCreated ? 145 : 148;
$review = Review::with(['reviewFiles', 'product', 'user'])->firstWhere(['id' => $review->id]);
$data['review'] = new ReviewResource($review);
$reviews_avg_star = Review::where(['product_id' => $review->product_id])->avg('star');
$data['review_stars'] = number_format($reviews_avg_star, 1);
return $this->sendResponse(api_success($success_code), $success_code , $data);
} catch (Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method review_files_save()
*
* @uses to upload a file while adding review
*
* @created Karthick
*
* @updated
*
* @param
*
* @return success / failure message
*/
public function review_files_save(Request $request) {
try {
$rules = [ 'file' =>['required', 'mimes:jpg,png,jpeg,mp4'] ];
$custom_errors = [ 'mimes' => 'The file must be a type of: :values.' ];
$validated = Helper::custom_validator($request->all(), $rules, $custom_errors);
DB::beginTransaction();
$file = $request->file;
$file_url = Helper::storage_upload_file($file, REVIEW_FILE_PATH);
$file_type = in_array($file->getClientOriginalExtension(), ['jpg', 'jpeg', 'png']) ? IMAGE : VIDEO;
$review_file = ReviewFile::Create(['file' => $file_url, 'file_type' => $file_type]);
if(!$review_file) {
throw new Exception(api_error(104), 104);
}
DB::commit();
return $this->sendResponse(api_success(146), 146 , $review_file);
} catch (Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method review_files_delete()
*
* @uses to delete a reviews file.
*
* @created Karthick
*
* @updated
*
* @param
*
* @return success / failure message
*/
public function review_files_delete(Request $request) {
try {
$rules = [ 'review_file_id' => ['required', 'exists:review_files,id'] ];
$validated = Helper::custom_validator($request->all(), $rules);
DB::beginTransaction();
$review_file = ReviewFile::find($request->review_file_id);
if($review_file->delete()) {
DB::commit();
return $this->sendResponse(api_success(147), 147);
}
throw new Exception(api_error(104), 104);
} catch (Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method product_reviews()
*
* @uses to get all the reviews of an product
*
* @created Karthick
*
* @updated
*
* @param
*
* @return
*/
public function product_reviews(Request $request) {
try {
$rules = [ 'product_unique_id' => ['required', 'exists:products,unique_id'] ];
$custom_errors = ['exists' => api_error(1009, strtolower(tr('product')))];
Helper::custom_validator($request->all(), $rules, $custom_errors);
$product = Product::Available()->firstWhere(['unique_id' => $request->product_unique_id]);
if(!$product) {
throw new Exception(api_error(1009, strtolower(tr('product'))));
}
$base_query = Review::with(['reviewFiles', 'user'])->where(['product_id' => $product->id])->orderBy('updated_at', 'desc');
$data['total_reviews'] = $base_query->count();
$reviews = $base_query->skip($this->skip)->take($this->take)->get();
$data['reviews'] = ReviewResource::collection($reviews);
return $this->sendResponse("", "", $data);
} catch (Exception $e) {
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method product_review_files()
*
* @uses to get all the files of a reviews (Only Files)
*
* @created Karthick
*
* @updated
*
* @param
*
* @return
*/
public function product_review_files(Request $request) {
try {
$rules = [ 'product_unique_id' => ['required', 'exists:products,unique_id'] ];
$custom_errors = ['exists' => api_error(1009, strtolower(tr('product')))];
Helper::custom_validator($request->all(), $rules, $custom_errors);
$product = Product::Available()->firstWhere(['unique_id' => $request->product_unique_id]);
if(!$product) {
throw new Exception(api_error(1009, strtolower(tr('product'))));
}
$review_ids = Review::where(['product_id' => $product->id])->pluck('id');
$base_query = ReviewFile::whereIn('review_id', $review_ids)->orderBy('updated_at', 'desc');
$data['total_review_files'] = $base_query->count();
$review_files = $base_query->skip($this->skip)->take($this->take)->get();
$data['review_files'] = ReviewFileResource::collection($review_files);
return $this->sendResponse("", "", $data);
} catch (Exception $e) {
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method reviews_list()
*
* @uses to get all the reviews of an user
*
* @created Karthick
*
* @updated
*
* @param
*
* @return
*/
public function reviews_list(Request $request) {
try {
$base_query = Review::with(['reviewFiles', 'product.category:id,name', 'product.discount:id,discount_type,discount'])
->where(['user_id' => $request->id])
->orderBy('updated_at', 'desc');
$data['total_reviews'] = $base_query->count();
$reviews = $base_query->skip($this->skip)->take($this->take)->get();
$data['reviews'] = ReviewResource::collection($reviews);
return $this->sendResponse("", "", $data);
} catch (Exception $e) {
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method reviews_delete()
*
* @uses to delete a review
*
* @created Karthick
*
* @updated
*
* @param review_id
*
* @return success / failure message
*/
public function reviews_delete(Request $request) {
try {
$rules = [ 'review_id' => ['sometimes', 'exists:reviews,id,user_id,'.$request->id] ];
$custom_errors = ['exists' => api_error(1009, strtolower(tr('review')))];
Helper::custom_validator($request->all(), $rules, $custom_errors);
DB::beginTransaction();
$review = Review::find($request->review_id);
if(!$review) {
throw new Exception(api_error(1009, strtolower(tr('review'))));
}
$result = $review->delete();
if($result) {
DB::commit();
return $this->sendResponse(api_success(149), 149, '');
}
throw new Exception(api_error(104), 104);
} catch (Exception $e) {
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method guest_carts_list()
*
* @uses to get the carts list, amount & product details when user not logged in (Guest User).
*
* @created Karthick
*
* @updated
*
* @param
*
* @return
*/
public function guest_carts_list(Request $request) {
try {
$rules = [ 'carts' => ['required'] ];
Helper::custom_validator($request->all(), $rules, $custom_errors = []);
$carts_data = json_decode($request->carts);
if(!$carts_data) {
throw new Exception(api_error(136), 136);
}
foreach($carts_data as $key => $cart_data) {
$carts[$key] = new Cart;
$carts[$key]->quantity = $cart_data->quantity;
$carts[$key]->product_id = $cart_data->product_id;
$carts[$key]->product = Product::firstWhere(['id' => $cart_data->product_id]) ?? [];
}
$data['carts'] = CartResource::collection($carts);
$data['user_cart_amount'] = ProductService::get_guest_cart_amount($carts_data);
return $this->sendResponse("", "", $data);
} catch (Exception $e) {
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method get_countries()
*
* @uses to get all countries list
*
* @created Karthick
*
* @updated
*
* @param
*
* @return
*/
public function get_countries(Request $request) {
try {
$rules = [ 'all_countries' => ['nullable', Rule::in(YES, NO)] ];
Helper::custom_validator($request->all(), $rules, $custom_errors = []);
if(request('all_countries') == YES) {
$countries = CountryState::getCountries();
$data['total_countries'] = count($countries);
// $data['countries'] = $countries;
foreach($countries as $key => $country) {
$data['countries'][] = [
'label' => $country,
'value' => $key
];
}
} else {
$request->request->add(['filter_by' => COUNTRY]);
$countries = Country::Approved()->distinct('country_code')->orderBy('country')->get(['country', 'country_code']);
$data['total_countries'] = $countries->count();
$data['countries'] = CountryResource::collection($countries);
}
return $this->sendResponse("", "", $data);
} catch (Exception $e) {
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method get_states()
*
* @uses to get all states list based on country code
*
* @created Karthick
*
* @updated
*
* @param
*
* @return
*/
public function get_states(Request $request) {
try {
$rules = [
'country_code' => ['required'],
'all_countries' => ['nullable', Rule::in(YES, NO)]
];
Helper::custom_validator($request->all(), $rules, $custom_errors = []);
if(request('all_countries') == YES) {
$states = CountryState::getStates(request('country_code'));
$data['total_states'] = count($states);
// $data['states'] = $states;
foreach($states as $key => $state) {
$data['states'][] = [
'label' => $state,
'value' => $key
];
}
} else {
$request->request->add(['filter_by' => STATE]);
$states = Country::where(['country_code' => request('country_code')])->Approved()->orderBy('state')->get(['state']);
$data['total_states'] = $states->count();
$data['states'] = CountryResource::collection($states);
}
return $this->sendResponse("", "", $data);
} catch (Exception $e) {
return $this->sendError($e->getMessage(), $e->getCode());
}
}
}
Back to Directory
File Manager