diff --git a/source/app/mocks/api/github/graphql/discussions.comments.mjs b/source/app/mocks/api/github/graphql/discussions.comments.mjs
new file mode 100644
index 00000000..303194b2
--- /dev/null
+++ b/source/app/mocks/api/github/graphql/discussions.comments.mjs
@@ -0,0 +1,22 @@
+/**Mocked data */
+export default function({faker, query, login = faker.internet.userName()}) {
+ console.debug("metrics/compute/mocks > mocking graphql api result > discussions/comments")
+ return /after: "MOCKED_CURSOR"/m.test(query)
+ ? ({
+ user:{
+ repositoryDiscussionsComments:{
+ edges:[],
+ nodes:[],
+ }
+ }
+ })
+ : ({
+ user:{
+ repositoryDiscussionsComments:{
+ edges:new Array(100).fill(null).map(_ => ({cursor:"MOCKED_CURSOR"})),
+ nodes:new Array(100).fill(null).map(_ => ({upvoteCount: faker.datatype.number(10)}))
+ }
+ }
+ })
+}
+
diff --git a/source/app/web/statics/app.placeholder.js b/source/app/web/statics/app.placeholder.js
index aa3761ec..462a7dca 100644
--- a/source/app/web/statics/app.placeholder.js
+++ b/source/app/web/statics/app.placeholder.js
@@ -594,6 +594,7 @@
stats: { '🙏 Q&A': faker.datatype.number(100), '📣 Announcements': faker.datatype.number(100), '💡 Ideas': faker.datatype.number(100), '💬 General': faker.datatype.number(100) },
favorite: '📣 Announcements'
},
+ upvotes: { discussions:faker.datatype.number(1000), comments: faker.datatype.number(1000) },
started: faker.datatype.number(1000),
comments: faker.datatype.number(1000),
answers: faker.datatype.number(1000),
diff --git a/source/plugins/discussions/index.mjs b/source/plugins/discussions/index.mjs
index 9ba20a0b..ceba5045 100644
--- a/source/plugins/discussions/index.mjs
+++ b/source/plugins/discussions/index.mjs
@@ -8,7 +8,7 @@
//Load inputs
imports.metadata.plugins.discussions.inputs({data, account, q})
- const discussions = {categories:{}}
+ const discussions = {categories:{}, upvotes:{discussions:0, comments:0}}
//Fetch general statistics
const stats = Object.fromEntries(Object.entries((await graphql(queries.discussions.statistics({login}))).user).map(([key, value]) => [key, value.totalCount]))
@@ -29,6 +29,9 @@
console.debug(`metrics/compute/${login}/discussions > retrieved ${pushed} discussions after ${cursor}`)
} while ((pushed) && (cursor))
+ //Compute upvotes
+ fetched.map(({upvoteCount}) => discussions.upvotes.discussions += upvoteCount)
+
//Compute favorite category
for (const category of [...fetched.map(({category:{emoji, name}}) => `${imports.emoji.get(emoji)} ${name}`)])
categories[category] = (categories[category] ?? 0) + 1
@@ -37,6 +40,24 @@
discussions.categories.favorite = categoryEntries[0]?.[0] ?? null
}
+ //Load comments
+ {
+ const fetched = []
+ let cursor = null
+ let pushed = 0
+ do {
+ console.debug(`metrics/compute/${login}/discussions > retrieving comments after ${cursor}`)
+ const {user:{repositoryDiscussionComments:{edges = [], nodes = []} = {}}} = await graphql(queries.discussions.comments({login, after:cursor ? `after: "${cursor}"` : ""}))
+ cursor = edges?.[edges?.length - 1]?.cursor
+ fetched.push(...nodes)
+ pushed = nodes.length
+ console.debug(`metrics/compute/${login}/discussions > retrieved ${pushed} comments after ${cursor}`)
+ } while ((pushed) && (cursor))
+
+ //Compute upvotes
+ fetched.map(({upvoteCount}) => discussions.upvotes.comments += upvoteCount)
+ }
+
//Results
return discussions
}
diff --git a/source/plugins/discussions/queries/categories.graphql b/source/plugins/discussions/queries/categories.graphql
index cc6ba0f6..3083354d 100644
--- a/source/plugins/discussions/queries/categories.graphql
+++ b/source/plugins/discussions/queries/categories.graphql
@@ -5,6 +5,7 @@ query DiscussionsCategories {
cursor
}
nodes {
+ upvoteCount
category {
emoji
name
diff --git a/source/plugins/discussions/queries/comments.graphql b/source/plugins/discussions/queries/comments.graphql
new file mode 100644
index 00000000..85a158d5
--- /dev/null
+++ b/source/plugins/discussions/queries/comments.graphql
@@ -0,0 +1,12 @@
+query DiscussionsComments {
+ user(login: "$login") {
+ repositoryDiscussionComments($after first: 100) {
+ edges {
+ cursor
+ }
+ nodes {
+ upvoteCount
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/templates/classic/partials/discussions.ejs b/source/templates/classic/partials/discussions.ejs
index 7ff84e26..6af30d29 100644
--- a/source/templates/classic/partials/discussions.ejs
+++ b/source/templates/classic/partials/discussions.ejs
@@ -24,13 +24,21 @@
<%= plugins.discussions.comments %> Comment<%= s(plugins.discussions.comments) %>
-
-