This commit is contained in:
2026-06-27 10:13:59 +03:30
parent 4a0a19fdff
commit 7b10a5f6f3
3 changed files with 35 additions and 3 deletions
+8 -2
View File
@@ -33,14 +33,14 @@ public function index(Request $request)
$query->with('subcategories');
}
$categories = $query->orderBy('name')->get();
$categories = $query->orderBy('order')->orderBy('name')->get();
// No type filter → also fold in the playlist (music) categories so the
// response contains every category across both tables.
if (!$request->filled('type')) {
$categories = $categories
->concat($this->playlistCategories($request))
->sortBy('name')
->sortBy([['order', 'asc'], ['name', 'asc']])
->values();
}
@@ -88,6 +88,7 @@ public function store(Request $request)
Rule::unique('categories', 'name')->where('type', $request->input('type', Category::TYPE_MEDIA)),
],
'type' => ['nullable', Rule::in(Category::TYPES)],
'order' => 'nullable|integer',
'description' => 'nullable|string',
'icon' => 'nullable|file|extensions:jpg,jpeg,png,gif,webp,bmp,svg|max:8192',
]);
@@ -95,6 +96,7 @@ public function store(Request $request)
$category = Category::create([
'name' => $data['name'],
'type' => $data['type'] ?? Category::TYPE_MEDIA,
'order' => $data['order'] ?? 0,
'description' => $data['description'] ?? null,
'icon' => $request->hasFile('icon')
? $this->storeUpload($request->file('icon'), 'categories/icons')
@@ -158,6 +160,7 @@ public function update(Request $request, $id)
->ignore($category->id),
],
'type' => ['nullable', Rule::in(Category::TYPES)],
'order' => 'nullable|integer',
'description' => 'nullable|string',
'icon' => 'nullable|file|extensions:jpg,jpeg,png,gif,webp,bmp,svg|max:8192',
]);
@@ -165,6 +168,9 @@ public function update(Request $request, $id)
if (array_key_exists('type', $data) && $data['type'] !== null) {
$category->type = $data['type'];
}
if (array_key_exists('order', $data) && $data['order'] !== null) {
$category->order = $data['order'];
}
if (array_key_exists('name', $data)) {
$category->name = $data['name'];
}
+5 -1
View File
@@ -16,7 +16,11 @@ class Category extends Model
self::TYPE_BREATHING_TEMPLATE,
];
protected $fillable = ['name', 'type', 'description', 'icon'];
protected $fillable = ['name', 'type', 'order', 'description', 'icon'];
protected $casts = [
'order' => 'integer',
];
protected $appends = ['icon_url'];