diff --git a/app/category/[categoryName]/page.tsx b/app/category/[categoryName]/page.tsx
index 1b47aea..6a988a4 100644
--- a/app/category/[categoryName]/page.tsx
+++ b/app/category/[categoryName]/page.tsx
@@ -1,91 +1,40 @@
-import { products } from "@/lib/data";
-import ProductCard from "@/components/productcard";
+import { getProductsByCategory } from "@/public/src/services/products/api";
-interface PageProps {
- params: Promise<{ categoryName: string }>;
-}
+export default async function CategoryPage({ params }:any) {
-export default async function CategoryPage({ params }: PageProps) {
- try {
- // ۱. دریافت پارامترها
- const resolvedParams = await params;
- const rawCategoryName = resolvedParams.categoryName;
-
-
- // ۲. دیکد کردن آدرس
- const decodedUrl = decodeURIComponent(rawCategoryName);
+ const { categoryName } = await params;
- // ۳. آمادهسازی رشته برای مقایسه
- const categoryNameToMatch = decodedUrl.replace(/-/g, " ").trim();
+ console.log("🔎 CategoryPage slug:", categoryName);
- // استخراج تمام دستهبندیهای موجود در دیتابیس (برای بررسی چشمی)
- const allCategoriesInDb = Array.from(new Set(products.map(p => p.category)));
+ const products = await getProductsByCategory(categoryName);
- // ۴. فیلتر کردن (با حذف فاصلههای اضافی از دو طرف برای اطمینان)
- const filteredProducts = products.filter(
- (p) => p.category.trim() === categoryNameToMatch
- );
+ return (
+
- // ۵. اگر پیدا نشد، صفحه دیباگ را در مرورگر نمایش بده
- if (!filteredProducts || filteredProducts.length === 0) {
- return (
-
-
-
محصولی پیدا نشد (حالت دیباگ)
-
-
-
پارامتر دریافت شده از URL: {rawCategoryName}
-
رشتهی آماده شده برای جستجو: {categoryNameToMatch} (طول: {categoryNameToMatch.length} کاراکتر)
-
+
+ دستهبندی: {categoryName}
+
-
لیست دستهبندیهای موجود در دیتابیس شما:
-
- {allCategoriesInDb.map((cat, index) => (
-
- "{cat}" (طول: {cat.length} کاراکتر)
-
- ))}
-
-
-
- لطفا طول کاراکترها و املای کلمات را در لیست بالا مقایسه کنید. (آیا نیمفاصله یا فاصله اضافه وجود دارد؟)
-
- نکته مهم: برای دیدن لاگهای بیشتر، ترمینال (کنسول) محیط توسعه (مثلاً VSCode) را چک کنید، نه کنسول مرورگر را.
+
- {/* ========================================= */}
- {/* بخش 1: معرفی محصول (بالای ستون راست) */}
- {/* دسکتاپ: 8 ستون عرض دارد. موبایل: اولین آیتم نمایش داده میشود */}
- {/* ========================================= */}
+ {/* بخش 1: معرفی محصول */}
- طراحی شده برای عملکرد در دورهای بالا با آببندی کامل پلاستیکی (Rubber Seal). مناسب برای الکتروموتور و گیربکس.
+ {product.meta?.shortDescription || 'توضیحات کوتاهی برای این محصول ثبت نشده است.'}
-
- تحمل بار ($C$)
- {product.loadCapacity}
-
-
- سرعت نهایی
- {product.maxSpeed}
-
-
- نوع آببند
- {product.sealType}
-
-
- محدوده دما
- {product.tempRange}
-
-
+ {/* رندر داینامیک ۳ ویژگی اول از API */}
+ {product.attributes?.slice(0, 3).map((attr: any) => (
+
+ {attr.name}
+ {attr.valueText || '-'}
+
+ ))}
+
+ {/* آیتم چهارم: دستهبندی (برای حفظ ظاهر گرید ۴ تایی) */}
+
- {/* ========================================= */}
- {/* بخش 2: سایدبار و دکمه خرید (ستون چپ) */}
- {/* دسکتاپ: 4 ستون عرض دارد و 2 ردیف طول دارد (row-span-2) تا کنار هر دو بخش راست بماند */}
- {/* موبایل: با order-2 بین بخش معرفی و مشخصات قرار میگیرد */}
- {/* ========================================= */}
+ {/* بخش 2: سایدبار و دکمه خرید */}
- {/* کانتینر استیکی */}
- {product.stock ? (
+ {hasStock ? (
- موجود در انبار شیراز
+ موجود در انبار ({product.stock} عدد)
- {/* ========================================= */}
- {/* بخش 3: مشخصات ابعادی (پایین ستون راست) */}
- {/* دسکتاپ: 8 ستون عرض دارد و به طور خودکار زیر بخش معرفی قرار میگیرد */}
- {/* موبایل: با order-3 در انتهای صفحه قرار میگیرد */}
- {/* ========================================= */}
+ {/* بخش 3: مشخصات ابعادی */}
+ {/*
+ ✅ این بخش را تغییر میدهیم تا نام attribute ها را بگیریم
+ اگر attribute اول وجود داشت، نامش را بگیر و نمایش بده
+ اگر attribute اول نبود، نمایش نده
+ */}
+ {product.attributes?.[0] && (
+
+
{product.attributes[0].name}:
{/* 👈 نام attribute اول */}
+
{product.attributes[0].valueText || "-"}
{/* 👈 مقدار attribute اول */}
+
+ )}
-
-
قطر خارجی (D):
-
{product.d}
-
+ {/*
+ ✅ مشابه بالا برای attribute دوم
+ */}
+ {product.attributes?.[1] && (
+
+
{product.attributes[1].name}:
{/* 👈 نام attribute دوم */}
+
{product.attributes[1].valueText || "-"}
{/* 👈 مقدار attribute دوم */}
+
+ )}
- {/* بخش قیمت و دکمه خرید */}
+
{product.price ? (
{formattedPrice} تومان
- {/* بررسی موجودی برای نمایش دکمه سبد خرید */}
{product.stock ? (
quantity > 0 ? (
-