File: /var/www/api.vaspayment.com/app/Http/Controllers/Admin/ShopController.php
<?php
namespace App\Http\Controllers\Admin;
use App\Models\Blog;
use App\Models\Shop;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Storage;
use Illuminate\Validation\ValidationException;
class ShopController extends Controller
{
public function allBlog()
{
try {
$blogs = Blog::latest()->get();
return response()->json([
'status' => 'success',
'data' => $blogs,
], 200);
} catch (\Throwable $th) {
return response()->json([
'status' => 'error',
'message' => $th->getMessage(),
], 401);
}
}
public function showBlog(Request $request)
{
try {
$data = $request->validate([
"slug" => "required|string|exists:blogs,slug",
"userIp" => "required",
]);
$blog = Blog::where('slug', $data['slug'])->first();
$userIp = $data['userIp'];
if ($blog->ip_address !== $userIp) {
$blog->increment('views');
$blog->ip_address = $userIp;
$blog->save();
}
return response()->json([
'status' => 'success',
'data' => $blog,
], 200);
} catch (\Throwable $th) {
return response()->json([
'status' => 'error',
'message' => $th->getMessage(),
], 401);
}
}
public function index()
{
try {
$items = Shop::latest()->get();
return response()->json([
'status' => 'success',
'data' => $items,
], 200);
} catch (\Throwable $th) {
return response()->json([
'status' => 'error',
'message' => $th->getMessage(),
], 401);
}
}
public function storeOrUpdate(Request $request, Shop $shop = null)
{
try {
$request->validate([
'title' => 'required|string|max:100|unique:shops' . ($shop && $request->has('id') ? ',' . $shop->id : ''),
'description' => 'required',
'specification' => 'required|string|max:100',
'features' => 'required|string|max:100',
'regular_price' => 'required|string|max:100',
'sales_price' => 'required|string|max:100',
'stock' => 'required|string|max:100',
'status' => 'required|string|max:100',
'image' => 'required|image|max:512',
]);
} catch (ValidationException $th) {
return response()->json([
'status' => 'error',
'message' => $th->getMessage(),
], 401);
}
try {
$shop = null;
if ($request->has('id')) {
$shop = Shop::findOrFail($request->input('id'));
} else {
$shop = new Shop;
}
$shop->title = $request->input('title');
$shop->slug = Str::slug($request['title'], '-');
$shop->description = $request->input('description');
$shop->specification = $request->input('specification');
$shop->features = $request->input('features');
$shop->regular_price = $request->input('regular_price');
$shop->sales_price = $request->input('sales_price');
$shop->stock = $request->input('stock');
$shop->status = $request->input('status');
// $images = [];
if ($request->hasFile('image')) {
$shop->image = '/storage/' . $request->file('image')->store('ShopItem', 'public');
}
$shop->save();
$message = $shop->wasRecentlyCreated ? 'Shop item added' : 'Shop item updated';
return response()->json([
'status' => 'success',
'message' => $message,
'data' => $shop,
], 200);
} catch (\Throwable $th) {
return response()->json([
'status' => 'error',
'message' => $th->getMessage(),
], 422);
}
}
public function destroy(Request $request)
{
try {
$validated = $request->validate([
'id' => 'required|string|exists:shops,id',
]);
} catch (ValidationException $th) {
return response()->json([
'status' => 'error',
'message' => $th->getMessage(),
], 422);
}
try {
$shop = Shop::findOrFail($validated['id']);
$imagePath = str_replace('/storage/', 'public/', $shop->image);
if ($shop && Storage::exists($imagePath)) {
Storage::delete($imagePath);
$shop->delete();
return response()->json([
'status' => 'success',
'message' => 'Shop item with Image deleted successfully',
], 200);
} else {
$shop->delete();
return response()->json([
'message' => ' Image not found. But Shop item deleted',
'status' => 'error'
], 404);
}
} catch (\Exception $e) {
info('Mail the admin system about this error: ' . $e->getMessage());
return response()->json([
'status' => 'error',
'message' => 'Internal server error occurred. Please try again later.'
], 500);
}
}
}