پرش به محتوای اصلی

پاسخ به: [باگ] مشکل مهم در قسمت دسته بندی های محصولات! همونطور که در ویدئو مشاهده میکنید…

#586

علت اصلی (محتمل‌ترین): نمایش سلسله‌مراتبی + UX گمراه‌کننده
وقتی کاربر یک دستهٔ والد را انتخاب می‌کند، کالاهای همهٔ زیردسته‌ها هم نمایش داده می‌شوند. این رفتار عمدی است و در صفحهٔ لیست کالاها و فیلترهای دیگر هم همین‌طور پیاده شده.

مشکل UX: در هدر فقط نام دستهٔ انتخاب‌شده دیده می‌شود (مثلاً «ابزار»)، اما روی هر کارت کالا، چیپ category_name نشان می‌دهد دستهٔ مستقیم همان کالا (مثلاً «دستکش»). کاربر فکر می‌کند کالا در دستهٔ اشتباه است، در حالی که کالا واقعاً زیردستهٔ همان دستهٔ والد است.

category_tree_dialog.dart
Lines 867-871
                                          if (categoryNameProduct != null && categoryNameProduct.isNotEmpty)
                                            _ProductMetaChip(
                                              icon: Icons.category_outlined,
                                              label: categoryNameProduct,
                                            ),

متن رابط هم این را شفاف نمی‌کند:

دکمه: «نمایش کالاهای این دسته»
پیام خالی: «کالایی در این دسته وجود ندارد»
هیچ اشاره‌ای به «شامل زیردسته‌ها» نیست
مدل داده
هر کالا فقط یک category_id دارد (رابطهٔ یک‌به‌چند، نه many-to-many).
فیلتر بک‌اند دقیقاً روی همان فیلد است:

product_repository.py
Lines 198-210
                if field == "category_id":
                    if operator == "in" and isinstance(value, (list, tuple)):
                        category_ids = []
                        for v in value:
                            if v:
                                try:
                                    category_ids.append(int(v))
                                except (ValueError, TypeError):
                                    pass
                        if category_ids:
                            stmt = stmt.where(Product.category_id.in_(category_ids))

اگر کاربر یک برگ (دسته بدون فرزند) را انتخاب کند، فقط کالاهای با category_id همان دسته باید بیایند.

سناریوهای دیگر (کم‌احتمال‌تر)
موضوع توضیح شدت
دادهٔ نادرست
در create/update کالا، بررسی نمی‌شود category_id متعلق به همان کسب‌وکار باشد (فقط در import اکسل چک می‌شود). دادهٔ خراب می‌تواند category_name عجیب بدهد.
متوسط
کش Redis
برای فیلتر چنددسته‌ای فقط اولین category_id برای tag کش استفاده می‌شود. احتمال دادهٔ کهنه کم است (TTL ~۳۰ ثانیه + invalidation گسترده).
پایین
سایه‌اندازی متغیر category_ids
در repository، پارامتر تابع با متغیر محلی فیلتر overlap دارد؛ در سناریوی خاص فیلتر دسته حذف شود. دیالوگ فعلی فقط از filters استفاده می‌کند و معمولاً تحت تأثیر نیست.
پایین
سقف ۱۰۰۰ کالا
لیست ناقص می‌شود، نه اشتباه.
پایین
جمع‌بندی
سوال پاسخ
آیا باگ فیلتر وجود دارد؟
در مسیر عادی دیالوگ، خیر — منطق فیلتر درست است.
چرا کاربران گزارش می‌دهند؟
احتمال زیاد: انتخاب دستهٔ والد + نمایش category_name زیردسته + متن «این دسته» بدون توضیح سلسله‌مراتب.
آیا ممکن است کالای واقعاً اشتباه باشد؟
بله، ولی نادر: دادهٔ خراب در DB یا انتخاب دستهٔ برگ با category_id اشتباه.