Product::with(['prices', 'categories'])->latest()->get(), 'categories' => Category::active()->get(), ]); } public function create(): Response { return Inertia::render('admin/master/product/create', [ 'categories' => Category::active()->get(), ]); } public function store(ProductRequest $request): RedirectResponse { $validated = $request->validated(); DB::transaction(function () use ($validated) { $product = Product::create([ 'name' => $validated['name'], 'description' => $validated['description'], ]); $product->categories()->sync($validated['category_ids'] ?? []); foreach ($validated['prices'] as $type => $price) { $enumType = PriceType::tryFrom($type); if ($enumType) { $product->prices()->create([ 'price_type' => $enumType, 'price' => $price, ]); } } }); return redirect()->route('product.index')->with('success', 'Data berhasil disimpan'); } public function edit(Product $product): Response { $product->load(['prices', 'categories']); return Inertia::render('admin/master/product/edit', [ 'product' => $product, 'categories' => Category::active()->get(), ]); } public function update(ProductRequest $request, Product $product): RedirectResponse { $validated = $request->validated(); DB::transaction(function () use ($product, $validated) { $product->update([ 'name' => $validated['name'], 'description' => $validated['description'], ]); $product->categories()->sync($validated['category_ids'] ?? []); foreach ($validated['prices'] as $type => $price) { $enumType = PriceType::tryFrom($type); if ($enumType) { $product->prices()->updateOrCreate( ['price_type' => $enumType], ['price' => $price] ); } } }); return redirect()->route('product.index')->with('success', 'Data berhasil diperbarui'); } public function destroy(Product $product): RedirectResponse { $product->delete(); return redirect()->back()->with('success', 'Data berhasil dihapus'); } public function bulkDestroy(Request $request): RedirectResponse { $ids = $request->input('ids'); Product::whereIn('id', $ids)->delete(); return redirect()->back()->with('success', 'Data terpilih berhasil dihapus'); } public function toggleStatus(Product $product): RedirectResponse { $product->update([ 'is_active' => ! $product->is_active, ]); return redirect()->back()->with('success', 'Status berhasil diperbarui'); } }