# نکات پیاده‌سازی — تسک ۰۸: ماژول دسته‌بندی‌ها

## کشینگ
لیست‌های Lookup (استان، شهر، تخصص) به‌ندرت تغییر می‌کنند.
→ نتایج را با Symfony Cache (Redis) کش کن:
```php
public function findByType(string $type): array
{
    return $this->cache->get("categories_{$type}", function (ItemInterface $item) use ($type) {
        $item->expiresAfter(3600); // 1 ساعت
        return $this->repository->findBy(['type' => $type], ['sortOrder' => 'ASC']);
    });
}
```
→ هنگام ایجاد/ویرایش/حذف category، کش مربوط را invalidate کن.

## فیلتر شهر براساس استان
برای لیست شهرها، پارامتر `state_id` اختیاری است:
```
GET /api/v1/categorys/city?state_id=5
```

## مجوزها
```
GET    /api/v1/categorys/*   → عمومی (بدون auth)
POST   /api/v1/category      → ROLE_ADMIN
PATCH  /api/v1/category/{id} → ROLE_ADMIN
DELETE /api/v1/category/{id} → ROLE_ADMIN
```

## نکته نام endpoint
در Drupal از `categorys` (اشتباه گرامری) استفاده شده.
در Symfony همان مسیر را حفظ کن تا کلاینت تغییر نکند.
