Files
back-meditation/app/Http/Controllers/CategoryController.php
T
2026-06-06 16:38:01 +03:30

100 lines
2.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Category;
use App\Traits\StoresUploads;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class CategoryController extends Controller
{
use StoresUploads;
public function index(Request $request)
{
$query = Category::query()->withCount('subcategories');
if ($request->boolean('with_subcategories')) {
$query->with('subcategories');
}
return response()->json(
$query->orderBy('name')->get()
);
}
public function store(Request $request)
{
$data = $request->validate([
'name' => 'required|string|max:255|unique:categories,name',
'description' => 'nullable|string',
'icon' => 'nullable|file|extensions:jpg,jpeg,png,gif,webp,bmp,svg|max:8192',
]);
$category = Category::create([
'name' => $data['name'],
'description' => $data['description'] ?? null,
'icon' => $request->hasFile('icon')
? $this->storeUpload($request->file('icon'), 'categories/icons')
: null,
]);
return response()->json([
'message' => 'Category created successfully',
'category' => $category,
], 201);
}
public function show($id)
{
$category = Category::with('subcategories')->withCount('subcategories')->findOrFail($id);
return response()->json($category);
}
public function update(Request $request, $id)
{
$category = Category::findOrFail($id);
$data = $request->validate([
'name' => 'sometimes|string|max:255|unique:categories,name,' . $category->id,
'description' => 'nullable|string',
'icon' => 'nullable|file|extensions:jpg,jpeg,png,gif,webp,bmp,svg|max:8192',
]);
if (array_key_exists('name', $data)) {
$category->name = $data['name'];
}
if (array_key_exists('description', $data)) {
$category->description = $data['description'];
}
if ($request->hasFile('icon')) {
if ($category->icon) {
Storage::disk('public')->delete($category->icon);
}
$category->icon = $this->storeUpload($request->file('icon'), 'categories/icons');
}
$category->save();
return response()->json([
'message' => 'Category updated successfully',
'category' => $category,
]);
}
public function destroy($id)
{
$category = Category::findOrFail($id);
if ($category->icon) {
Storage::disk('public')->delete($category->icon);
}
$category->delete();
return response()->json(['message' => 'Category deleted successfully']);
}
}