Changeset View
Changeset View
Standalone View
Standalone View
keyserver/src/fetchers/user-fetchers.js
Show All 25 Lines | |||||
async function fetchUserInfos( | async function fetchUserInfos( | ||||
userIDs: string[], | userIDs: string[], | ||||
): Promise<{ [id: string]: GlobalUserInfo }> { | ): Promise<{ [id: string]: GlobalUserInfo }> { | ||||
if (userIDs.length <= 0) { | if (userIDs.length <= 0) { | ||||
return {}; | return {}; | ||||
} | } | ||||
const query = SQL` | const query = SQL` | ||||
SELECT id, username, avatar, FROM users WHERE id IN (${userIDs}) | SELECT id, username FROM users WHERE id IN (${userIDs}) | ||||
`; | `; | ||||
const [result] = await dbQuery(query); | const [result] = await dbQuery(query); | ||||
const userInfos = {}; | const userInfos = {}; | ||||
for (const row of result) { | for (const row of result) { | ||||
const id = row.id.toString(); | const id = row.id.toString(); | ||||
userInfos[id] = { | userInfos[id] = { | ||||
id, | id, | ||||
username: row.username, | username: row.username, | ||||
avatar: row.avatar, | |||||
}; | }; | ||||
} | } | ||||
for (const userID of userIDs) { | for (const userID of userIDs) { | ||||
if (!userInfos[userID]) { | if (!userInfos[userID]) { | ||||
userInfos[userID] = { | userInfos[userID] = { | ||||
id: userID, | id: userID, | ||||
username: null, | username: null, | ||||
avatar: null, | |||||
}; | }; | ||||
} | } | ||||
} | } | ||||
return userInfos; | return userInfos; | ||||
} | } | ||||
async function fetchKnownUserInfos( | async function fetchKnownUserInfos( | ||||
viewer: Viewer, | viewer: Viewer, | ||||
userIDs?: $ReadOnlyArray<string>, | userIDs?: $ReadOnlyArray<string>, | ||||
): Promise<UserInfos> { | ): Promise<UserInfos> { | ||||
if (!viewer.loggedIn) { | if (!viewer.loggedIn) { | ||||
return {}; | return {}; | ||||
} | } | ||||
if (userIDs && userIDs.length === 0) { | if (userIDs && userIDs.length === 0) { | ||||
return {}; | return {}; | ||||
} | } | ||||
const query = SQL` | const query = SQL` | ||||
SELECT ru.user1, ru.user2, u.username, u.avatar, | SELECT ru.user1, ru.user2, u.username, ru.status AS undirected_status, | ||||
ru.status AS undirected_status, rd1.status AS user1_directed_status, | rd1.status AS user1_directed_status, rd2.status AS user2_directed_status | ||||
rd2.status AS user2_directed_status | |||||
FROM relationships_undirected ru | FROM relationships_undirected ru | ||||
LEFT JOIN relationships_directed rd1 | LEFT JOIN relationships_directed rd1 | ||||
ON rd1.user1 = ru.user1 AND rd1.user2 = ru.user2 | ON rd1.user1 = ru.user1 AND rd1.user2 = ru.user2 | ||||
LEFT JOIN relationships_directed rd2 | LEFT JOIN relationships_directed rd2 | ||||
ON rd2.user1 = ru.user2 AND rd2.user2 = ru.user1 | ON rd2.user1 = ru.user2 AND rd2.user2 = ru.user1 | ||||
LEFT JOIN users u | LEFT JOIN users u | ||||
ON u.id != ${viewer.userID} AND (u.id = ru.user1 OR u.id = ru.user2) | ON u.id != ${viewer.userID} AND (u.id = ru.user1 OR u.id = ru.user2) | ||||
`; | `; | ||||
if (userIDs) { | if (userIDs) { | ||||
query.append(SQL` | query.append(SQL` | ||||
WHERE (ru.user1 = ${viewer.userID} AND ru.user2 IN (${userIDs})) OR | WHERE (ru.user1 = ${viewer.userID} AND ru.user2 IN (${userIDs})) OR | ||||
(ru.user1 IN (${userIDs}) AND ru.user2 = ${viewer.userID}) | (ru.user1 IN (${userIDs}) AND ru.user2 = ${viewer.userID}) | ||||
`); | `); | ||||
} else { | } else { | ||||
query.append(SQL` | query.append(SQL` | ||||
WHERE ru.user1 = ${viewer.userID} OR ru.user2 = ${viewer.userID} | WHERE ru.user1 = ${viewer.userID} OR ru.user2 = ${viewer.userID} | ||||
`); | `); | ||||
} | } | ||||
query.append(SQL` | query.append(SQL` | ||||
UNION SELECT id AS user1, NULL AS user2, username, avatar, | UNION SELECT id AS user1, NULL AS user2, username, | ||||
CAST(NULL AS UNSIGNED) AS undirected_status, | CAST(NULL AS UNSIGNED) AS undirected_status, | ||||
CAST(NULL AS UNSIGNED) AS user1_directed_status, | CAST(NULL AS UNSIGNED) AS user1_directed_status, | ||||
CAST(NULL AS UNSIGNED) AS user2_directed_status | CAST(NULL AS UNSIGNED) AS user2_directed_status | ||||
FROM users | FROM users | ||||
WHERE id = ${viewer.userID} | WHERE id = ${viewer.userID} | ||||
`); | `); | ||||
const [result] = await dbQuery(query); | const [result] = await dbQuery(query); | ||||
const userInfos = {}; | const userInfos = {}; | ||||
for (const row of result) { | for (const row of result) { | ||||
const user1 = row.user1.toString(); | const user1 = row.user1.toString(); | ||||
const user2 = row.user2 ? row.user2.toString() : null; | const user2 = row.user2 ? row.user2.toString() : null; | ||||
const id = user1 === viewer.userID && user2 ? user2 : user1; | const id = user1 === viewer.userID && user2 ? user2 : user1; | ||||
const userInfo = { | const userInfo = { | ||||
id, | id, | ||||
username: row.username, | username: row.username, | ||||
avatar: row.avatar, | |||||
}; | }; | ||||
if (!user2) { | if (!user2) { | ||||
userInfos[id] = userInfo; | userInfos[id] = userInfo; | ||||
continue; | continue; | ||||
} | } | ||||
let viewerDirectedStatus; | let viewerDirectedStatus; | ||||
▲ Show 20 Lines • Show All 213 Lines • Show Last 20 Lines |