diff --git a/.env.example b/.env.example new file mode 100644 index 00000000000000..653a5ffbdd376e --- /dev/null +++ b/.env.example @@ -0,0 +1 @@ +GIT_REMOTE=https://github.com/group/repo.git \ No newline at end of file diff --git a/database/offers/test-offer copy 2.json b/database/offers/test-offer copy 2.json deleted file mode 100644 index 9e26dfeeb6e641..00000000000000 --- a/database/offers/test-offer copy 2.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/database/offers/test-offer copy.json b/database/offers/test-offer copy.json deleted file mode 100644 index 9e26dfeeb6e641..00000000000000 --- a/database/offers/test-offer copy.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/database/offers/test-offer.json b/database/offers/test-offer.json deleted file mode 100644 index 9e26dfeeb6e641..00000000000000 --- a/database/offers/test-offer.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0249bb79291a86..2bf3129c28dd2f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,6 +41,11 @@ "whatwg-fetch": "2.0.4" } }, + "dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" + }, "graphql-request": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-1.8.2.tgz", diff --git a/package.json b/package.json index 8de4a0fdf3c7ef..f7b5b17e415fb6 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "url": "https://kysune.me" }, "dependencies": { + "dotenv": "^8.2.0", "graphql-request": "1.8.2", "simple-git": "^2.11.0" } diff --git a/update.js b/update.js index eca11dc2d00449..ff774af41cc76f 100644 --- a/update.js +++ b/update.js @@ -1,3 +1,4 @@ +require('dotenv').config({ path: `${__dirname}/.env` }); const Fs = require('fs'); const SimpleGit = require('simple-git'); const { GraphQLClient } = require('graphql-request'); @@ -10,6 +11,7 @@ class Main { this.language = 'en'; this.country = 'US'; this.namespaces = []; // You can add here non-store namespaces e.g. ue (unreal engine market offers) + this.perPage = 1000; this.ql = new GraphQLClient('https://graphql.epicgames.com/graphql', { headers: { @@ -51,8 +53,18 @@ class Main { baseDir: __dirname, binary: 'git', }); - const add = git.add([`${__dirname}/database/.`]); - console.dir(add); + await git.addConfig('hub.protocol', 'https'); + await git.checkoutBranch('master'); + await git.add([`${__dirname}/database/.`]); + const status = await git.status(); + const changesCount = status.created.length + status.modified.length + status.deleted.length + status.renamed.length; + if (changesCount === 0) return; + const commitMessage = `Update - ${Math.floor(Date.now() / 1000)}`; + await git.commit(commitMessage); + await git.removeRemote('origin'); + await git.addRemote('origin', process.env.GIT_REMOTE); + await git.push(['-u', 'origin', 'master']); + console.log(`Changes has commited to repo with message ${commitMessage}`); } saveOffer (offer) { @@ -61,18 +73,26 @@ class Main { }); } + sleep (time) { + return new Promise((resolve) => { + const sto = setTimeout(() => { + clearTimeout(sto); + resolve(); + }, time); + }); + } + async fetchAllOffers (query, params, resultSelector) { - const elements = []; let paging = {}; do { - const result = await this.fetchOffers(query, params, resultSelector, paging.start, paging.count); + const result = await this.fetchOffers(query, params, resultSelector, paging.start, paging.count || this.perPage); paging = result.paging; paging.start += paging.count; for (let i = 0; i < result.elements.length; ++i) { const element = result.elements[i]; this.saveOffer(element); } - } while (paging.start - 1000 < paging.total - paging.count); + } while (paging.start - this.perPage < paging.total - paging.count); } async fetchOffers (query, params, resultSelector, start = 0, count = 1000) { @@ -84,12 +104,15 @@ class Main { }); result = resultSelector(result); return result; - } catch (err) { - console.dir(err); - if(!err.response.data) { - console.dir(err); - if (err.response && err.response.errors) console.log(JSON.stringify(err.response.errors, null, 2)); - }else data = err.response.data; + } catch (error) { + if (error.response) { + console.log(JSON.stringify(error.response, null, 2)); + console.log('Next attempt in 5s...'); + await this.sleep(5000); + return this.fetchOffers(...arguments); + } else { + throw new Error(error); + } } } }