-
Notifications
You must be signed in to change notification settings - Fork 197
improve membersURI #812
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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 = ?) | ||
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 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. 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 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. 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 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? 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 ? | ||
`; | ||
|
||
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.