From a010641a8e94124c716228b7e521e47ada8a6092 Mon Sep 17 00:00:00 2001 From: KevinMidboe Date: Fri, 15 Jan 2021 19:16:46 +0100 Subject: [PATCH] Renamed wineinfo -> vinmonopolet. --- api/vinmonopolet.js | 77 +++++++++++++++++++++++++++++++++++++++++++++ api/wineinfo.js | 72 ------------------------------------------ 2 files changed, 77 insertions(+), 72 deletions(-) create mode 100644 api/vinmonopolet.js delete mode 100644 api/wineinfo.js diff --git a/api/vinmonopolet.js b/api/vinmonopolet.js new file mode 100644 index 0000000..32dbacc --- /dev/null +++ b/api/vinmonopolet.js @@ -0,0 +1,77 @@ +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, + 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 searchByQuery = async (query, 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", query); + + 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 searchByEAN = 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 searchById = 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)); +}; + +module.exports = { + searchByQuery, + searchByEAN, + searchById +}; diff --git a/api/wineinfo.js b/api/wineinfo.js deleted file mode 100644 index e52039f..0000000 --- a/api/wineinfo.js +++ /dev/null @@ -1,72 +0,0 @@ -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, - 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 wineSearch = async (req, res) => { - const {query} = req.query - let url = new URL(`https://apis.vinmonopolet.no/products/v0/details-normal?productShortNameContains=test&maxResults=15`) - url.searchParams.set('productShortNameContains', query) - - 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 res.send(winesConverted); -} - -const byEAN = async (req, res) => { - const vinmonopoletResponse = await fetch("https://app.vinmonopolet.no/vmpws/v2/vmp/products/barCodeSearch/" + req.params.ean) - .then(resp => resp.json()) - - if (vinmonopoletResponse.errors != null) { - return vinmonopoletResponse.errors.map(error => { - if (error.type == "UnknownProductError") { - return res.status(404).json({ - message: error.message - }) - } else { - return next() - } - }) - } - - return res.send(vinmonopoletResponse); -}; - -module.exports = { - byEAN, - wineSearch -};