validate([ 'fotos' => 'required', 'fotos.*' => 'image|mimes:jpeg,png,jpg|max:2048' ]); $uploadedCount = 0; if ($request->hasFile('fotos')) { // Ambil urutan terakhir $lastUrutan = Galeri::where('type', 'kontrakan') ->where('item_id', $kontrakan->id) ->max('urutan') ?? 0; // Pastikan folder ada $folderPath = public_path('uploads/galeri/kontrakan'); if (!file_exists($folderPath)) { mkdir($folderPath, 0755, true); } foreach ($request->file('fotos') as $file) { $filename = time() . '_' . uniqid() . '.' . $file->getClientOriginalExtension(); // Simpan ke public/uploads/galeri/kontrakan/ $file->move($folderPath, $filename); Galeri::create([ 'type' => 'kontrakan', 'item_id' => $kontrakan->id, 'foto' => $filename, 'urutan' => ++$lastUrutan, 'is_primary' => false ]); $uploadedCount++; } } return back()->with('success', "$uploadedCount foto berhasil diupload"); } /** * Upload foto untuk laundry */ public function uploadLaundry(Request $request, Laundry $laundry) { $request->validate([ 'fotos' => 'required', 'fotos.*' => 'image|mimes:jpeg,png,jpg|max:2048' ]); $uploadedCount = 0; if ($request->hasFile('fotos')) { // Ambil urutan terakhir $lastUrutan = Galeri::where('type', 'laundry') ->where('item_id', $laundry->id) ->max('urutan') ?? 0; // Pastikan folder ada $folderPath = public_path('uploads/galeri/laundry'); if (!file_exists($folderPath)) { mkdir($folderPath, 0755, true); } foreach ($request->file('fotos') as $file) { $filename = time() . '_' . uniqid() . '.' . $file->getClientOriginalExtension(); // Simpan ke public/uploads/galeri/laundry/ $file->move($folderPath, $filename); Galeri::create([ 'type' => 'laundry', 'item_id' => $laundry->id, 'foto' => $filename, 'urutan' => ++$lastUrutan, 'is_primary' => false ]); $uploadedCount++; } } return back()->with('success', "$uploadedCount foto berhasil diupload"); } /** * Set foto kontrakan sebagai primary/utama */ public function setPrimaryKontrakan($id) { $galeri = Galeri::findOrFail($id); // Pastikan galeri ini memang bertipe kontrakan if ($galeri->type !== 'kontrakan') { return back()->with('error', 'Foto ini bukan milik kontrakan'); } // Reset semua foto di kontrakan yang sama jadi bukan primary Galeri::where('type', 'kontrakan') ->where('item_id', $galeri->item_id) ->update(['is_primary' => false]); // Set foto ini sebagai primary $galeri->update(['is_primary' => true]); return back()->with('success', 'Foto utama berhasil diubah'); } /** * Set foto laundry sebagai primary/utama */ public function setPrimaryLaundry($id) { $galeri = Galeri::findOrFail($id); // Pastikan galeri ini memang bertipe laundry if ($galeri->type !== 'laundry') { return back()->with('error', 'Foto ini bukan milik laundry'); } // Reset semua foto di laundry yang sama jadi bukan primary Galeri::where('type', 'laundry') ->where('item_id', $galeri->item_id) ->update(['is_primary' => false]); // Set foto ini sebagai primary $galeri->update(['is_primary' => true]); return back()->with('success', 'Foto utama berhasil diubah'); } /** * Hapus foto kontrakan dari galeri */ public function deleteKontrakan($id) { $galeri = Galeri::findOrFail($id); // Hapus file foto $filePath = public_path('uploads/galeri/kontrakan/' . $galeri->foto); if (file_exists($filePath)) { unlink($filePath); } $galeri->delete(); return back()->with('success', 'Foto berhasil dihapus'); } /** * Hapus foto laundry dari galeri */ public function deleteLaundry($id) { $galeri = Galeri::findOrFail($id); // Hapus file foto $filePath = public_path('uploads/galeri/laundry/' . $galeri->foto); if (file_exists($filePath)) { unlink($filePath); } $galeri->delete(); return back()->with('success', 'Foto berhasil dihapus'); } }