ui: better domain_user page performance

This commit is contained in:
undefined committed 2024-12-11 18:20:28 +08:00
1 parent f52186750d
commit 00392f1272
7 files changed
+35 -15

No files matched your search

+8 -9
View File
@@ -96,7 +96,8 @@ class DomainDashboardHandler extends ManageHandler {
class DomainUserHandler extends ManageHandler {
@requireSudo
async get({ domainId }) {
@param('format', Types.Range(['default', 'raw']), true)
async get({ domainId }, format = 'default') {
const rudocs = {};
const [dudocs, roles] = await Promise.all([
domain.getMultiUserInDomain(domainId, {
@@ -107,15 +108,13 @@ class DomainUserHandler extends ManageHandler {
}).toArray(),
domain.getRoles(domainId),
]);
const uids = dudocs.map((dudoc) => dudoc.uid);
const udict = await user.getList(domainId, uids);
for (const role of roles) rudocs[role._id] = [];
for (const dudoc of dudocs) {
const udoc = udict[dudoc.uid];
if (!(udoc.priv & PRIV.PRIV_USER_PROFILE)) continue;
rudocs[udoc.role || 'default'].push(udoc);
// TODO: switch to getListForRender for better performance
const udict = await user.getList(domainId, dudocs.map((dudoc) => dudoc.uid));
const users = dudocs.filter((dudoc) => udict[dudoc.uid].priv & PRIV.PRIV_USER_PROFILE);
for (const role of roles) {
rudocs[role._id] = users.filter((dudoc) => dudoc.role === role._id).map((i) => udict[i.uid]);
}
this.response.template = 'domain_user.html';
this.response.template = format === 'raw' ? 'domain_user_raw.html' : 'domain_user.html';
this.response.body = {
roles, rudocs, udict, domain: this.domain,
};