vinmonopolet-ts
Version:
Extracts information on products, categories and stores from Vinmonopolet
33 lines (32 loc) • 1.5 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const GET_1 = require("../../util/GET");
const constants_1 = require("../../constants");
const Pagination_1 = __importDefault(require("../../models/Pagination"));
const mapper_1 = require("../../models/product/mapper");
const sortFields = ["relevance", "name", "price"];
const sortOrders = ["asc", "desc"];
async function getProducts(options) {
const query = createSearchQuery(options);
const productSearchResult = await (0, GET_1.GET)(constants_1.VINMONOPOLET_SEARCH_URL, query);
return {
pagination: new Pagination_1.default(productSearchResult.pagination, options, getProducts),
products: productSearchResult.products.map(mapper_1.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(":"),
});
}
exports.default = getProducts;