Skip to content

Commit b34ea25

Browse files
committed
added solution for pagination issue
1 parent 7e829f9 commit b34ea25

File tree

3 files changed

+62
-43
lines changed

3 files changed

+62
-43
lines changed

src/GithubDiscussionClient.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,15 +124,16 @@ export class GithubDiscussionClient {
124124
return result.data.repository?.discussion?.comments as DiscussionCommentConnection;
125125
}
126126

127-
public async getDiscussionsMetaData(categoryID: string): Promise<DiscussionConnection> {
127+
public async getDiscussionsMetaData(categoryID: string, pageSize: number, afterCursor: string): Promise<DiscussionConnection> {
128128
const discussionsCount = await this.getTotalDiscussionCount(categoryID);
129129
const result = await this.githubClient.query<GetDiscussionDataQuery, GetDiscussionDataQueryVariables>({
130130
query: GetDiscussionData,
131131
variables: {
132132
owner: this.owner,
133133
name: this.repo,
134134
categoryID: categoryID,
135-
count: discussionsCount!,
135+
pageSize: pageSize,
136+
after: afterCursor,
136137
},
137138
})
138139

src/index.ts

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -33,33 +33,42 @@ export async function processDiscussions(githubClient: GithubDiscussionClient) {
3333
const discussionCategoryIDList: string[] = await githubClient.getAnswerableDiscussionCategoryIDs();
3434

3535
for (const discussionCategoryID of discussionCategoryIDList) {
36-
const discussions = await githubClient.getDiscussionsMetaData(discussionCategoryID);
37-
for (const discussion of discussions.edges!) {
38-
var discussionId = discussion?.node?.id ? discussion?.node?.id : "";
39-
var discussionNum = discussion?.node?.number ? discussion.node.number : 0;
40-
core.debug(`Processing discussionId: ${discussionId} with number: ${discussionNum} and bodyText: ${discussion?.node?.bodyText}`);
41-
if (discussionId === "" || discussionNum === 0) {
42-
core.warning(`Can not proceed checking discussion, discussionId is null!`);
43-
continue;
44-
}
45-
else if (discussion?.node?.locked && CLOSE_LOCKED_DISCUSSIONS) {
46-
core.info(`Discussion ${discussionId} is locked, closing it as resolved`);
47-
githubClient.closeDiscussionAsResolved(discussionId);
48-
continue;
49-
}
50-
else if (discussion?.node?.answer != null && CLOSE_ANSWERED_DISCUSSIONS) {
51-
core.info(`Discussion ${discussionId} is already answered, so closing it as resolved.`);
52-
githubClient.closeDiscussionAsResolved(discussionId);
53-
continue;
54-
}
55-
else if (discussion?.node?.closed) {
56-
core.debug(`Discussion ${discussionId} is closed, so no action needed.`);
57-
continue;
58-
}
59-
else {
60-
await processComments(discussion!, githubClient);
36+
const pageSize = 50;
37+
let hasNextPage = true;
38+
let afterCursor: string | null = null;
39+
40+
while (hasNextPage) {
41+
const discussions = await githubClient.getDiscussionsMetaData(discussionCategoryID, pageSize, afterCursor!);
42+
hasNextPage = discussions.pageInfo.hasNextPage;
43+
afterCursor = discussions.pageInfo.endCursor!;
44+
45+
for (const discussion of discussions.edges!) {
46+
var discussionId = discussion?.node?.id ? discussion?.node?.id : "";
47+
var discussionNum = discussion?.node?.number ? discussion.node.number : 0;
48+
core.debug(`Processing discussionId: ${discussionId} with number: ${discussionNum} and bodyText: ${discussion?.node?.bodyText}`);
49+
if (discussionId === "" || discussionNum === 0) {
50+
core.warning(`Can not proceed checking discussion, discussionId is null!`);
51+
continue;
52+
}
53+
else if (discussion?.node?.locked && CLOSE_LOCKED_DISCUSSIONS) {
54+
core.info(`Discussion ${discussionId} is locked, closing it as resolved`);
55+
githubClient.closeDiscussionAsResolved(discussionId);
56+
continue;
57+
}
58+
else if (discussion?.node?.answer != null && CLOSE_ANSWERED_DISCUSSIONS) {
59+
core.info(`Discussion ${discussionId} is already answered, so closing it as resolved.`);
60+
githubClient.closeDiscussionAsResolved(discussionId);
61+
continue;
62+
}
63+
else if (discussion?.node?.closed) {
64+
core.debug(`Discussion ${discussionId} is closed, so no action needed.`);
65+
continue;
66+
}
67+
else {
68+
await processComments(discussion!, githubClient);
69+
}
6170
}
62-
};
71+
}
6372
}
6473
}
6574

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,31 @@
1-
query GetDiscussionData($owner: String!, $name: String!,$categoryID: ID!, $count: Int!) {
1+
query GetDiscussionData($owner: String!, $name: String!,$categoryID: ID!, $after: String, $pageSize: Int! ) {
22
repository(owner: $owner, name: $name) {
3-
discussions(categoryId: $categoryID last:$count) {
4-
edges {
5-
node {
6-
locked
7-
id
8-
bodyText
9-
number
10-
closed
11-
author{
12-
login
13-
}
14-
answer{
3+
discussions(
4+
categoryId: $categoryID,
5+
after: $after,
6+
first: $pageSize,
7+
orderBy: { field: UPDATED_AT, direction: DESC}
8+
) {
9+
pageInfo {
10+
hasNextPage
11+
endCursor
12+
}
13+
edges {
14+
node {
15+
locked
1516
id
1617
bodyText
18+
number
19+
closed
20+
author{
21+
login
22+
}
23+
answer{
24+
id
25+
bodyText
26+
}
1727
}
1828
}
1929
}
2030
}
21-
}
22-
}
31+
}

0 commit comments

Comments
 (0)