latest()->paginate(10); return view('admin.galleries.index', compact('galleries')); } public function create() { $categories = GalleryCategory::where('active', true)->orderBy('name')->get(); return view('admin.galleries.create', compact('categories')); } public function store(Request $request) { $request->validate([ 'title' => 'required|string|max:255', 'slug' => 'required|string|max:255|unique:galleries', 'description' => 'nullable|string', 'category_id' => 'nullable|exists:gallery_categories,id', ]); $gallery = Gallery::create([ 'title' => $request->title, 'slug' => $request->slug, 'description' => $request->description, 'category_id' => $request->category_id, 'active' => true, ]); /** @var \App\Models\User $user */ $user = Auth::user(); $admins = User::where('user_type', 'Admin')->where('id', '!=', $user->id)->get(); Notification::send($admins, new GalleryActionNotification($gallery, $user, 'created')); return redirect()->route('admin.galleries.index')->with('success', 'Galeria criada com sucesso.'); } public function edit(Gallery $gallery) { $gallery->load('images'); $categories = GalleryCategory::where('active', true)->orderBy('name')->get(); return view('admin.galleries.edit', compact('gallery', 'categories')); } public function update(Request $request, Gallery $gallery) { $request->validate([ 'title' => 'required|string|max:255', 'slug' => 'required|string|max:255|unique:galleries,slug,' . $gallery->id, 'description' => 'nullable|string', 'active' => 'required|boolean', 'category_id' => 'nullable|exists:gallery_categories,id', ]); $gallery->update($request->all()); /** @var \App\Models\User $user */ $user = Auth::user(); $admins = User::where('user_type', 'Admin')->where('id', '!=', $user->id)->get(); Notification::send($admins, new GalleryActionNotification($gallery, $user, 'updated')); return redirect()->route('admin.galleries.index')->with('success', 'Galeria atualizada com sucesso.'); } public function destroy(Gallery $gallery) { foreach ($gallery->images as $image) { Storage::disk('public')->delete($image->file_path); } $gallery->delete(); return redirect()->route('admin.galleries.index')->with('success', 'Galeria e suas imagens excluídas.'); } // Gerenciamento de Imagens public function uploadImage(Request $request, Gallery $gallery) { $request->validate([ 'images' => 'required|array|min:1|max:20', 'images.*' => 'image|max:5120|mimes:jpeg,png,jpg,gif,webp', // 5MB each ], [ 'images.max' => 'Máximo de 20 imagens permitidas.', 'images.*.mimes' => 'As imagens devem ser do tipo: JPEG, PNG, JPG, GIF ou WebP.', ]); $order = $gallery->images()->count() + 1; $count = 0; foreach ($request->file('images') as $file) { $path = $file->store('galleries/' . $gallery->id, 'public'); GalleryImage::create([ 'gallery_id' => $gallery->id, 'file_path' => $path, 'order' => $order++, ]); $count++; } /** @var \App\Models\User $user */ $user = Auth::user(); $admins = User::where('user_type', 'Admin')->where('id', '!=', $user->id)->get(); Notification::send($admins, new GalleryActionNotification($gallery, $user, 'photo_added')); $message = $count === 1 ? 'Imagem adicionada à galeria.' : "{$count} imagens adicionadas à galeria."; return redirect()->back()->with('success', $message); } public function updateImage(Request $request, GalleryImage $image) { $request->validate([ 'description' => 'nullable|string|max:255', 'order' => 'required|integer', ]); $image->update($request->only('description', 'order')); return redirect()->back()->with('success', 'Imagem atualizada.'); } public function deleteImage(GalleryImage $image) { $gallery = $image->gallery; Storage::disk('public')->delete($image->file_path); $image->delete(); /** @var \App\Models\User $user */ $user = Auth::user(); $admins = User::where('user_type', 'Admin')->where('id', '!=', $user->id)->get(); Notification::send($admins, new GalleryActionNotification($gallery, $user, 'photo_deleted')); return redirect()->back()->with('success', 'Imagem removida.'); } }