include join request user profiles
This commit is contained in:
+68
-1
@@ -5641,7 +5641,12 @@ func serveIMGroupJoinRequests(wrt http.ResponseWriter, req *http.Request, topic
|
||||
}
|
||||
items = nil
|
||||
}
|
||||
writeIMSuccess(wrt, req, map[string]any{"topic": topic, "items": groupJoinRequestPayloads(items), "next_cursor": nextCursor})
|
||||
payloads, err := groupJoinRequestPayloadsWithUsers(principal.TenantID, items)
|
||||
if err != nil {
|
||||
writeIMRelationError(wrt, req, err)
|
||||
return
|
||||
}
|
||||
writeIMSuccess(wrt, req, map[string]any{"topic": topic, "items": payloads, "next_cursor": nextCursor})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7782,6 +7787,68 @@ func groupJoinRequestPayloads(items []types.GroupJoinRequest) []map[string]any {
|
||||
return out
|
||||
}
|
||||
|
||||
func groupJoinRequestPayloadsWithUsers(tenantID types.TenantID, items []types.GroupJoinRequest) ([]map[string]any, error) {
|
||||
payloads := groupJoinRequestPayloads(items)
|
||||
if len(items) == 0 || store.Users == nil {
|
||||
return payloads, nil
|
||||
}
|
||||
seen := make(map[types.Uid]struct{}, len(items)*2)
|
||||
uids := make([]types.Uid, 0, len(items)*2)
|
||||
for i := range items {
|
||||
for _, uid := range []types.Uid{items[i].ApplicantUserID, items[i].InviterUserID} {
|
||||
if uid.IsZero() {
|
||||
continue
|
||||
}
|
||||
if _, ok := seen[uid]; ok {
|
||||
continue
|
||||
}
|
||||
seen[uid] = struct{}{}
|
||||
uids = append(uids, uid)
|
||||
}
|
||||
}
|
||||
if len(uids) == 0 {
|
||||
return payloads, nil
|
||||
}
|
||||
users, err := store.Users.GetAll(tenantID, uids...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
byID := make(map[types.Uid]*types.User, len(users))
|
||||
for i := range users {
|
||||
uid := types.ParseUid(users[i].Id)
|
||||
if uid.IsZero() {
|
||||
uid = types.ParseUserId(users[i].Id)
|
||||
}
|
||||
if uid.IsZero() {
|
||||
continue
|
||||
}
|
||||
byID[uid] = &users[i]
|
||||
}
|
||||
for i := range items {
|
||||
enrichGroupJoinRequestUserPayload(payloads[i], "user", "", items[i].ApplicantUserID, byID)
|
||||
enrichGroupJoinRequestUserPayload(payloads[i], "inviter", "inviter_", items[i].InviterUserID, byID)
|
||||
}
|
||||
return payloads, nil
|
||||
}
|
||||
|
||||
func enrichGroupJoinRequestUserPayload(data map[string]any, objectKey, fieldPrefix string, uid types.Uid, users map[types.Uid]*types.User) {
|
||||
if data == nil || uid.IsZero() {
|
||||
return
|
||||
}
|
||||
user := users[uid]
|
||||
summary := map[string]any{"user_id": uid.UserId(), "display_name": uid.UserId()}
|
||||
if user != nil {
|
||||
summary = userSummaryPayload(user, "")
|
||||
}
|
||||
data[objectKey] = summary
|
||||
if displayName, ok := summary["display_name"]; ok {
|
||||
data[fieldPrefix+"display_name"] = displayName
|
||||
}
|
||||
if avatarFileID, ok := summary["avatar_file_id"]; ok {
|
||||
data[fieldPrefix+"avatar_file_id"] = avatarFileID
|
||||
}
|
||||
}
|
||||
|
||||
func groupAnnouncementPayload(ann *types.GroupAnnouncement) map[string]any {
|
||||
if ann == nil {
|
||||
return map[string]any{
|
||||
|
||||
Reference in New Issue
Block a user