GOOD SHELL MAS BOY
Server: Apache/2.4.52 (Ubuntu)
System: Linux vmi1836763.contaboserver.net 5.15.0-130-generic #140-Ubuntu SMP Wed Dec 18 17:59:53 UTC 2024 x86_64
User: www-data (33)
PHP: 8.4.10
Disabled: NONE
Upload Files
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);
        }
    }
}