Changeset View
Changeset View
Standalone View
Standalone View
keyserver/src/fetchers/user-fetchers.js
Show First 20 Lines • Show All 41 Lines • ▼ Show 20 Lines | ): Promise<{ [id: string]: GlobalUserInfo }> { | ||||
for (const row of result) { | for (const row of result) { | ||||
const id = row.id.toString(); | const id = row.id.toString(); | ||||
const avatar: ?AvatarDBContent = row.avatar ? JSON.parse(row.avatar) : null; | const avatar: ?AvatarDBContent = row.avatar ? JSON.parse(row.avatar) : null; | ||||
// TODO: Handle construction of `ClientImageAvatar` when `type === 'image'` | // TODO: Handle construction of `ClientImageAvatar` when `type === 'image'` | ||||
const clientAvatar: ?ClientAvatar = | const clientAvatar: ?ClientAvatar = | ||||
avatar && avatar.type !== 'image' ? avatar : null; | avatar && avatar.type !== 'image' ? avatar : null; | ||||
userInfos[id] = avatar | userInfos[id] = clientAvatar | ||||
? { | ? { | ||||
id, | id, | ||||
username: row.username, | username: row.username, | ||||
avatar: clientAvatar, | avatar: clientAvatar, | ||||
} | } | ||||
: { | : { | ||||
id, | id, | ||||
username: row.username, | username: row.username, | ||||
Show All 19 Lines | ): 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, ru.status AS undirected_status, | SELECT ru.user1, ru.user2, u.username, u.avatar, ru.status AS undirected_status, | ||||
rd1.status AS user1_directed_status, rd2.status AS user2_directed_status | rd1.status AS user1_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, | UNION SELECT id AS user1, NULL AS user2, username, avatar, | ||||
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 avatar: ?AvatarDBContent = row.avatar ? JSON.parse(row.avatar) : null; | |||||
// TODO: Handle construction of `ClientImageAvatar` when `type === 'image'` | |||||
const clientAvatar: ?ClientAvatar = | |||||
avatar && avatar.type !== 'image' ? avatar : null; | |||||
const userInfo = clientAvatar | |||||
? { | |||||
id, | |||||
username: row.username, | |||||
avatar: clientAvatar, | |||||
} | |||||
: { | |||||
id, | id, | ||||
username: row.username, | username: row.username, | ||||
}; | }; | ||||
if (!user2) { | if (!user2) { | ||||
userInfos[id] = userInfo; | userInfos[id] = userInfo; | ||||
continue; | continue; | ||||
} | } | ||||
let viewerDirectedStatus; | let viewerDirectedStatus; | ||||
let targetDirectedStatus; | let targetDirectedStatus; | ||||
▲ Show 20 Lines • Show All 210 Lines • Show Last 20 Lines |