MCPcopy Create free account
hub / github.com/0xUnixIO/pulse / handleGroupMembers

Method handleGroupMembers

internal/serverapi/usergroup.go:191–261  ·  view source on GitHub ↗

handleGroupMembers 处理 /v1/user-groups/{id}/members 的 GET 和 POST 请求。

(w http.ResponseWriter, r *http.Request, groupID string)

Source from the content-addressed store, hash-verified

189
190// handleGroupMembers 处理 /v1/user-groups/{id}/members 的 GET 和 POST 请求。
191func (a *userGroupAPI) handleGroupMembers(w http.ResponseWriter, r *http.Request, groupID string) {
192 // 先确认组存在
193 if _, err := a.ugStore.GetUserGroup(groupID); err != nil {
194 writeUserGroupError(w, err)
195 return
196 }
197
198 switch r.Method {
199 case http.MethodGet:
200 memberIDs, err := a.ugStore.ListGroupMembers(groupID)
201 if err != nil {
202 internalError(w, r, err)
203 return
204 }
205 if len(memberIDs) == 0 {
206 writeJSON(w, http.StatusOK, map[string]any{"members": []any{}})
207 return
208 }
209 userMap, err := a.userStore.GetUsersByIDs(memberIDs)
210 if err != nil {
211 internalError(w, r, err)
212 return
213 }
214 type memberInfo struct {
215 UserID string `json:"user_id"`
216 Username string `json:"username"`
217 }
218 members := make([]memberInfo, 0, len(memberIDs))
219 for _, uid := range memberIDs {
220 u, ok := userMap[uid]
221 if !ok {
222 // 用户已删除,清理孤儿记录
223 _ = a.ugStore.RemoveMember(groupID, uid)
224 continue
225 }
226 members = append(members, memberInfo{UserID: uid, Username: u.Username})
227 }
228 writeJSON(w, http.StatusOK, map[string]any{"members": members})
229
230 case http.MethodPost:
231 var req struct {
232 UserID string `json:"user_id"`
233 }
234 if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
235 writeJSON(w, http.StatusBadRequest, map[string]any{"error": "invalid json body"})
236 return
237 }
238 if req.UserID == "" {
239 writeJSON(w, http.StatusBadRequest, map[string]any{"error": "user_id is required"})
240 return
241 }
242 if err := a.ugStore.AddMember(groupID, req.UserID); err != nil {
243 internalError(w, r, err)
244 return
245 }
246 // 加入成员后立即同步该成员的 inbound 记录并下发节点配置
247 g, err := a.ugStore.GetUserGroup(groupID)
248 if err == nil {

Callers 1

handleUserGroupRoutesMethod · 0.95

Calls 12

syncGroupForUserMethod · 0.95
writeUserGroupErrorFunction · 0.85
internalErrorFunction · 0.85
parseCommaListFunction · 0.85
writeMethodNotAllowedFunction · 0.85
applyNodesMethod · 0.80
writeJSONFunction · 0.70
GetUserGroupMethod · 0.65
ListGroupMembersMethod · 0.65
GetUsersByIDsMethod · 0.65
RemoveMemberMethod · 0.65
AddMemberMethod · 0.65

Tested by

no test coverage detected