get(); return response()->json([ 'categories' => CategoryResource::collection($categories) ]); } public function store(Request $request): JsonResponse { $validated = $request->validate([ 'name' => 'required|string|max:255|unique:categories', 'description' => 'nullable|string', ]); $category = Category::create($validated); return response()->json([ 'message' => 'Category created successfully', 'category' => $category ]); } public function update(Request $request, Category $category): JsonResponse { $validated = $request->validate([ 'name' => 'sometimes|string|max:255|unique:categories,name,' . $category->id, 'description' => 'nullable|string', ]); $category->update($validated); return response()->json([ 'message' => 'Category updated successfully', 'category' => $category ]); } public function destroy(Category $category): JsonResponse { $category->delete(); return response()->json([ 'message' => 'Category deleted successfully' ]); } public function posts(Category $category, Request $request): JsonResponse { $perPage = $request->input('per_page', 10); $perPage = min($perPage, 100); $posts = $category->posts() ->with(['author:id,name']) ->latest() ->paginate($perPage); return response()->json([ 'posts' => PostResource::collection($posts), 'pagination' => [ 'total' => $posts->total(), 'per_page' => $posts->perPage(), 'current_page' => $posts->currentPage(), 'last_page' => $posts->lastPage(), ] ]); } }