Advertisement
Guest User

Untitled

a guest
Dec 13th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. exports.getMarketOffers = (req, res, next) => {
  2.   const conditions = {
  3.     1: "MT",
  4.     2: "NM",
  5.     3: "EX",
  6.     4: "GD",
  7.     5: "LP",
  8.     6: "PL",
  9.     7: "PO"
  10.   };
  11.  
  12.   const filter = type => {
  13.     let { language, condition, foil } = req.query;
  14.     language = parseInt(language);
  15.     condition = parseInt(condition);
  16.     isFoil = parseInt(foil);
  17.  
  18.     let filterObj = {};
  19.  
  20.     if (type === "market") {
  21.       if (condition) {
  22.         filterObj["minCondition"] = conditions[condition];
  23.       }
  24.  
  25.       if (language) {
  26.         filterObj["idLanguage"] = language;
  27.       }
  28.  
  29.       if (isFoil) {
  30.         filterObj["isFoil"] = isFoil === 1 ? true : false;
  31.       }
  32.     } else if (type === "local") {
  33.       //Condition is resolved later
  34.       if (language) {
  35.         filterObj["language.idLanguage"] = language;
  36.       }
  37.       if (isFoil) {
  38.         filterObj["isFoil"] = isFoil === 1 ? true : false;
  39.       }
  40.     }
  41.  
  42.     return filterObj;
  43.   };
  44.  
  45.   Client.request("GET", "/ws/v2.0/output.json/products/find", {
  46.     search: req.query.cardName
  47.   })
  48.     .then(mkmres => {
  49.       if (mkmres.status !== 200)
  50.         return next(["Problém s pripojením na Cardmarket. Skúste neskôr."]);
  51.  
  52.       let jsonres = JSON.parse(mkmres.response);
  53.       const printings = jsonres.product;
  54.       User.find({ trading: true }, (err, users) => {
  55.         if (err) return next(["err"]);
  56.         let localTraders = [];
  57.         let traders = [];
  58.         users.map(user => {
  59.           if (
  60.             user.cardmarket &&
  61.             (req.query.county === "all" || req.query.county === user.county)
  62.           ) {
  63.             if (user.locally) {
  64.               localTraders.push(user.cardmarket);
  65.             } else {
  66.               traders.push(user.cardmarket);
  67.             }
  68.           }
  69.         });
  70.         let responses = [];
  71.  
  72.         let filters = filter("market");
  73.         var promises = printings.map(printing => {
  74.           return [
  75.             new Promise((resolve, reject) => {
  76.               Client.request(
  77.                 "GET",
  78.                 "/ws/v2.0/output.json/articles/" + printing.idProduct,
  79.                 { ...filters, start: 0, maxResults: 1000 }
  80.               )
  81.                 .then(mkmres => {
  82.                   if (mkmres.response) {
  83.                     const jsonres = JSON.parse(mkmres.response);
  84.                     const jsonArticles = jsonres.article;
  85.                     let tradersArticles = [];
  86.  
  87.                     jsonArticles.map(article => {
  88.                       if (traders.includes(article.seller.username)) {
  89.                         article["name"] = printing.enName;
  90.                         article["expansion"] = printing.expansionName;
  91.                         article["seller"] = article.seller.username;
  92.                         article["rarity"] = printing.rarity;
  93.                         article["image"] = printing.image;
  94.                         article["website"] = printing.website;
  95.  
  96.                         tradersArticles.push(article);
  97.                       }
  98.                     });
  99.  
  100.                     if (tradersArticles.length > 0) {
  101.                       responses = [...responses, ...tradersArticles];
  102.                     }
  103.                   }
  104.                   resolve();
  105.                 })
  106.                 .catch(err => {
  107.                   reject();
  108.                   return next(["err"]);
  109.                 });
  110.             }),
  111.  
  112.             new Promise((resolve, reject) => {
  113.               let filters = filter("local");
  114.               Article.find(
  115.                 { idProduct: printing.idProduct, ...filters },
  116.                 (err, articles) => {
  117.                   if (err) return next(["err"]);
  118.  
  119.                   articles.map(article => {
  120.                     let localArticle = Object.assign({}, article._doc);
  121.  
  122.                     let [conditionValue] = Object.keys(conditions).filter(
  123.                       i => conditions[i] === localArticle.condition
  124.                     );
  125.                     if (
  126.                       parseInt(conditionValue) <= parseInt(req.query.condition)
  127.                     ) {
  128.                       localArticle["name"] = printing.enName;
  129.                       localArticle["expansion"] = printing.expansionName;
  130.                       localArticle["rarity"] = printing.rarity;
  131.                       localArticle["image"] = printing.image;
  132.                       localArticle["website"] = printing.website;
  133.  
  134.                       responses.push(localArticle);
  135.                     }
  136.                   });
  137.                   resolve();
  138.                 }
  139.               );
  140.             })
  141.           ];
  142.         });
  143.         let formattedPromises = [];
  144.         promises.map(array => {
  145.           formattedPromises = [...formattedPromises, ...array];
  146.         });
  147.         Promise.all(formattedPromises)
  148.           .then(() => {
  149.             res.send(responses);
  150.           })
  151.           .catch(err => {
  152.             return next(["err"]);
  153.           });
  154.       });
  155.     })
  156.     .catch(err => {
  157.       next(err);
  158.     });
  159. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement