Unwind / Aggregate GitHub Выпускает метку в отдельной ячейке в файле .csv в GraphQL - PullRequest
0 голосов
/ 07 марта 2019

Я использую GitHub api для получения проблем в формате JSON и использую graphql для добавления данных в файл .csv.

Это код ---

const graphql = require("graphql-request");
const json2csv = require("json2csv");
const fs = require("fs");
const argv = require("minimist")(process.argv.slice(2));
const fileName = argv.filename || "issues.csv";

const fields = [

    {
        value: "node.title",
        label: "Issue Title",
    },
    {
        value: "node.author.login",
        label: "Issue Author"
    },
    {
        value: "node.state",
        label: "Issue Status"
    },

    {
        value: "node.milestone.title",
        label: "Sprint"
    },
    {
        value: "node.labels.edges.node.name",
        label: "Tower"
    },
    {
        value: "node.bodyText",
        label: "Components"
    },
    {
        value: "node.comments.edges.node.bodyText",
        label: "Review Comments"
    },
    {
        value: "node.comments.edges.node.author.login",
        label: "Comment Author"
    },
    {
        value: "node.comments.edges.node.createdAt",
        label: "Date"
    },

    {
        value: "node.url",
        label: "Issue URL"

    }
];

const client = new graphql.GraphQLClient("https://api.github.com/graphql", {
    headers: {
        Authorization: `Bearer ${argv.token}`
    }
});

const query = `{
  repository(owner: "${argv.owner}", name: "${argv.repo}") {
    issues(last: 100) {
      edges {
        node {
          title
          number
          state
          author {
            login
          }
          bodyText
          url
          milestone {
            id
            title
          }
          labels(first: 10) {
            edges {
              node {
                name
              }
            }
          }
          comments(last: 5) {
            edges {
              node {
                author {
                  avatarUrl
                  login
                  resourcePath
                  url
                }
                bodyText
                createdAt
              }
            }
          }
        }
      }
    }
  }
}`;

function writeCsvFile(csv) {
    fs.writeFile(fileName, csv, function (err) {
        if (err) throw err;
        console.log(`${fileName} file saved`);
    });
}

client
    .request(query)
    .then(data => {
        const json2csvConfig = {
            data: data.repository.issues.edges,
            fields: fields,
            includeEmptyRows: true,
            unwindPath: ["node.labels.edges", "node.comments.edges"]
        };

        json2csv(json2csvConfig, (err, csvString) => {
            writeCsvFile(csvString.replace(/[‘’]/g, `'`).replace(/[“”]/g, '"'));
        });
    })
    .catch(error => console.error(error));

Я хочу изменить раскрутку ярлыков, чтобы при наличии нескольких ярлыков, помеченных в одном выпуске, они входили в одну ячейку.CSV-файл, а не новый столбец, поскольку он добавляет одну и ту же проблему несколько раз.

Данные JSON выглядят следующим образом - как разматывать / агрегировать это?

Как разматывать / агрегировать следующие

"labels": [
      {
        "id": 1257724245,
        "node_id": "MDU6TGFiZWwxMjU3NzI0MjQ1",
        "url": "https://api.github.com/repos/testkamal/SalesforcePOC/labels/bug",
        "name": "bug",
        "color": "d73a4a",
        "default": true
      },
      {
        "id": 1257724247,
        "node_id": "MDU6TGFiZWwxMjU3NzI0MjQ3",
        "url": "https://api.github.com/repos/testkamal/SalesforcePOC/labels/duplicate",
        "name": "duplicate",
        "color": "cfd3d7",
        "default": true
      }
...