115 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const fetch = require("node-fetch");
 | 
						|
const path = require("path");
 | 
						|
const config = require(path.join(__dirname + "/../config/env/lottery.config"));
 | 
						|
 | 
						|
const convertToOurWineObject = wine => {
 | 
						|
  if (wine.basic.ageLimit === "18") {
 | 
						|
    return {
 | 
						|
      name: wine.basic.productShortName,
 | 
						|
      vivinoLink: "https://www.vinmonopolet.no/p/" + wine.basic.productId,
 | 
						|
      rating: wine.basic.alcoholContent,
 | 
						|
      occurences: 0,
 | 
						|
      id: wine.basic.productId,
 | 
						|
      year: wine.basic.vintage,
 | 
						|
      image: `https://bilder.vinmonopolet.no/cache/500x500-0/${wine.basic.productId}-1.jpg`,
 | 
						|
      price: wine.prices[0].salesPrice.toString(),
 | 
						|
      country: wine.origins.origin.country
 | 
						|
    };
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
const convertToOurStoreObject = store => {
 | 
						|
  return {
 | 
						|
    id: store.storeId,
 | 
						|
    name: store.storeName,
 | 
						|
    ...store.address
 | 
						|
  };
 | 
						|
};
 | 
						|
 | 
						|
const searchWinesByName = async (name, page = 1) => {
 | 
						|
  const pageSize = 15;
 | 
						|
  let url = new URL(
 | 
						|
    `https://apis.vinmonopolet.no/products/v0/details-normal?productShortNameContains=gato&maxResults=15`
 | 
						|
  );
 | 
						|
  url.searchParams.set("maxResults", pageSize);
 | 
						|
  url.searchParams.set("start", pageSize * (page - 1));
 | 
						|
  url.searchParams.set("productShortNameContains", name);
 | 
						|
 | 
						|
  const vinmonopoletResponse = await fetch(url, {
 | 
						|
    headers: {
 | 
						|
      "Ocp-Apim-Subscription-Key": config.vinmonopoletToken
 | 
						|
    }
 | 
						|
  })
 | 
						|
    .then(resp => resp.json())
 | 
						|
    .catch(err => console.error(err));
 | 
						|
 | 
						|
  if (vinmonopoletResponse.errors != null) {
 | 
						|
    return vinmonopoletResponse.errors.map(error => {
 | 
						|
      if (error.type == "UnknownProductError") {
 | 
						|
        return res.status(404).json({
 | 
						|
          message: error.message
 | 
						|
        });
 | 
						|
      } else {
 | 
						|
        return next();
 | 
						|
      }
 | 
						|
    });
 | 
						|
  }
 | 
						|
  const winesConverted = vinmonopoletResponse.map(convertToOurWineObject).filter(Boolean);
 | 
						|
 | 
						|
  return winesConverted;
 | 
						|
};
 | 
						|
 | 
						|
const wineByEAN = ean => {
 | 
						|
  const url = `https://app.vinmonopolet.no/vmpws/v2/vmp/products/barCodeSearch/${ean}`;
 | 
						|
  return fetch(url)
 | 
						|
    .then(resp => resp.json())
 | 
						|
    .then(response => response.map(convertToOurWineObject));
 | 
						|
};
 | 
						|
 | 
						|
const wineById = id => {
 | 
						|
  const url = `https://apis.vinmonopolet.no/products/v0/details-normal?productId=${id}`;
 | 
						|
  const options = {
 | 
						|
    headers: {
 | 
						|
      "Ocp-Apim-Subscription-Key": config.vinmonopoletToken
 | 
						|
    }
 | 
						|
  };
 | 
						|
 | 
						|
  return fetch(url, options)
 | 
						|
    .then(resp => resp.json())
 | 
						|
    .then(response => response.map(convertToOurWineObject));
 | 
						|
};
 | 
						|
 | 
						|
const allStores = () => {
 | 
						|
  const url = `https://apis.vinmonopolet.no/stores/v0/details`;
 | 
						|
  const options = {
 | 
						|
    headers: {
 | 
						|
      "Ocp-Apim-Subscription-Key": config.vinmonopoletToken
 | 
						|
    }
 | 
						|
  };
 | 
						|
 | 
						|
  return fetch(url, options)
 | 
						|
    .then(resp => resp.json())
 | 
						|
    .then(response => response.map(convertToOurStoreObject));
 | 
						|
};
 | 
						|
 | 
						|
const searchStoresByName = name => {
 | 
						|
  const url = `https://apis.vinmonopolet.no/stores/v0/details?storeNameContains=${name}`;
 | 
						|
  const options = {
 | 
						|
    headers: {
 | 
						|
      "Ocp-Apim-Subscription-Key": config.vinmonopoletToken
 | 
						|
    }
 | 
						|
  };
 | 
						|
 | 
						|
  return fetch(url, options)
 | 
						|
    .then(resp => resp.json())
 | 
						|
    .then(response => response.map(convertToOurStoreObject));
 | 
						|
};
 | 
						|
 | 
						|
module.exports = {
 | 
						|
  searchWinesByName,
 | 
						|
  wineByEAN,
 | 
						|
  wineById,
 | 
						|
  allStores,
 | 
						|
  searchStoresByName
 | 
						|
};
 |