has('with')) { $relations = explode(',', request()->with); $bookRecommendations->with($relations); } if(request()->has('status')) { $bookRecommendations->where('status', request()->status); } return $bookRecommendations->get(); } /** * Show the form for creating a new resource. */ public function create() { // } /** * Store a newly created resource in storage. */ public function store(Request $request) { $request->validate([ 'book_name' => 'required|string|max:255', 'author' => 'required|string|max:255', 'description' => 'nullable|string', 'isbn' => 'required|string|unique:book_recommendations,isbn', 'pages' => 'required|integer', 'status' => 'in:PENDING,COMPLETED,REJECTED,ACTIVE', 'cover_image' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048', ]); $data = $request->all(); if ($request->hasFile('cover_image')) { $imagePath = $request->file('cover_image')->store('cover_images', 'public'); $data['cover_image'] = $imagePath; } $bookRecommendation = BookRecommendation::create([...$data, 'recommended_by' => auth()->id()]); return response()->json($bookRecommendation, 201); } /** * Display the specified resource. */ public function show(string $id) { $relations = []; if (request()->has('with')) { $relations = explode(',', request()->with); } $bookRecommendation = BookRecommendation::with($relations)->findOrFail($id); return response()->json($bookRecommendation); } /** * Show the form for editing the specified resource. */ public function edit(string $id) { // } /** * Update the specified resource in storage. */ public function update(Request $request, string $id) { $bookRecommendation = BookRecommendation::findOrFail($id); $request->validate([ 'book_name' => 'string|max:255', 'author' => 'string|max:255', 'description' => 'nullable|string', 'isbn' => 'string|unique:book_recommendations,isbn,'.$bookRecommendation->id, 'pages' => 'integer', 'recommended_by' => 'exists:users,id', 'status' => 'in:PENDING,COMPLETED,REJECTED,ACTIVE', 'cover_image' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048', ]); if ($bookRecommendation->recommended_by !== auth()->id() && !(auth()->user()->hasRole('admin')) ) { return response()->json(['message' => 'Keine Berechtigung.'], 403); } $data = $request->all(); if ($request->hasFile('cover_image')) { // Delete old image if exists if ($bookRecommendation->cover_image) { Storage::delete($bookRecommendation->cover_image); } $imagePath = $request->file('cover_image')->store('cover_images', 'public'); $data['cover_image'] = $imagePath; } $bookRecommendation->update($data); return response()->json($bookRecommendation); } /** * Remove the specified resource from storage. */ public function destroy(string $id) { $bookRecommendation = BookRecommendation::findOrFail($id); if ($bookRecommendation->recommended_by !== auth()->id() && !(auth()->user()->hasRole('admin')) ) { return response()->json(['message' => 'Keine Berechtigung.'], 403); } if ($bookRecommendation->cover_image) { Storage::delete($bookRecommendation->cover_image); } $bookRecommendation->delete(); return response()->json(null, 204); } }