-
Notifications
You must be signed in to change notification settings - Fork 188
improve membersURI #812
base: master
Are you sure you want to change the base?
improve membersURI #812
Changes from 5 commits
a386393
3e5bf86
231b6b3
b828ed3
51c4294
7ebe8c7
ac8669b
9d41dd3
47e6eb0
a35202b
458e794
9849c0b
e342770
252acc3
1df3050
1da8ee9
b2c10b8
0ce6028
240ed25
1cd13f3
ad86432
3ca9efa
560a182
d285d3b
f96bf1d
84d905e
51b90b6
f052e0e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -8,3 +8,5 @@ coverage | |
| # Remove some common IDE working directories | ||
| .idea | ||
| .vscode | ||
|
|
||
| pnpm-lock.yaml | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -145,6 +145,55 @@ async function getVotes() { | |
| return await db.queryAsync(query); | ||
| } | ||
|
|
||
| export async function getCombinedMembersAndVoters(spaceId, cursor = null, pageSize) { | ||
| let query; | ||
| const params = [spaceId, spaceId, spaceId, spaceId]; | ||
|
|
||
| query = ` | ||
| SELECT address | ||
| FROM ( | ||
| (SELECT DISTINCT JSON_UNQUOTE(JSON_EXTRACT(settings, '$.admins[*]')) AS address | ||
| FROM spaces | ||
| WHERE id = ?) | ||
| UNION | ||
| (SELECT DISTINCT JSON_UNQUOTE(JSON_EXTRACT(settings, '$.moderators[*]')) AS address | ||
| FROM spaces | ||
| WHERE id = ?) | ||
| UNION | ||
| (SELECT DISTINCT JSON_UNQUOTE(JSON_EXTRACT(settings, '$.members[*]')) AS address | ||
| FROM spaces | ||
| WHERE id = ?) | ||
| UNION | ||
| (SELECT DISTINCT voter AS address | ||
| FROM votes | ||
| WHERE space = ?) | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. should limit to 500 voters
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I have placed the limit to the Outer Query, using the param, pageSize.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes but this is taking a lot of time, especially for spaces with a lot of votes, we don't need to read all the distinct voters here, we just need 500 of them, you can remove pagination from the outer query Also for
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We made an improvement on this, now the with cursor filter, if cursor is present, admins, moderators, and members are excluded from the distinct voter list. Also regardless we are not querying admins, moderators and members. Query now only queries the Votes Table hence eliminating the need for subqueries.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. how to use cursor now? you have an example request? i tried few ways but couldn't get it working
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. A request should be something like Could you share what message do you get?
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Looks like we have to pass address to |
||
| ) AS combined_addresses | ||
| WHERE (? IS NULL OR address > ?) | ||
| ORDER BY address | ||
| LIMIT ? | ||
| `; | ||
|
Rashmi-278 marked this conversation as resolved.
|
||
|
|
||
| if (cursor) { | ||
| params.push(cursor, cursor, pageSize); | ||
| } else { | ||
| params.push(null, null, pageSize); | ||
| } | ||
|
|
||
| const results = await db.queryAsync(query, params); | ||
|
|
||
| if (!results || results.length === 0) { | ||
| return Promise.reject(new Error('NOT_FOUND')); | ||
| } | ||
|
|
||
| const nextCursor = results.length === pageSize ? results[results.length - 1].address : null; | ||
|
|
||
| return { | ||
| members: results.map(row => row.address), | ||
| nextCursor: nextCursor | ||
| }; | ||
| } | ||
|
|
||
|
|
||
| async function getFollowers() { | ||
| const query = ` | ||
| SELECT space, COUNT(id) as count, | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.