Viewing File: /home/ubuntu/shop-website-base/app/Http/Controllers/Api/User/ProductApiController.php

<?php 

namespace App\Http\Controllers\Api\User;

use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

use App\Http\Requests;

use Exception, DB, Validator, Setting, Log, Hash;

use App\Helpers\Helper, App\Helpers\CommonHelper, App\Helpers\VideoHelper;

use App\Models\ProductWishlist, App\Models\Cart, App\Models\ProductInventory;

use App\Repositories\ProductRepository as ProductRepo;


class ProductApiController extends Controller {
	
	protected $skip, $take;

	public function __construct(Request $request) {

        Log::info(url()->current());   

        Log::info("Request Data".print_r($request->all(), true));
        
        $this->skip = $request->skip ?: 0;

        $this->take = $request->take ?: (Setting::get('admin_take_count') ?: TAKE_COUNT);

    }

    /**
     * @method product_wishlists_save()
     *
     * @uses
     *
     * @created
     *
     * @updated
     *
     * @param
     * 
     * @return
     */
    public function product_wishlists_save(Request $request) {

        try {

            DB::beginTransaction();

            $rules = ['product_id' => 'required'];

            Helper::custom_validator($request->all(),$rules);

            $product_wishlist = ProductWishlist::where('user_id', $request->id)->where('product_id', $request->product_id)->first();

            if($product_wishlist) {

                $product_wishlist->delete();

                $code = 108;
                
            } else {

                $product_wishlist = new ProductWishlist();

                $product_wishlist->product_id = $request->product_id;

                $product_wishlist->user_id = $request->id;

                $product_wishlist->status = YES;
            
                $product_wishlist->save();

                $code = 107;

            }
            
            $data['wishlist_count'] = wishlist_count();

            DB::commit();

            return $this->sendResponse(api_success($code), $code, $data);

        } catch(Exception $e) {

            DB::rollback();

            return $this->sendError($e->getMessage(), $e->getCode());

        }
 
    }

    /**
     * @method add_to_cart()
     *
     * @uses add store products of user to cart
     *
     * @created
     *
     * @updated
     *
     * @param
     * 
     * @return
     */
    public function add_to_cart(Request $request) {
        try {

            DB::beginTransaction();

            $rules = ['product_id' => 'required','quantity'=>'required|numeric|min:0.5'];

            Helper::custom_validator($request->all(),$rules);

            $cart = Cart::where('user_id', $request->id)->where('product_id', $request->product_id)->first() ?? new Cart();

            $products_inventory = ProductInventory::where('product_id',$request->product_id)->first();

            if($request->status == ADD_CART && $products_inventory->remaining_quantity == 0 || $cart->quantity >= $products_inventory->remaining_quantity) {

                throw new Exception(api_error(104), 104); 
            }
            
            $cart->product_id = $request->product_id;

            $cart->user_id = $request->id;

            if($request->status == ADD_CART) {

                $cart->quantity += $request->quantity;

                $code = 110;

            } else if($request->status == REMOVE_CART && $cart->quantity >= $request->quantity) {

                $cart->quantity -= $request->quantity;

                $code = 111;
                
            } else {

                $code = 114;
            }

            $cart->status = YES;
           
            $cart->save();

            DB::commit();

            $cart = Cart::where('carts.user_id', $request->id)->where('product_id', $request->product_id)->CommonResponse()->first();

            $total_items = Cart::where('carts.user_id', $request->id)
                ->CommonResponse()
                ->where('products.status', APPROVED)
                ->get();

            $data['total_quantity'] = $cart->quantity;

            $data['total_items'] = $total_items->count();

            $data['total_price'] = formatted_amount($total_items->sum('total_price'));

            $data['product_price'] = formatted_amount($cart->total_price);

            $data['product_amount'] = formatted_amount($cart->amount);

            return $this->sendResponse(api_success($code), $code, $data);

        } catch(Exception $e) {

            DB::rollback();

            return $this->sendError($e->getMessage(), $e->getCode());

        }
 
    }

    /**
     * @method add_to_cart_unregistered()
     *
     * @uses add store products of user to cart
     *
     * @created
     *
     * @updated
     *
     * @param
     * 
     * @return
     */
    public function add_to_cart_unregistered(Request $request) {
        try {

            DB::beginTransaction();

            $rules = [
                'product_id' => 'required',
                'quantity'=>'required_if:status,'.ADD_CART.'|numeric|min:0.5'
            ];

            Helper::custom_validator($request->all(),$rules);

            $cart = Cart::where('ip_address', $request->ip_address)->where('product_id', $request->product_id)->first() ?? new Cart();

            $products_inventory = ProductInventory::where('product_id',$request->product_id)->first();
            
            if($request->status == ADD_CART && $products_inventory->remaining_quantity == 0 || $cart->quantity > $products_inventory->remaining_quantity) {

                throw new Exception(api_error(104), 104); 
            }
            
            $cart->product_id = $request->product_id;

            $cart->user_id = 0;

            $cart->ip_address = $request->ip_address;

            if($request->status == ADD_CART) {

                $cart->quantity += $request->quantity;

                $code = 110;

            } else if($request->status == REMOVE_CART && $cart->quantity >= $request->quantity) {

                $cart->quantity -= $request->quantity;

                $code = 111;
                
            } else {

                throw new Exception(api_error(114), 114); 
                
            }

            $cart->status = YES;
           
            $cart->save();

            DB::commit();

            $cart = Cart::where('carts.ip_address', $request->ip_address)->where('product_id', $request->product_id)->CommonResponse()->first();

            $total_items = Cart::where('carts.ip_address', $request->ip_address)
                ->CommonResponse()
                ->where('products.status', APPROVED)
                ->get();

            $data['total_quantity'] = $cart->quantity;

            $data['total_items'] = $total_items->count();

            $data['total_price'] = formatted_amount($total_items->sum('total_price'));

            $data['product_price'] = formatted_amount($cart->total_price);

            $data['product_amount'] = formatted_amount($cart->amount);

            return $this->sendResponse(api_success($code), $code, $data);

        } catch(Exception $e) {

            DB::rollback();

            return $this->sendError($e->getMessage(), $e->getCode());

        }
 
    }

    /**
     * @method carts_delete()
     *
     * @uses remove added store products from cart
     *
     * @created
     *
     * @updated
     *
     * @param
     * 
     * @return
     */

    public function carts_delete(Request $request) {

        try {

            DB::beginTransaction();

            $rules = ['cart_id' => 'required'];

            Helper::custom_validator($request->all(),$rules);

            if($request->ip_address) {

                $carts = Cart::where('ip_address', $request->ip_address)->where('id', $request->cart_id)->first();
                
            } else {

                $carts = Cart::where('user_id', $request->id)->where('id', $request->cart_id)->first();

            }
            
            
            if(!$carts) {

                throw new Exception(api_error(105), 105);
            
            }

            $carts->delete();

            DB::commit();

            return $this->sendResponse($message = api_success(111), 111, $data =[]);


        } catch(Exception $e) {

            DB::rollback();

            return $this->sendError($e->getMessage(), $e->getCode());

        }
 
    }


    /** 
     * @method save_orders()
     *
     * @uses save Orders
     *
     * @created Bhawya
     *
     * @updated Bhawya
     *
     * @param
     * 
     * @return JSON response
     *
     */

    public function save_orders(Request $request) {

        try {

            DB::beginTransaction();

            $order = ProductRepo::orders_save($request);

            $total = $user_pay_amount = $order->total ?? 0.00;

            $request->request->add([
                'total' => $total, 
                'user_pay_amount' => $user_pay_amount,
                'paid_amount' => $user_pay_amount,
                'payment_id' => 'FREE-'.rand()
            ]);

            $payment_response = ProductRepo::order_payment_save($request, $order)->getData();

            if($payment_response->success) {
                
                $cart = Cart::where('carts.user_id', $request->id)->delete();

                DB::commit();

            } else {

                throw new Exception($payment_response->error, $payment_response->error_code);
            }          

            successReponse:

            $data['order_id'] = $order->id;

            return $this->sendResponse(api_success(115), 115, $data);

        } catch(Exception $e) {

            DB::rollback();

            $response_array = ['success'=>false, 'error_messages'=>$e->getMessage(), 'error_code'=>$e->getCode()];

            return response()->json($response_array);
        
        }

    }

}
Back to Directory File Manager