Viewing File: /home/ubuntu/vedadeals-backend-base/app/Http/Controllers/Api/HomeApiController.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;
use Carbon\Carbon;
use App\Models\{ User, Product, Banner, Category, Order, Faq, Review };
use App\Http\Resources\{ ProductResource, CategoryResource, ProductPreviewResource, FaqResource, BannerResource, ReviewResource };
use Illuminate\Validation\Rule;
class HomeApiController 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 banners_list()
*
* @uses to get all banners for home page
*
* @created Karthick
*
* @updated
*
* @param
*
* @return
*/
public function banners_list(Request $request) {
try {
$base_query = Banner::with(['product.category:id,name'])->Approved()->orderBy('updated_at', 'desc');
$data['total_banners'] = $base_query->count();
$banners = $base_query->skip($this->skip)->take($this->take)->get();
$data['banners'] = BannerResource::collection($banners);
return $this->sendResponse("", "", $data);
} catch (Exception $e) {
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method categories_list()
*
* @uses to get all category products for home page
*
* @created Karthick
*
* @updated
*
* @param
*
* @return
*/
public function categories_list(Request $request) {
try {
$base_query = Category::has('availableProducts')->withCount(['availableProducts'])->with(['subCategories'])->Approved()->orderBy('updated_at', 'desc');
$data['total_categories'] = $base_query->count();
$categories = $base_query->get();
$data['categories'] = CategoryResource::collection($categories);
return $this->sendResponse("", "", $data);
} catch (Exception $e) {
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method top_products_list()
*
* @uses to get all top selling products list for home page
*
* @created Karthick
*
* @updated
*
* @param
*
* @return
*/
public function top_products_list(Request $request) {
try {
$base_query = Product::Available()->withCount(['orderProducts'])
->has('orderProducts', '>=' , TOP_PRODUCTS_FILTER_COUNT)
->with(['discount', 'category'])
->orderBy('order_products_count', 'desc');
$data['total_products'] = $base_query->count();
$products = $base_query->skip($this->skip)->take($this->take)->get();
$data['products'] = ProductPreviewResource::collection($products);
return $this->sendResponse("", "", $data);
} catch (Exception $e) {
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method faqs_list()
*
* @uses to get all faqs
*
* @created Karthick
*
* @updated
*
* @param
*
* @return
*/
public function faqs_list(Request $request) {
try {
$base_query = Faq::Approved()->orderBy('updated_at', 'desc');
$data['total_faqs'] = $base_query->count();
$faqs = $base_query->skip($this->skip)->take($this->take)->get();
$data['faqs'] = FaqResource::collection($faqs);
return $this->sendResponse("", "", $data);
} catch (Exception $e) {
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method customer_reviews_list()
*
* @uses to get random reviews list
*
* @created Karthick
*
* @updated
*
* @param
*
* @return
*/
public function customer_reviews_list(Request $request) {
try {
$rules = ['order_by' => ['required', Rule::in(ORDER_BY_HIGHEST, ORDER_BY_LOWEST, ORDER_BY_NEWEST, ORDER_BY_OLDEST)]];
Helper::custom_validator($request->all(), $rules, $custom_errors = []);
$base_query = Review::has('user')->has('product')
->when(in_array($request->order_by, [ORDER_BY_HIGHEST, ORDER_BY_LOWEST]), function($query) use ($request) {
$query->where(['star' => $request->order_by == ORDER_BY_HIGHEST ? 5 : 1]);
})
->with(['user', 'product.category:id,name', 'product.discount:id,discount_type,discount'])
->whereNotNull('review')->inRandomOrder();
switch($request->order_by) {
case ORDER_BY_HIGHEST:
$base_query->orderBy('star', 'desc');
break;
case ORDER_BY_LOWEST:
$base_query->orderBy('star', 'asc');
break;
case ORDER_BY_NEWEST:
$base_query->orderBy('updated_at', 'desc');
break;
case ORDER_BY_OLDEST:
$base_query->orderBy('updated_at', 'asc');
break;
}
$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());
}
}
}
Back to Directory
File Manager