{"action":"created","comment":{"url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/pulls/comments/154593398","pull_request_review_id":80776272,"id":154593398,"diff_hunk":"@@ -0,0 +1,254 @@\n+import _ from 'lodash'\n+import Promise from 'bluebird'\n+\n+export default class ProductManager {\n+  constructor (logger, client) {\n+    this.client = client\n+    this.logger = logger.child({ service: 'productManager' })\n+\n+    this.loadBatchCount = 20\n+    this.loadConcurrency = 2\n+  }\n+\n+  createProduct (product) {\n+    this.logger.debug('Creating product', product)\n+\n+    return this.client.products\n+      .create(product)\n+      .then(res => res.body)\n+  }\n+\n+  publishProduct (product) {\n+    const actions = [{\n+      action: 'publish'\n+    }]\n+\n+    return this.updateProduct(product, actions)\n+  }\n+\n+  updateProduct (product, actions) {\n+    const request = {\n+      version: product.version,\n+      actions\n+    }\n+\n+    return this.client.products\n+      .byId(product.id)\n+      .update(request)\n+      .then(res => res.body)\n+  }\n+\n+  filterOutDuplicateProducts (products) {\n+    console.log(products)\n+    throw new Error('NOT IMPLEMENTED')\n+  }\n+\n+  async getProductsBySkus (skus) {\n+    // filter out duplicates or cast to array if needed\n+    skus = _.isArray(skus) ? _.uniq(skus) : [skus]\n+\n+    // if skus have more than a certain amount run multiple parallel requests\n+    if (skus.length > this.loadBatchCount) {\n+      const productBatches = Promise.map(\n+        _.chunk(skus, this.loadBatchCount), // load max N skus per one request\n+        skuBatch => this.getProductsBySku(skuBatch),\n+        { concurrency: this.loadConcurrency } // load products with concurrency\n+      )\n+\n+      return this.filterOutDuplicateProducts(_.flatten(productBatches))\n+    }\n+\n+    const skuPredicate = skus.join('\",\"')\n+    const predicate = `masterVariant(sku IN(\"${skuPredicate}\"))`\n+      + ` OR variants(sku IN(\"${skuPredicate}\"))`\n+\n+    return this.client.productProjections\n+      .where(predicate)\n+      .staged(true)\n+      .fetch()\n+      .then(res => res.body.results)\n+  }\n+\n+  getProductById (id) {\n+    return this.client.productProjections\n+      .staged(true)\n+      .byId(id)\n+      .fetch()\n+      .then(res => res.body)\n+      .catch(err => (\n+        err && err.body && err.body.statusCode\n+          ? Promise.resolve(undefined)\n+          : Promise.reject(err)\n+      ))\n+  }\n+\n+  async deleteByProductId (id) {\n+    const product = await this.getProductById(id)\n+\n+    return product\n+      ? this.deleteByProduct(product)\n+      : Promise.resolve()\n+  }\n+\n+  deleteByProduct (product) {\n+    return this.client.products\n+      .byId(product.id)\n+      .delete(product.version)\n+  }\n+\n+  /**\n+   * Function accepts product with staged and current version and a list of SKUs\n+   * which will be deleted from a product.\n+   * @param product Product object\n+   * @param skus List of SKUs\n+   */\n+  removeVariantsFromProduct (product, skus) {\n+    const masterData = product.masterData\n+    const actions = []\n+    if (!_.isArray(skus))\n+      skus = [skus]\n+\n+    masterData.current.variants = masterData.current.variants || []\n+    masterData.staged.variants = masterData.staged.variants || []\n+\n+    const productVersions = {\n+      current: this._getVariantsBySkuMap(masterData.current),\n+      staged: this._getVariantsBySkuMap(masterData.staged)\n+    }\n+\n+    // delete from map all variants specified in skus param\n+    Object.keys(productVersions).forEach(version =>\n+      skus.forEach((sku) => {\n+        delete productVersions[version][sku]\n+      })\n+    )\n+\n+    let currentSkus = Object.keys(productVersions.current)\n+    let stagedSkus = Object.keys(productVersions.staged)\n+\n+    // if there are no variants left delete whole product\n+    if (currentSkus.length === 0 && stagedSkus.length === 0)\n+      return this.deleteByProduct(product)\n+\n+    // if there are no current variants left\n+    //  - unpublish product\n+    //  - add all variants from staged to current\n+    if (currentSkus.length === 0) {\n+      currentSkus = _.cloneDeep(stagedSkus)\n+      productVersions.current = _.cloneDeep(productVersions.staged)\n+\n+      actions.push(this._getUnpublishAction())\n+      stagedSkus.forEach(sku =>\n+        actions.push(\n+          this._getAddVariantAction(productVersions.staged[sku], false)\n+        )\n+      )\n+    }\n+\n+    // if there are no staged variants left\n+    //  - add all variants from current to staged\n+    if (stagedSkus.length === 0) {\n+      stagedSkus = _.cloneDeep(currentSkus)\n+      productVersions.staged = _.cloneDeep(productVersions.current)\n+\n+      stagedSkus.forEach(sku =>\n+        actions.push(\n+          this._getAddVariantAction(productVersions.current[sku], true)\n+        )\n+      )\n+    }\n+\n+    // if we want to delete a masterVariant from current, set another variant as\n+    // new masterVariant first\n+    if (this._isMasterVariantRemoved(masterData.current, currentSkus)) {\n+      const firstExistingVariant = Object.values(productVersions.current)[0]\n+\n+      actions.push(\n+        this._getChangeMasterVariantAction(firstExistingVariant, false)\n+      )\n+    }\n+\n+    // if we want to delete a masterVariant from staged, set another variant as\n+    // new masterVariant first\n+    if (this._isMasterVariantRemoved(masterData.staged, stagedSkus)) {\n+      const firstExistingVariant = Object.values(productVersions.staged)[0]\n+\n+      actions.push(\n+        this._getChangeMasterVariantAction(firstExistingVariant, true)\n+      )\n+    }\n+\n+    // run through both variants (staged and current)\n+    // first remove variants from staged\n+    ['staged', 'current'].forEach((version) => {\n+      const variantMap = this._getVariantsBySkuMap(masterData[version])\n+\n+      // remove variants specified in skus param\n+      // but only if product has this variant\n+      skus.forEach((sku) => {\n+        if (variantMap[sku])\n+          actions.push(\n+            this._getRemoveVariant(variantMap[sku], version === 'staged')","path":"lib/services/product-manager.js","position":null,"original_position":191,"commit_id":"36931054e31e4e78d1f547a494e3ff52fb55a08a","original_commit_id":"46e83e14840789d84f5ec4d2fea6b508e1ab6ef9","user":{"login":"junajan","id":1090382,"avatar_url":"https://avatars0.githubusercontent.com/u/1090382?v=4","gravatar_id":"","url":"https://api.github.com/users/junajan","html_url":"https://github.com/junajan","followers_url":"https://api.github.com/users/junajan/followers","following_url":"https://api.github.com/users/junajan/following{/other_user}","gists_url":"https://api.github.com/users/junajan/gists{/gist_id}","starred_url":"https://api.github.com/users/junajan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/junajan/subscriptions","organizations_url":"https://api.github.com/users/junajan/orgs","repos_url":"https://api.github.com/users/junajan/repos","events_url":"https://api.github.com/users/junajan/events{/privacy}","received_events_url":"https://api.github.com/users/junajan/received_events","type":"User","site_admin":false},"body":"Updated 3693105","created_at":"2017-12-04T09:23:18Z","updated_at":"2017-12-04T09:23:18Z","html_url":"https://github.com/commercetools/commercetools-node-variant-reassignment/pull/15#discussion_r154593398","pull_request_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/pulls/15","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/pulls/comments/154593398"},"html":{"href":"https://github.com/commercetools/commercetools-node-variant-reassignment/pull/15#discussion_r154593398"},"pull_request":{"href":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/pulls/15"}},"in_reply_to_id":154332752},"pull_request":{"url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/pulls/15","id":155825516,"html_url":"https://github.com/commercetools/commercetools-node-variant-reassignment/pull/15","diff_url":"https://github.com/commercetools/commercetools-node-variant-reassignment/pull/15.diff","patch_url":"https://github.com/commercetools/commercetools-node-variant-reassignment/pull/15.patch","issue_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/issues/15","number":15,"state":"open","locked":false,"title":"#7 product manager class","user":{"login":"junajan","id":1090382,"avatar_url":"https://avatars0.githubusercontent.com/u/1090382?v=4","gravatar_id":"","url":"https://api.github.com/users/junajan","html_url":"https://github.com/junajan","followers_url":"https://api.github.com/users/junajan/followers","following_url":"https://api.github.com/users/junajan/following{/other_user}","gists_url":"https://api.github.com/users/junajan/gists{/gist_id}","starred_url":"https://api.github.com/users/junajan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/junajan/subscriptions","organizations_url":"https://api.github.com/users/junajan/orgs","repos_url":"https://api.github.com/users/junajan/repos","events_url":"https://api.github.com/users/junajan/events{/privacy}","received_events_url":"https://api.github.com/users/junajan/received_events","type":"User","site_admin":false},"body":"This PR contains productManager class which has methods for modifying product on ctp API\r\nResolves #7 ","created_at":"2017-12-01T10:11:23Z","updated_at":"2017-12-04T09:23:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0f520041787ac653b88639a3e33b515101d0d67b","assignee":{"login":"junajan","id":1090382,"avatar_url":"https://avatars0.githubusercontent.com/u/1090382?v=4","gravatar_id":"","url":"https://api.github.com/users/junajan","html_url":"https://github.com/junajan","followers_url":"https://api.github.com/users/junajan/followers","following_url":"https://api.github.com/users/junajan/following{/other_user}","gists_url":"https://api.github.com/users/junajan/gists{/gist_id}","starred_url":"https://api.github.com/users/junajan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/junajan/subscriptions","organizations_url":"https://api.github.com/users/junajan/orgs","repos_url":"https://api.github.com/users/junajan/repos","events_url":"https://api.github.com/users/junajan/events{/privacy}","received_events_url":"https://api.github.com/users/junajan/received_events","type":"User","site_admin":false},"assignees":[{"login":"junajan","id":1090382,"avatar_url":"https://avatars0.githubusercontent.com/u/1090382?v=4","gravatar_id":"","url":"https://api.github.com/users/junajan","html_url":"https://github.com/junajan","followers_url":"https://api.github.com/users/junajan/followers","following_url":"https://api.github.com/users/junajan/following{/other_user}","gists_url":"https://api.github.com/users/junajan/gists{/gist_id}","starred_url":"https://api.github.com/users/junajan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/junajan/subscriptions","organizations_url":"https://api.github.com/users/junajan/orgs","repos_url":"https://api.github.com/users/junajan/repos","events_url":"https://api.github.com/users/junajan/events{/privacy}","received_events_url":"https://api.github.com/users/junajan/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/pulls/15/commits","review_comments_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/pulls/15/comments","review_comment_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/pulls/comments{/number}","comments_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/issues/15/comments","statuses_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/statuses/36931054e31e4e78d1f547a494e3ff52fb55a08a","head":{"label":"commercetools:7-product-manager-class","ref":"7-product-manager-class","sha":"36931054e31e4e78d1f547a494e3ff52fb55a08a","user":{"login":"commercetools","id":1084585,"avatar_url":"https://avatars3.githubusercontent.com/u/1084585?v=4","gravatar_id":"","url":"https://api.github.com/users/commercetools","html_url":"https://github.com/commercetools","followers_url":"https://api.github.com/users/commercetools/followers","following_url":"https://api.github.com/users/commercetools/following{/other_user}","gists_url":"https://api.github.com/users/commercetools/gists{/gist_id}","starred_url":"https://api.github.com/users/commercetools/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/commercetools/subscriptions","organizations_url":"https://api.github.com/users/commercetools/orgs","repos_url":"https://api.github.com/users/commercetools/repos","events_url":"https://api.github.com/users/commercetools/events{/privacy}","received_events_url":"https://api.github.com/users/commercetools/received_events","type":"Organization","site_admin":false},"repo":{"id":110249632,"name":"commercetools-node-variant-reassignment","full_name":"commercetools/commercetools-node-variant-reassignment","owner":{"login":"commercetools","id":1084585,"avatar_url":"https://avatars3.githubusercontent.com/u/1084585?v=4","gravatar_id":"","url":"https://api.github.com/users/commercetools","html_url":"https://github.com/commercetools","followers_url":"https://api.github.com/users/commercetools/followers","following_url":"https://api.github.com/users/commercetools/following{/other_user}","gists_url":"https://api.github.com/users/commercetools/gists{/gist_id}","starred_url":"https://api.github.com/users/commercetools/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/commercetools/subscriptions","organizations_url":"https://api.github.com/users/commercetools/orgs","repos_url":"https://api.github.com/users/commercetools/repos","events_url":"https://api.github.com/users/commercetools/events{/privacy}","received_events_url":"https://api.github.com/users/commercetools/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/commercetools/commercetools-node-variant-reassignment","description":"Node.js utility which complements product sync/import process by automatic conflicts resolution and reassignment of variants from one product to another","fork":false,"url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment","forks_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/forks","keys_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/keys{/key_id}","collaborators_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/teams","hooks_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/hooks","issue_events_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/issues/events{/number}","events_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/events","assignees_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/assignees{/user}","branches_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/branches{/branch}","tags_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/tags","blobs_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/git/refs{/sha}","trees_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/git/trees{/sha}","statuses_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/statuses/{sha}","languages_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/languages","stargazers_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/stargazers","contributors_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/contributors","subscribers_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/subscribers","subscription_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/subscription","commits_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/commits{/sha}","git_commits_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/git/commits{/sha}","comments_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/comments{/number}","issue_comment_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/issues/comments{/number}","contents_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/contents/{+path}","compare_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/compare/{base}...{head}","merges_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/merges","archive_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/downloads","issues_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/issues{/number}","pulls_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/pulls{/number}","milestones_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/milestones{/number}","notifications_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/labels{/name}","releases_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/releases{/id}","deployments_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/deployments","created_at":"2017-11-10T13:25:20Z","updated_at":"2017-11-10T13:26:57Z","pushed_at":"2017-12-04T09:23:17Z","git_url":"git://github.com/commercetools/commercetools-node-variant-reassignment.git","ssh_url":"git@github.com:commercetools/commercetools-node-variant-reassignment.git","clone_url":"https://github.com/commercetools/commercetools-node-variant-reassignment.git","svn_url":"https://github.com/commercetools/commercetools-node-variant-reassignment","homepage":null,"size":100,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":14,"license":null,"forks":0,"open_issues":14,"watchers":0,"default_branch":"master"}},"base":{"label":"commercetools:dev","ref":"dev","sha":"3de791c1a64c9cc13f5c05e0176981682abfd503","user":{"login":"commercetools","id":1084585,"avatar_url":"https://avatars3.githubusercontent.com/u/1084585?v=4","gravatar_id":"","url":"https://api.github.com/users/commercetools","html_url":"https://github.com/commercetools","followers_url":"https://api.github.com/users/commercetools/followers","following_url":"https://api.github.com/users/commercetools/following{/other_user}","gists_url":"https://api.github.com/users/commercetools/gists{/gist_id}","starred_url":"https://api.github.com/users/commercetools/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/commercetools/subscriptions","organizations_url":"https://api.github.com/users/commercetools/orgs","repos_url":"https://api.github.com/users/commercetools/repos","events_url":"https://api.github.com/users/commercetools/events{/privacy}","received_events_url":"https://api.github.com/users/commercetools/received_events","type":"Organization","site_admin":false},"repo":{"id":110249632,"name":"commercetools-node-variant-reassignment","full_name":"commercetools/commercetools-node-variant-reassignment","owner":{"login":"commercetools","id":1084585,"avatar_url":"https://avatars3.githubusercontent.com/u/1084585?v=4","gravatar_id":"","url":"https://api.github.com/users/commercetools","html_url":"https://github.com/commercetools","followers_url":"https://api.github.com/users/commercetools/followers","following_url":"https://api.github.com/users/commercetools/following{/other_user}","gists_url":"https://api.github.com/users/commercetools/gists{/gist_id}","starred_url":"https://api.github.com/users/commercetools/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/commercetools/subscriptions","organizations_url":"https://api.github.com/users/commercetools/orgs","repos_url":"https://api.github.com/users/commercetools/repos","events_url":"https://api.github.com/users/commercetools/events{/privacy}","received_events_url":"https://api.github.com/users/commercetools/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/commercetools/commercetools-node-variant-reassignment","description":"Node.js utility which complements product sync/import process by automatic conflicts resolution and reassignment of variants from one product to another","fork":false,"url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment","forks_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/forks","keys_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/keys{/key_id}","collaborators_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/teams","hooks_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/hooks","issue_events_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/issues/events{/number}","events_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/events","assignees_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/assignees{/user}","branches_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/branches{/branch}","tags_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/tags","blobs_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/git/refs{/sha}","trees_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/git/trees{/sha}","statuses_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/statuses/{sha}","languages_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/languages","stargazers_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/stargazers","contributors_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/contributors","subscribers_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/subscribers","subscription_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/subscription","commits_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/commits{/sha}","git_commits_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/git/commits{/sha}","comments_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/comments{/number}","issue_comment_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/issues/comments{/number}","contents_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/contents/{+path}","compare_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/compare/{base}...{head}","merges_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/merges","archive_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/downloads","issues_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/issues{/number}","pulls_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/pulls{/number}","milestones_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/milestones{/number}","notifications_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/labels{/name}","releases_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/releases{/id}","deployments_url":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/deployments","created_at":"2017-11-10T13:25:20Z","updated_at":"2017-11-10T13:26:57Z","pushed_at":"2017-12-04T09:23:17Z","git_url":"git://github.com/commercetools/commercetools-node-variant-reassignment.git","ssh_url":"git@github.com:commercetools/commercetools-node-variant-reassignment.git","clone_url":"https://github.com/commercetools/commercetools-node-variant-reassignment.git","svn_url":"https://github.com/commercetools/commercetools-node-variant-reassignment","homepage":null,"size":100,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":14,"license":null,"forks":0,"open_issues":14,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/pulls/15"},"html":{"href":"https://github.com/commercetools/commercetools-node-variant-reassignment/pull/15"},"issue":{"href":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/issues/15"},"comments":{"href":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/issues/15/comments"},"review_comments":{"href":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/pulls/15/comments"},"review_comment":{"href":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/pulls/15/commits"},"statuses":{"href":"https://api.github.com/repos/commercetools/commercetools-node-variant-reassignment/statuses/36931054e31e4e78d1f547a494e3ff52fb55a08a"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"junajan"}}