ECOMMERCE/app/Http/Controllers/ProductController.php

123 lines
3.5 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Gender;
use App\Models\StoreCategory;
use App\Repositories\Catalog\CategoryRepository;
use App\Repositories\Catalog\GenderRepository;
use App\Repositories\Catalog\ProductRepository;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
class ProductController extends Controller
{
public function index(Request $request)
{
$limit = 20;
$page = $request->page ?? 1;
$search = $request->search;
$filter = $request->filter ?? [];
$sortBy = $request->sort_by ?? 'relevance';
$price_range_start = $request->price_range_start ?? null;
$price_range_end = $request->price_range_end ?? null;
$genderRepository = new GenderRepository;
$categoryRepository = new CategoryRepository;
$genders = $genderRepository->getList([]);
$categories = $categoryRepository->getList([]);
$user = auth()->user();
$userId = $user ? $user->id : 0;
[$location_id, $is_consignment] = Cache::remember('employee_user_'.$userId, 60 * 60 * 24, function () use ($user) {
if ($user == null) {
return [10, false];
}
$employee = @$user->employee;
$location_id = @$employee->location_id;
$location = @$employee->location;
$is_consignment = (bool) @$location->is_consignment;
return [$location_id, $is_consignment];
});
$productRepository = new ProductRepository;
$products = $productRepository->getList([
'limit' => $page * $limit,
'sort' => $sortBy,
'category_id' => $filter['category'] ?? null,
'gender_id' => $filter['gender'] ?? null,
'search' => $search,
'location_id' => $location_id,
'is_consignment' => $is_consignment,
'price_range_start' => $price_range_start,
'price_range_end' => $price_range_end,
]);
if (isset($filter['category']) && $filter['category']){
$category = StoreCategory::find($filter['category']);
if ($category) {
$filter['category'] = $category->name;
} else {
unset($filter);
}
}
if (isset($filter['gender']) && $filter['gender']) {
$gender = Gender::find($filter['gender']);
if ($gender) {
$filter['gender'] = $gender->name;
} else {
unset($filter);
}
}
$filters = $filter;
$min_max_price = $productRepository->getMinMaxPrice();
return view('shop.catalog-fashion', [
'filters' => $filters,
'genders' => $genders,
'categories' => $categories,
'products' => $products,
'page' => $page,
'min_max_price' => $min_max_price,
]);
}
public function detail($slug, Request $request, ProductRepository $productRepository)
{
$product = $productRepository->show($slug);
$complete_look_products_data = $productRepository->getList([
'category_id' => $product->category1_id,
'limit' => 4,
]);
$complete_look_products = collect($complete_look_products_data->items())->chunk(2);
return view('shop.product-fashion', [
'product' => $product,
'complete_look_products' => $complete_look_products,
]);
}
}