summaryrefslogtreecommitdiff
path: root/src/lib/product/api/productSearchApi.js
diff options
context:
space:
mode:
authorMqdd <ahmadmiqdad27@gmail.com>2026-02-19 14:25:30 +0700
committerMqdd <ahmadmiqdad27@gmail.com>2026-02-19 14:25:30 +0700
commitadb28e824ca2d05244ad939a273067e5b7e38f76 (patch)
treeeb2b673ccbd7052be1eb83ac35341bfacd826d8d /src/lib/product/api/productSearchApi.js
parent4a85f437cfa7a61bebd341c9a509abccbd64745b (diff)
<Miqdad> done all
Diffstat (limited to 'src/lib/product/api/productSearchApi.js')
-rw-r--r--src/lib/product/api/productSearchApi.js31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/lib/product/api/productSearchApi.js b/src/lib/product/api/productSearchApi.js
index a84caa3c..1a6ad36a 100644
--- a/src/lib/product/api/productSearchApi.js
+++ b/src/lib/product/api/productSearchApi.js
@@ -2,8 +2,37 @@ import _ from 'lodash-contrib';
import axios from 'axios';
const productSearchApi = async ({ query, operation = 'OR' }) => {
+ // Use POST for large product ID arrays to avoid URL length limits
+ // GET request URL limit is typically 2KB-8KB; switch to POST if query string is large
+ const QUERY_SIZE_THRESHOLD = 2000; // Switch to POST if query > 2KB
+
+ if (query.length > QUERY_SIZE_THRESHOLD) {
+ console.log(
+ `[productSearchApi] Large query (${query.length} chars), using POST`,
+ );
+
+ // Parse query string into object for POST body
+ const params = new URLSearchParams(query);
+ const bodyData = {
+ ...Object.fromEntries(params),
+ operation,
+ };
+
+ const dataProductSearch = await axios.post(
+ `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/search`,
+ bodyData,
+ {
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ },
+ );
+ return dataProductSearch.data;
+ }
+
+ // Small query, use standard GET request
const dataProductSearch = await axios(
- `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/search?${query}&operation=${operation}`
+ `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/search?${query}&operation=${operation}`,
);
return dataProductSearch.data;
};