Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- exports.getMarketOffers = (req, res, next) => {
- const conditions = {
- 1: "MT",
- 2: "NM",
- 3: "EX",
- 4: "GD",
- 5: "LP",
- 6: "PL",
- 7: "PO"
- };
- const filter = type => {
- let { language, condition, foil } = req.query;
- language = parseInt(language);
- condition = parseInt(condition);
- isFoil = parseInt(foil);
- let filterObj = {};
- if (type === "market") {
- if (condition) {
- filterObj["minCondition"] = conditions[condition];
- }
- if (language) {
- filterObj["idLanguage"] = language;
- }
- if (isFoil) {
- filterObj["isFoil"] = isFoil === 1 ? true : false;
- }
- } else if (type === "local") {
- //Condition is resolved later
- if (language) {
- filterObj["language.idLanguage"] = language;
- }
- if (isFoil) {
- filterObj["isFoil"] = isFoil === 1 ? true : false;
- }
- }
- return filterObj;
- };
- Client.request("GET", "/ws/v2.0/output.json/products/find", {
- search: req.query.cardName
- })
- .then(mkmres => {
- if (mkmres.status !== 200)
- return next(["Problém s pripojením na Cardmarket. Skúste neskôr."]);
- let jsonres = JSON.parse(mkmres.response);
- const printings = jsonres.product;
- User.find({ trading: true }, (err, users) => {
- if (err) return next(["err"]);
- let localTraders = [];
- let traders = [];
- users.map(user => {
- if (
- user.cardmarket &&
- (req.query.county === "all" || req.query.county === user.county)
- ) {
- if (user.locally) {
- localTraders.push(user.cardmarket);
- } else {
- traders.push(user.cardmarket);
- }
- }
- });
- let responses = [];
- let filters = filter("market");
- var promises = printings.map(printing => {
- return [
- new Promise((resolve, reject) => {
- Client.request(
- "GET",
- "/ws/v2.0/output.json/articles/" + printing.idProduct,
- { ...filters, start: 0, maxResults: 1000 }
- )
- .then(mkmres => {
- if (mkmres.response) {
- const jsonres = JSON.parse(mkmres.response);
- const jsonArticles = jsonres.article;
- let tradersArticles = [];
- jsonArticles.map(article => {
- if (traders.includes(article.seller.username)) {
- article["name"] = printing.enName;
- article["expansion"] = printing.expansionName;
- article["seller"] = article.seller.username;
- article["rarity"] = printing.rarity;
- article["image"] = printing.image;
- article["website"] = printing.website;
- tradersArticles.push(article);
- }
- });
- if (tradersArticles.length > 0) {
- responses = [...responses, ...tradersArticles];
- }
- }
- resolve();
- })
- .catch(err => {
- reject();
- return next(["err"]);
- });
- }),
- new Promise((resolve, reject) => {
- let filters = filter("local");
- Article.find(
- { idProduct: printing.idProduct, ...filters },
- (err, articles) => {
- if (err) return next(["err"]);
- articles.map(article => {
- let localArticle = Object.assign({}, article._doc);
- let [conditionValue] = Object.keys(conditions).filter(
- i => conditions[i] === localArticle.condition
- );
- if (
- parseInt(conditionValue) <= parseInt(req.query.condition)
- ) {
- localArticle["name"] = printing.enName;
- localArticle["expansion"] = printing.expansionName;
- localArticle["rarity"] = printing.rarity;
- localArticle["image"] = printing.image;
- localArticle["website"] = printing.website;
- responses.push(localArticle);
- }
- });
- resolve();
- }
- );
- })
- ];
- });
- let formattedPromises = [];
- promises.map(array => {
- formattedPromises = [...formattedPromises, ...array];
- });
- Promise.all(formattedPromises)
- .then(() => {
- res.send(responses);
- })
- .catch(err => {
- return next(["err"]);
- });
- });
- })
- .catch(err => {
- next(err);
- });
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement