vinmonopolet-ts
Version:
Extracts information on products, categories and stores from Vinmonopolet
28 lines (27 loc) • 1.23 kB
JavaScript
import { GET } from "../../util/GET";
import { VINMONOPOLET_SEARCH_URL } from "../../constants";
import Pagination from "../../models/Pagination";
import { fromDTOToBaseProduct } from "../../models/product/mapper";
const sortFields = ["relevance", "name", "price"];
const sortOrders = ["asc", "desc"];
async function getProducts(options) {
const query = createSearchQuery(options);
const productSearchResult = await GET(VINMONOPOLET_SEARCH_URL, query);
return {
pagination: new Pagination(productSearchResult.pagination, options, getProducts),
products: productSearchResult.products.map(fromDTOToBaseProduct),
};
}
function createSearchQuery(options) {
const facetquery = options?.facets?.map((facet) => facet.query) ?? [];
const sortQuery = options?.sort ? `:${options.sort}:` : ":relevance:";
const textQuery = options?.query ?? "";
return new URLSearchParams({
searchType: "product",
fields: "FULL",
pageSize: (options?.limit ? options.limit : 24).toString(),
currentPage: (options?.page ? options.page - 1 : 0).toString(),
q: textQuery + sortQuery + facetquery?.join(":"),
});
}
export default getProducts;