119 lines
3.5 KiB
PHP
119 lines
3.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Barang;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Str;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class BarangController extends Controller
|
|
{
|
|
public function __construct()
|
|
{
|
|
$this->middleware('auth');
|
|
$this->middleware(\App\Http\Middleware\CheckRole::class . ':admin');
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
$barang = Barang::latest()->get();
|
|
return view('admin.barang.index', compact('barang'));
|
|
}
|
|
|
|
public function create()
|
|
{
|
|
return view('admin.barang.create');
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$request->validate([
|
|
'nama' => 'required|string|max:255',
|
|
'deskripsi' => 'required|string',
|
|
'harga' => 'required|numeric|min:0',
|
|
'stok' => 'required|integer|min:0',
|
|
'kategori' => 'required|string|max:100',
|
|
'gambar' => 'required|image|mimes:jpeg,png,jpg|max:2048',
|
|
]);
|
|
|
|
$data = [
|
|
'nama_barang' => $request->nama,
|
|
'deskripsi' => $request->deskripsi,
|
|
'harga' => $request->harga,
|
|
'stok' => $request->stok,
|
|
'kategori' => $request->kategori,
|
|
'slug' => Str::slug($request->nama) . '-' . Str::random(5),
|
|
];
|
|
|
|
if ($request->hasFile('gambar')) {
|
|
$gambar = $request->file('gambar');
|
|
// Simpan dengan nama asli
|
|
$fileName = $gambar->getClientOriginalName();
|
|
$path = $gambar->storeAs('products', $fileName, 'public');
|
|
$data['gambar'] = $path;
|
|
}
|
|
|
|
Barang::create($data);
|
|
|
|
return redirect()->route('admin.barang.index')
|
|
->with('success', 'Barang berhasil ditambahkan');
|
|
}
|
|
|
|
public function show(Barang $barang)
|
|
{
|
|
return view('admin.barang.show', compact('barang'));
|
|
}
|
|
|
|
public function edit(Barang $barang)
|
|
{
|
|
return view('admin.barang.edit', compact('barang'));
|
|
}
|
|
|
|
public function update(Request $request, Barang $barang)
|
|
{
|
|
$request->validate([
|
|
'nama' => 'required|string|max:255',
|
|
'deskripsi' => 'required|string',
|
|
'harga' => 'required|numeric|min:0',
|
|
'stok' => 'required|integer|min:0',
|
|
'kategori' => 'required|string|max:100',
|
|
'gambar' => 'nullable|image|mimes:jpeg,png,jpg|max:2048',
|
|
]);
|
|
|
|
$data = [
|
|
'nama_barang' => $request->nama,
|
|
'deskripsi' => $request->deskripsi,
|
|
'harga' => $request->harga,
|
|
'stok' => $request->stok,
|
|
'kategori' => $request->kategori,
|
|
];
|
|
|
|
if ($request->hasFile('gambar')) {
|
|
// Hapus gambar lama jika ada
|
|
if ($barang->gambar) {
|
|
Storage::disk('public')->delete($barang->gambar);
|
|
}
|
|
|
|
$data['gambar'] = $request->file('gambar')->store('products', 'public');
|
|
}
|
|
|
|
$barang->update($data);
|
|
|
|
return redirect()->route('admin.barang.index')
|
|
->with('success', 'Barang berhasil diupdate');
|
|
}
|
|
|
|
public function destroy(Barang $barang)
|
|
{
|
|
// Hapus gambar jika ada
|
|
if ($barang->gambar) {
|
|
Storage::disk('public')->delete($barang->gambar);
|
|
}
|
|
|
|
$barang->delete();
|
|
return redirect()->route('admin.barang.index')
|
|
->with('success', 'Barang berhasil dihapus');
|
|
}
|
|
}
|