From 8fe91dfbd31b59049b8bc202c8551f0cb38afe1a Mon Sep 17 00:00:00 2001 From: vishnu R <157986076+vishnu-R2005@users.noreply.github.com> Date: Fri, 12 Jun 2026 12:54:50 +0530 Subject: [PATCH 1/9] Cleared the bug with wishlist end point . --- backend/apps/products/urls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/apps/products/urls.py b/backend/apps/products/urls.py index e1006b6..0b8b224 100644 --- a/backend/apps/products/urls.py +++ b/backend/apps/products/urls.py @@ -5,10 +5,10 @@ router = DefaultRouter() router.register('categories', CategoryViewSet, basename='category') -router.register('', ProductViewSet, basename='product') router.register('reviews', ReviewViewSet, basename='review') router.register('wishlist', WishlistViewSet, basename='wishlist') +router.register('', ProductViewSet, basename='product') urlpatterns = [ path('', include(router.urls)), ] From 9318382b3f0795085c84bd186ae791b59a3d72d4 Mon Sep 17 00:00:00 2001 From: vishnu R <157986076+vishnu-R2005@users.noreply.github.com> Date: Fri, 12 Jun 2026 13:15:22 +0530 Subject: [PATCH 2/9] fix(products): resolve product image rendering using media URLs --- frontend/src/components/products/ProductCard.jsx | 8 +++++++- frontend/src/pages/Products.jsx | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/products/ProductCard.jsx b/frontend/src/components/products/ProductCard.jsx index 9aeec75..85a5d44 100644 --- a/frontend/src/components/products/ProductCard.jsx +++ b/frontend/src/components/products/ProductCard.jsx @@ -40,7 +40,13 @@ export default function ProductCard({ product }) {
{product.primary_image ? ( - {product.name} + {product.name} + + ) : (
No Image
)} diff --git a/frontend/src/pages/Products.jsx b/frontend/src/pages/Products.jsx index 91ff94e..afc3c8f 100644 --- a/frontend/src/pages/Products.jsx +++ b/frontend/src/pages/Products.jsx @@ -13,7 +13,7 @@ export default function Products() { useEffect(() => { dispatch(fetchProducts({ search, page, ordering: '-created_at' })) }, [dispatch, search, page]) - + console.log("ProductCard product:", product) return (
From 24a800ef190eccd503a4f373fce3afb7f1d9387b Mon Sep 17 00:00:00 2001 From: vishnu R <157986076+vishnu-R2005@users.noreply.github.com> Date: Sat, 13 Jun 2026 20:58:32 +0530 Subject: [PATCH 3/9] created a addproduct feature to include in admin panel . --- frontend/src/App.jsx | 4 + frontend/src/pages/Products.jsx | 2 +- frontend/src/pages/admin/AddProduct.jsx | 176 +++++++++++++++++++++ frontend/src/pages/admin/AdminProducts.jsx | 156 ++++++++++++++++++ frontend/src/services/api.js | 3 + 5 files changed, 340 insertions(+), 1 deletion(-) create mode 100644 frontend/src/pages/admin/AddProduct.jsx create mode 100644 frontend/src/pages/admin/AdminProducts.jsx diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index e7af8df..7c315db 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -35,6 +35,8 @@ export default function App() { const dispatch = useDispatch() const { darkMode } = useSelector((s) => s.theme) const { isAuthenticated } = useSelector((s) => s.auth) + const AdminProducts = lazy(() => import('./pages/admin/AdminProducts')) + const AddProduct = lazy(() => import('./pages/admin/AddProduct')) useEffect(() => { dispatch(setDarkMode(darkMode)) @@ -63,6 +65,8 @@ export default function App() { } /> } /> } /> + }/> + }/> diff --git a/frontend/src/pages/Products.jsx b/frontend/src/pages/Products.jsx index afc3c8f..91ff94e 100644 --- a/frontend/src/pages/Products.jsx +++ b/frontend/src/pages/Products.jsx @@ -13,7 +13,7 @@ export default function Products() { useEffect(() => { dispatch(fetchProducts({ search, page, ordering: '-created_at' })) }, [dispatch, search, page]) - console.log("ProductCard product:", product) + return (
diff --git a/frontend/src/pages/admin/AddProduct.jsx b/frontend/src/pages/admin/AddProduct.jsx new file mode 100644 index 0000000..38c6a1e --- /dev/null +++ b/frontend/src/pages/admin/AddProduct.jsx @@ -0,0 +1,176 @@ +import { useState } from 'react' +import { useNavigate } from 'react-router-dom' +import toast from 'react-hot-toast' +import { productsAPI } from '../../services/api' + +export default function AddProduct() { + const navigate = useNavigate() + + const [formData, setFormData] = useState({ + name: '', + description: '', + price: '', + discount_price: '', + stock: '', + sku: '', + brand: '', + category: '', + is_featured: false, + is_active: true, + }) + + const [loading, setLoading] = useState(false) + + const handleChange = (e) => { + const { name, value, type, checked } = e.target + + setFormData((prev) => ({ + ...prev, + [name]: type === 'checkbox' ? checked : value, + })) + } + + const handleSubmit = async (e) => { + e.preventDefault() + + try { + setLoading(true) + + await productsAPI.create({ + ...formData, + price: Number(formData.price), + discount_price: formData.discount_price + ? Number(formData.discount_price) + : null, + stock: Number(formData.stock), + category: Number(formData.category), + }) + + toast.success('Product created successfully') + + navigate('/admin/products') + } catch (error) { + console.error(error) + toast.error('Failed to create product') + } finally { + setLoading(false) + } + } + + return ( +
+ +

+ Add Product +

+ +
+ + + +