پاسخ به: [باگ] مشکل مهم در قسمت دسته بندی های محصولات! همونطور که در ویدئو مشاهده میکنید…
علت اصلی (محتملترین): نمایش سلسلهمراتبی + 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 اشتباه.