Get stores from vinmonopolet.

Update all endpoint names to distinguish between wine and store actions.
Renamed wineController to vinmonopoletController.
This commit is contained in:
2021-01-24 13:59:34 +01:00
parent 6d5f0e824f
commit fac50805bd
3 changed files with 129 additions and 52 deletions

View File

@@ -0,0 +1,85 @@
const path = require("path");
const vinmonopoletRepository = require(path.join(__dirname, "../vinmonopolet"));
function searchWines(req, res) {
const { name, page } = req.query;
return vinmonopoletRepository.searchWinesByName(name, page).then(wines =>
res.json({
wines: wines,
count: wines.length,
page: page,
success: true
})
);
}
function wineByEAN(req, res) {
const { ean } = req.params;
return vinmonopoletRepository.searchByEAN(ean).then(wines =>
res.json({
wines: wines,
success: true
})
);
}
function wineById(req, res) {
const { id } = req.params;
return vinmonopoletRepository.searchById(id).then(wines =>
res.json({
wine: wines[0],
success: true
})
);
}
function allStores(req, res) {
return vinmonopoletRepository
.allStores()
.then(stores =>
res.send({
stores,
success: true
})
)
.catch(error => {
const { statusCode, message } = error;
return res.status(statusCode || 500).send({
message: message || "Unexpected error occured while fetch all vinmonopolet stores.",
success: false
});
});
}
function searchStores(req, res) {
const { name } = req.query;
return vinmonopoletRepository
.searchStoresByName(name)
.then(stores =>
res.send({
stores,
success: true
})
)
.catch(error => {
const { statusCode, message } = error;
return res.status(statusCode || 500).send({
message: message || "Unexpected error occured while fetch all vinmonopolet stores.",
success: false
});
});
}
module.exports = {
searchWines,
wineByEAN,
wineById,
allStores,
searchStores
};

View File

@@ -1,44 +0,0 @@
const path = require("path");
const vinmonopoletRepository = require(path.join(__dirname, "../vinmonopolet"));
function search(req, res) {
const { query, page } = req.query;
console.log(query, page);
return vinmonopoletRepository.searchByQuery(query, page).then(wines =>
res.json({
wines: wines,
count: wines.length,
page: page,
success: true
})
);
}
function ean(req, res) {
const { ean } = req.params;
return vinmonopoletRepository.searchByEAN(ean).then(wines =>
res.json({
wines: wines,
success: true
})
);
}
function id(req, res) {
const { id } = req.params;
return vinmonopoletRepository.searchById(id).then(wines =>
res.json({
wine: wines[0],
success: true
})
);
}
module.exports = {
search,
ean,
id
};

View File

@@ -17,14 +17,22 @@ const convertToOurWineObject = wine => {
}
};
const searchByQuery = async (query, page = 1) => {
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", query);
url.searchParams.set("productShortNameContains", name);
const vinmonopoletResponse = await fetch(url, {
headers: {
@@ -50,14 +58,14 @@ const searchByQuery = async (query, page = 1) => {
return winesConverted;
};
const searchByEAN = ean => {
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 searchById = id => {
const wineById = id => {
const url = `https://apis.vinmonopolet.no/products/v0/details-normal?productId=${id}`;
const options = {
headers: {
@@ -70,8 +78,36 @@ const searchById = id => {
.then(response => response.map(convertToOurWineObject));
};
module.exports = {
searchByQuery,
searchByEAN,
searchById
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
};