middleware('auth'); } public function store(Request $request) { $request->validate([ 'game_id' => 'required|exists:games,id', 'status' => 'required|in:' . implode(',', UserGame::STATUSES), 'rating' => 'nullable|integer|min:1|max:10', ]); $userGame = UserGame::updateOrCreate( ['user_id' => auth()->id(), 'game_id' => $request->game_id], ['status' => $request->status, 'rating' => $request->rating] ); // Recalculate rating on the game $userGame->game->recalculateRating(); if ($request->expectsJson()) { return response()->json(['status' => 'ok', 'userGame' => $userGame]); } return back()->with('success', 'Added to your library.'); } public function update(Request $request, UserGame $userGame) { $this->authorize('update', $userGame); $request->validate([ 'status' => 'sometimes|in:' . implode(',', UserGame::STATUSES), 'rating' => 'nullable|integer|min:1|max:10', 'notes' => 'nullable|string|max:1000', ]); $userGame->update($request->only(['status', 'rating', 'notes'])); $userGame->game->recalculateRating(); if ($request->expectsJson()) { return response()->json(['status' => 'ok', 'userGame' => $userGame]); } return back()->with('success', 'Library entry updated.'); } public function destroy(UserGame $userGame) { $this->authorize('delete', $userGame); $game = $userGame->game; $userGame->delete(); $game->recalculateRating(); if (request()->expectsJson()) { return response()->json(['status' => 'ok']); } return back()->with('success', 'Removed from your library.'); } }