From 3df57b5fb001f4a260b8249cbb57641d5e630beb Mon Sep 17 00:00:00 2001 From: marzban-dev Date: Sat, 19 Apr 2025 21:08:07 +0330 Subject: [PATCH 01/14] =?UTF-8?q?=D9=8E=D8=AD=DB=8C=D8=B4=D9=81=D8=AB?= =?UTF-8?q?=DB=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/pages/profile/index.vue | 2 +- frontend/plugins/axios.ts | 23 +++++------------ frontend/plugins/error-handlers.ts | 6 ----- frontend/tools/logger.ts | 40 ------------------------------ 4 files changed, 7 insertions(+), 64 deletions(-) delete mode 100644 frontend/plugins/error-handlers.ts delete mode 100644 frontend/tools/logger.ts diff --git a/frontend/pages/profile/index.vue b/frontend/pages/profile/index.vue index ec5aacc..15f3af6 100644 --- a/frontend/pages/profile/index.vue +++ b/frontend/pages/profile/index.vue @@ -290,7 +290,7 @@ const handleSubmit = (withValidation: boolean) => { { const config = useRuntimeConfig(); const { token } = useAuth(); const axios = axiosOriginal.create({ - baseURL: config.public.API_BASE_URL + baseURL: config.public.API_BASE_URL, }); axios.interceptors.request.use((config) => { - if ( - !config.url?.includes(API_ENDPOINTS.auth.signin) && - !config.url?.includes(API_ENDPOINTS.account.send_otp) - ) { - config.headers.Authorization = token.value - ? `Bearer ${token.value}` - : undefined; + if (!config.url?.includes(API_ENDPOINTS.auth.signin) && !config.url?.includes(API_ENDPOINTS.account.send_otp)) { + config.headers.Authorization = token.value ? `Bearer ${token.value}` : undefined; } return config; @@ -28,19 +22,14 @@ export default defineNuxtPlugin(() => { (response) => { return response; }, - async function(error) { - - if (config.public.DEBUG === "true" && import.meta.server) { - await Logger.axiosErrorLog(error); - } - + async function (error) { return Promise.reject(error); } ); return { provide: { - axios - } + axios, + }, }; }); diff --git a/frontend/plugins/error-handlers.ts b/frontend/plugins/error-handlers.ts deleted file mode 100644 index a008af9..0000000 --- a/frontend/plugins/error-handlers.ts +++ /dev/null @@ -1,6 +0,0 @@ -export default defineNuxtPlugin((nuxtApp) => { - // Also possible - nuxtApp.hook('vue:error', (error, instance, info) => { - // handle error, e.g. report to a service - }) -}) \ No newline at end of file diff --git a/frontend/tools/logger.ts b/frontend/tools/logger.ts deleted file mode 100644 index 7894536..0000000 --- a/frontend/tools/logger.ts +++ /dev/null @@ -1,40 +0,0 @@ -import fs from "fs/promises"; -import { ensureFileExists } from "~/utils"; - -class Logger { - public static async axiosErrorLog(error: any) { - const errorJson = error.toJSON(); - - const nowDate = new Date(); - - const logData: AxiosLogType = { - url: errorJson.config.url, - code: errorJson.code!, - status: errorJson.status!, - method: errorJson.config.method, - response: error?.response?.data, - requestHeaders: errorJson.config.headers, - // responseHeaders: error.response.headers, - payload: errorJson.config.data ? JSON.parse(errorJson.config.data) : undefined, - params: errorJson.config.params ?? undefined, - date: nowDate.toString() - }; - - const logFilePath = ".logs/log.json"; - - try { - await ensureFileExists(logFilePath, "[]"); - - const oldLogs = await fs.readFile(logFilePath, "utf-8"); - const oldLogsJson = JSON.parse(oldLogs) as Record[]; - - oldLogsJson.push(logData); - - await fs.writeFile(logFilePath, JSON.stringify(oldLogsJson, null, 2)); - } catch (e) { - console.error(e); - } - } -} - -export default Logger; \ No newline at end of file From 575fa76c91b327d27dfd75cee5e79b5236d77d50 Mon Sep 17 00:00:00 2001 From: Parsa Nazer Date: Mon, 21 Apr 2025 17:22:07 +0330 Subject: [PATCH 02/14] debug multipule product show --- backend/product/views.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/backend/product/views.py b/backend/product/views.py index ccc51ee..797b97e 100644 --- a/backend/product/views.py +++ b/backend/product/views.py @@ -12,6 +12,7 @@ from drf_spectacular.utils import extend_schema, OpenApiParameter, OpenApiTypes from rest_framework.permissions import AllowAny from order.serializers import OrderItemSerailzier from order.models import OrderModel +from django.db.models import Min, Max # class APIView(APIView): # def __init__(self, *args, **kwargs): # super().__init__(*args, **kwargs) @@ -177,15 +178,16 @@ class AllProductsView(APIView): if search_query: products = products.filter(Q(name__icontains=search_query) | Q(description__icontains=search_query)) - # # Price filters + # Price filters price_gte = request.query_params.get('price_gte', None) price_lte = request.query_params.get('price_lte', None) - - if price_gte: - products = products.filter(variants__price__gte=price_gte) - if price_lte: - products = products.filter(variants__price__lte=price_lte) + products = products.annotate(min_price=Min('variants__price'), max_price=Max('variants__price')) + + if price_gte: + products = products.filter(max_price__gte=price_gte) + if price_lte: + products = products.filter(min_price__lte=price_lte) # Sorting sort_by = request.query_params.get('sort', None) if sort_by in ['name', '-name', 'created_at', '-created_at']: From 5e1d267d12bf97f7518133f538f907e8d58f9703 Mon Sep 17 00:00:00 2001 From: marzban-dev Date: Mon, 21 Apr 2025 17:40:58 +0330 Subject: [PATCH 03/14] Fix product slider bug --- frontend/components/product/ProductHero.vue | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frontend/components/product/ProductHero.vue b/frontend/components/product/ProductHero.vue index 66b6fcf..694624d 100644 --- a/frontend/components/product/ProductHero.vue +++ b/frontend/components/product/ProductHero.vue @@ -59,6 +59,9 @@ watch( (newValue) => { selectedQuantity.value = 1; selectedSlide.value = newValue.images[0].id; + }, + { + immediate: true, } ); From 21093f09d609a37258d03e0c13a13ba52927acbe Mon Sep 17 00:00:00 2001 From: marzban-dev Date: Mon, 21 Apr 2025 21:15:00 +0330 Subject: [PATCH 04/14] Change placeholder of empty slides --- frontend/components/global/product-detail/Slider.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/components/global/product-detail/Slider.vue b/frontend/components/global/product-detail/Slider.vue index f82f172..b033fa7 100644 --- a/frontend/components/global/product-detail/Slider.vue +++ b/frontend/components/global/product-detail/Slider.vue @@ -97,7 +97,9 @@ const changeSlide = (id: number) => { :key="slide" class="py-4" > -
+
+ +
From 471d0bdb54fd6298d4a35b81ef3cd9f240343bff Mon Sep 17 00:00:00 2001 From: marzban-dev Date: Mon, 21 Apr 2025 21:15:20 +0330 Subject: [PATCH 05/14] Add limit for product card colors --- .../components/global/product/ProductCard.vue | 45 ++++++++----------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/frontend/components/global/product/ProductCard.vue b/frontend/components/global/product/ProductCard.vue index 745cdb8..f96e0dc 100644 --- a/frontend/components/global/product/ProductCard.vue +++ b/frontend/components/global/product/ProductCard.vue @@ -22,11 +22,17 @@ type Props = { // props const props = defineProps(); -const { id } = toRefs(props); +const { id, colors } = toRefs(props); // state const { colorObject } = useImageColor(`#product-image-${id.value}`); + +// computed + +const limitedColors = computed(() => { + return colors.value.slice(0, 3); +});