khanegi admin changes

This commit is contained in:
2026-06-13 16:13:06 +03:30
parent 9b28a55634
commit c70cda0b6b
+32 -8
View File
@@ -8,13 +8,19 @@ use Illuminate\Support\Collection;
class CategoryService class CategoryService
{ {
/** دسته‌های پیش‌فرض — باید با سلکت افزودن محصول و تب فیلتر اپ یکسان باشند */ /**
* دسته‌های پایه — ترتیب نمایش در ادمین و سلکت محصول.
* دسته‌های اضافی فقط از group_type محصولات اضافه می‌شوند.
*/
public const DEFAULT_CATEGORY_NAMES = [ public const DEFAULT_CATEGORY_NAMES = [
'آبشده', 'آبشده',
'مکعب', 'مکعب',
'گوی', 'گوی',
'سکه', 'سکه',
'سکه پارسیان', 'سکه پارسیان',
'شمش',
'شمش ونوس',
'شمش برنا',
'مس', 'مس',
'نقره', 'نقره',
]; ];
@@ -63,7 +69,8 @@ class CategoryService
->values(); ->values();
} }
public function syncFromProducts(): int /** @return Collection<int, string> */
public function collectTargetCategoryNames(): Collection
{ {
$fromProducts = Product::query() $fromProducts = Product::query()
->whereNotNull('group_type') ->whereNotNull('group_type')
@@ -71,22 +78,39 @@ class CategoryService
->distinct() ->distinct()
->pluck('group_type'); ->pluck('group_type');
$names = collect(self::DEFAULT_CATEGORY_NAMES) $defaults = collect(self::DEFAULT_CATEGORY_NAMES);
->merge($fromProducts) $extras = $fromProducts
->map(static fn ($name) => trim((string) $name)) ->map(static fn ($name) => trim((string) $name))
->filter() ->filter()
->unique() ->diff($defaults)
->sort()
->values(); ->values();
return $defaults
->merge($extras)
->unique()
->values();
}
public function syncFromProducts(): int
{
$names = $this->collectTargetCategoryNames();
$created = 0; $created = 0;
$order = (int) Category::max('sort_order'); $order = 0;
foreach ($names as $name) { foreach ($names as $name) {
if (Category::where('name', $name)->exists()) { $order++;
$existing = Category::where('name', $name)->first();
if ($existing) {
if ((int) $existing->sort_order !== $order) {
$existing->sort_order = $order;
$existing->save();
}
continue; continue;
} }
$order++;
Category::create([ Category::create([
'name' => $name, 'name' => $name,
'active' => 1, 'active' => 1,