From b388bbfc523ca984d4d09634a608c7f5f0fce8d2 Mon Sep 17 00:00:00 2001 From: Mamalizz Date: Wed, 21 May 2025 17:34:05 +0330 Subject: [PATCH 01/11] changed directory --- frontend/components/{products => global}/FilterButton.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename frontend/components/{products => global}/FilterButton.vue (93%) diff --git a/frontend/components/products/FilterButton.vue b/frontend/components/global/FilterButton.vue similarity index 93% rename from frontend/components/products/FilterButton.vue rename to frontend/components/global/FilterButton.vue index 7b3d950..9639d4b 100644 --- a/frontend/components/products/FilterButton.vue +++ b/frontend/components/global/FilterButton.vue @@ -11,7 +11,7 @@ - + From a5a6a130f891d9d50e76d2ccf55df1bb4a5313c2 Mon Sep 17 00:00:00 2001 From: Mamalizz Date: Wed, 21 May 2025 17:34:15 +0330 Subject: [PATCH 02/11] changed directory --- frontend/components/{global => }/products/FilterProducts.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename frontend/components/{global => }/products/FilterProducts.vue (99%) diff --git a/frontend/components/global/products/FilterProducts.vue b/frontend/components/products/FilterProducts.vue similarity index 99% rename from frontend/components/global/products/FilterProducts.vue rename to frontend/components/products/FilterProducts.vue index a957cfe..ae280d7 100644 --- a/frontend/components/global/products/FilterProducts.vue +++ b/frontend/components/products/FilterProducts.vue @@ -1,7 +1,7 @@ + + From 469fade219e6c9d0696f7a66bba285f0b4f008c3 Mon Sep 17 00:00:00 2001 From: Mamalizz Date: Wed, 21 May 2025 17:34:59 +0330 Subject: [PATCH 05/11] changed directory --- .../composables/api/{product => categories}/useGetCategories.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename frontend/composables/api/{product => categories}/useGetCategories.ts (100%) diff --git a/frontend/composables/api/product/useGetCategories.ts b/frontend/composables/api/categories/useGetCategories.ts similarity index 100% rename from frontend/composables/api/product/useGetCategories.ts rename to frontend/composables/api/categories/useGetCategories.ts From 55ac2a1c4232f61f4bb745ad4ab319a559ff537f Mon Sep 17 00:00:00 2001 From: Mamalizz Date: Wed, 21 May 2025 17:35:13 +0330 Subject: [PATCH 06/11] added use get resellers categories --- .../resellers/useGetResellersCategories.ts | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 frontend/composables/api/resellers/useGetResellersCategories.ts diff --git a/frontend/composables/api/resellers/useGetResellersCategories.ts b/frontend/composables/api/resellers/useGetResellersCategories.ts new file mode 100644 index 0000000..9e97ec8 --- /dev/null +++ b/frontend/composables/api/resellers/useGetResellersCategories.ts @@ -0,0 +1,37 @@ +// imports + +import { useQuery } from "@tanstack/vue-query"; +import { API_ENDPOINTS, QUERY_KEYS } from "~/constants"; + +// types + +export type GetResellersCategoriesResponse = { + id: number; + title: string; + description: string; + link: string; + image: string; +}[]; + +const useGetResellersCategories = () => { + // state + + const { $axios: axios } = useNuxtApp(); + + // methods + + const handleGetResellersCategories = async () => { + const { data } = await axios.get( + `${API_ENDPOINTS.resellers_products.categories}` + ); + + return data; + }; + + return useQuery({ + queryKey: [QUERY_KEYS.resellers_categories], + queryFn: () => handleGetResellersCategories(), + }); +}; + +export default useGetResellersCategories; From 317b95663c84e7e2b03f9f3f6da497c26b9fa886 Mon Sep 17 00:00:00 2001 From: Mamalizz Date: Wed, 21 May 2025 17:35:19 +0330 Subject: [PATCH 07/11] added use get resellers products --- .../api/resellers/useGetResellersProducts.ts | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 frontend/composables/api/resellers/useGetResellersProducts.ts diff --git a/frontend/composables/api/resellers/useGetResellersProducts.ts b/frontend/composables/api/resellers/useGetResellersProducts.ts new file mode 100644 index 0000000..269e70e --- /dev/null +++ b/frontend/composables/api/resellers/useGetResellersProducts.ts @@ -0,0 +1,55 @@ +// imports + +import { useQuery } from "@tanstack/vue-query"; +import { API_ENDPOINTS, QUERY_KEYS } from "~/constants"; + +// types + +export type GetResellersProductsResponse = ApiPaginated; + +export type GetResellersProductsFilters = { + search?: string | undefined; + sort?: string | undefined; + category?: string | undefined; + price_gte: number; + price_lte: number; + has_discount?: boolean | undefined; + in_stock?: boolean | undefined; + page: number; +}; + +// composable + +const useGetResellersProducts = (params?: ComputedRef) => { + // state + + const { $axios: axios } = useNuxtApp(); + + // methods + + const handleGetResellersProducts = async (params?: GetResellersProductsFilters) => { + const { data } = await axios.get(`${API_ENDPOINTS.resellers_products.get_all}`, { + params: { + sort: params?.sort, + in_stock: params?.in_stock, + search: params?.search, + has_discount: params?.has_discount, + category: params?.category, + price_gte: params?.price_gte, + price_lte: params?.price_lte, + offset: Number(params?.page) * 15 - 15, + limit: 15, + }, + }); + + return data; + }; + + return useQuery({ + staleTime: 60 * 1000, + queryKey: [QUERY_KEYS.resellers_products, params], + queryFn: () => handleGetResellersProducts(params?.value), + }); +}; + +export default useGetResellersProducts; From 32e2b06db2e0fe86a50952db66464b2a4a075a44 Mon Sep 17 00:00:00 2001 From: Mamalizz Date: Wed, 21 May 2025 17:35:36 +0330 Subject: [PATCH 08/11] added resellers api routes and query keys --- frontend/constants/index.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frontend/constants/index.ts b/frontend/constants/index.ts index 527d3c8..e039ece 100644 --- a/frontend/constants/index.ts +++ b/frontend/constants/index.ts @@ -35,6 +35,10 @@ export const API_ENDPOINTS = { get_all: "/products", categories: "/products/categories", }, + resellers_products: { + get_all: "/products/slider_category", + categories: "/products/slider_categories", + }, tickets: { get_all: "/tickets", create: "/tickets/create", @@ -71,8 +75,10 @@ export const QUERY_KEYS = { chat: "chat", product: "product", products: "products", + resellers_products: "resellers_products", account: "account", categories: "categories", + resellers_categories: "resellers_categories", addresses: "addresses", tickets: "tickets", ticket: "ticket", From 490b644c823ee59424f8fc312f0153d6bdec1cd4 Mon Sep 17 00:00:00 2001 From: Mamalizz Date: Wed, 21 May 2025 17:35:55 +0330 Subject: [PATCH 09/11] added resellers page --- frontend/pages/category.vue | 2 +- frontend/pages/resellers/[...slug].vue | 164 +++++++++++++++++++++++++ 2 files changed, 165 insertions(+), 1 deletion(-) create mode 100644 frontend/pages/resellers/[...slug].vue diff --git a/frontend/pages/category.vue b/frontend/pages/category.vue index 8fd4ed9..4617bf3 100644 --- a/frontend/pages/category.vue +++ b/frontend/pages/category.vue @@ -1,7 +1,7 @@ + + + + From 887fe58254a1a4a077da269da1a50f7b0e4c0eda Mon Sep 17 00:00:00 2001 From: Mamalizz Date: Wed, 21 May 2025 17:36:12 +0330 Subject: [PATCH 10/11] changed filter button logic --- frontend/pages/products/[...slug].vue | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/frontend/pages/products/[...slug].vue b/frontend/pages/products/[...slug].vue index 33708d4..8a2cc28 100644 --- a/frontend/pages/products/[...slug].vue +++ b/frontend/pages/products/[...slug].vue @@ -75,13 +75,6 @@ watch(
-

لیست محصولات

@@ -102,7 +95,11 @@ watch( - + + + From a88fd43a424c89e768a00a66dd74e26b73867bd3 Mon Sep 17 00:00:00 2001 From: Parsa Nazer <129178874+Greenstorm911@users.noreply.github.com> Date: Wed, 21 May 2025 17:44:26 +0330 Subject: [PATCH 11/11] Update urls.py --- backend/product/urls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/product/urls.py b/backend/product/urls.py index 59cc686..3d27c64 100644 --- a/backend/product/urls.py +++ b/backend/product/urls.py @@ -6,6 +6,6 @@ urlpatterns = [ path('slider_category', ShowCaseProductsView.as_view(), name='category-products'), path('categories', AllCategories.as_view(), name='all-categories'), path('slider_categories', ShowCaseCategoryListView.as_view(), name='all-categories'), - path('', ProductView.as_view(), name='product-detail'), + path('', ProductView.as_view(), name='product-detail'), path('comments/', CommentView.as_view(), name='comment-views'), ] \ No newline at end of file