File: /var/www/vaspayment.com/app/Http/Controllers/ShopController.php
<?php
namespace App\Http\Controllers;
use App\Models\Shop;
use App\Models\Review;
use App\Models\Category;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Validator;
class ShopController extends Controller
{
public function __construct()
{
$this->middleware(['auth', 'verified', 'agent'])->except(['list', 'show']);
}
public function index()
{
$shops = Shop::all();
$categories = Category::all();
return view("settings.shop.index", compact("shops", "categories"));
}
public function list()
{
// $shops = Cache::remember('cached_shops', 7 * 24 * 60, function () {
// return
$shops = Shop::select('title', 'regular_price', 'sales_price', 'images', 'slug')->inRandomOrder()->paginate(2);
$totalProducts = Shop::count();
// });
return view("settings.shop.list", compact("shops", "totalProducts"));
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|string',
'description' => 'required',
'short_description' => 'required',
'specification' => 'required|string',
'features' => 'required|string',
'regular_price' => 'sometimes',
'sales_price' => 'sometimes',
'category_id' => 'required|string',
'quantity' => 'required|string',
'images.*' => 'required|image|max:512',
]);
if ($validator->fails()) {
return redirect()->back()->with('error', $validator->errors()->first());
}
try {
$shop = new Shop();
$shop->title = $request->get('title');
$shop->slug = Str::slug($request['title'], '-');
$shop->description = $request->get('description');
$shop->short_description = $request->get('short_description');
$shop->specification = $request->get('specification');
$shop->features = $request->get('features');
$shop->regular_price = $request->get('regular_price');
$shop->sales_price = $request->get('sales_price');
$shop->category_id = $request->get('category_id');
$shop->quantity = $request->get('quantity');
$images = [];
if ($request->hasFile('images')) {
foreach ($request->file('images') as $image) {
$imageName = '/storage/' . $image->store('shopImages', 'public');
$images[] = $imageName;
}
}
$shop->images = json_encode($images);
$shop->save();
return redirect()->back()->with('status', 'Shop product Saved');
} catch (\Throwable $th) {
return redirect()->back()->with('error', $th->getMessage());
}
}
public function show(Shop $shop)
{
$reviews = Review::select('user_id', 'comment', 'rating', 'shop_id')->where('shop_id', $shop->id)->inRandomOrder()->limit(5)->get();
return view('settings.shop.show', compact('shop', 'reviews'));
}
public function edit(Shop $shop)
{
//
}
public function update(Request $request, Shop $shop)
{
$validator = Validator::make($request->all(), [
'title' => 'required|string',
'description' => 'required',
'short_description' => 'required',
'specification' => 'required|string',
'features' => 'required|string',
'regular_price' => 'sometimes',
'sales_price' => 'sometimes',
'category_id' => 'required|string',
'quantity' => 'required|string',
'images.*' => 'required|image|max:512',
]);
if ($validator->fails()) {
return redirect()->back()->with('error', $validator->errors()->first());
}
try {
$shop->title = $request->get('title');
$shop->slug = Str::slug($request['title'], '-');
$shop->description = $request->get('description');
$shop->short_description = $request->get('short_description');
$shop->specification = $request->get('specification');
$shop->features = $request->get('features');
$shop->regular_price = $request->get('regular_price');
$shop->sales_price = $request->get('sales_price');
$shop->category_id = $request->get('category_id');
$shop->quantity = $request->get('quantity');
$images = [];
if ($request->hasFile('images')) {
foreach ($request->file('images') as $image) {
$imageName = '/storage/' . $image->store('shopImages', 'public');
$images[] = $imageName;
}
}
$shop->save();
return redirect()->back()->with('status', 'Shop Product Updated');
} catch (\Throwable $th) {
return redirect()->back()->with('error', $th->getMessage());
}
}
public function destroy(Shop $shop)
{
$shop->delete();
return redirect()->back()->with('status', 'Shop Product Deleted');
}
}