Skip to content

Commit 52d0bf0

Browse files
cleanup search_users response
1 parent 8854b2a commit 52d0bf0

File tree

2 files changed

+49
-21
lines changed

2 files changed

+49
-21
lines changed

pkg/github/search.go

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,19 @@ func SearchCode(getClient GetClientFn, t translations.TranslationHelperFunc) (to
146146
}
147147
}
148148

149+
type MinimalUser struct {
150+
Login string `json:"login"`
151+
ID int64 `json:"id,omitempty"`
152+
ProfileURL string `json:"profile_url,omitempty"`
153+
AvatarURL string `json:"avatar_url,omitempty"`
154+
}
155+
156+
type MinimalSearchUsersResult struct {
157+
TotalCount int `json:"total_count"`
158+
IncompleteResults bool `json:"incomplete_results"`
159+
Items []MinimalUser `json:"items"`
160+
}
161+
149162
// SearchUsers creates a tool to search for GitHub users.
150163
func SearchUsers(getClient GetClientFn, t translations.TranslationHelperFunc) (tool mcp.Tool, handler server.ToolHandlerFunc) {
151164
return mcp.NewTool("search_users",
@@ -200,7 +213,7 @@ func SearchUsers(getClient GetClientFn, t translations.TranslationHelperFunc) (t
200213
return nil, fmt.Errorf("failed to get GitHub client: %w", err)
201214
}
202215

203-
result, resp, err := client.Search.Users(ctx, query, opts)
216+
result, resp, err := client.Search.Users(ctx, "type:user "+query, opts)
204217
if err != nil {
205218
return nil, fmt.Errorf("failed to search users: %w", err)
206219
}
@@ -214,11 +227,33 @@ func SearchUsers(getClient GetClientFn, t translations.TranslationHelperFunc) (t
214227
return mcp.NewToolResultError(fmt.Sprintf("failed to search users: %s", string(body))), nil
215228
}
216229

217-
r, err := json.Marshal(result)
230+
minimalUsers := make([]MinimalUser, 0, len(result.Users))
231+
for _, user := range result.Users {
232+
mu := MinimalUser{
233+
Login: user.GetLogin(),
234+
ID: user.GetID(),
235+
ProfileURL: user.GetHTMLURL(),
236+
AvatarURL: user.GetAvatarURL(),
237+
}
238+
239+
minimalUsers = append(minimalUsers, mu)
240+
}
241+
242+
minimalResp := MinimalSearchUsersResult{
243+
TotalCount: result.GetTotal(),
244+
IncompleteResults: result.GetIncompleteResults(),
245+
Items: minimalUsers,
246+
}
247+
if result.Total != nil {
248+
minimalResp.TotalCount = *result.Total
249+
}
250+
if result.IncompleteResults != nil {
251+
minimalResp.IncompleteResults = *result.IncompleteResults
252+
}
253+
r, err := json.Marshal(minimalResp)
218254
if err != nil {
219255
return nil, fmt.Errorf("failed to marshal response: %w", err)
220256
}
221-
222257
return mcp.NewToolResultText(string(r)), nil
223258
}
224259
}

pkg/github/search_test.go

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -335,18 +335,13 @@ func Test_SearchUsers(t *testing.T) {
335335
ID: github.Ptr(int64(1001)),
336336
HTMLURL: github.Ptr("https://github.com/user1"),
337337
AvatarURL: github.Ptr("https://avatars.githubusercontent.com/u/1001"),
338-
Type: github.Ptr("User"),
339-
Followers: github.Ptr(100),
340-
Following: github.Ptr(50),
341338
},
342339
{
343340
Login: github.Ptr("user2"),
344341
ID: github.Ptr(int64(1002)),
345342
HTMLURL: github.Ptr("https://github.com/user2"),
346343
AvatarURL: github.Ptr("https://avatars.githubusercontent.com/u/1002"),
347344
Type: github.Ptr("User"),
348-
Followers: github.Ptr(200),
349-
Following: github.Ptr(75),
350345
},
351346
},
352347
}
@@ -365,7 +360,7 @@ func Test_SearchUsers(t *testing.T) {
365360
mock.WithRequestMatchHandler(
366361
mock.GetSearchUsers,
367362
expectQueryParams(t, map[string]string{
368-
"q": "location:finland language:go",
363+
"q": "type:user location:finland language:go",
369364
"sort": "followers",
370365
"order": "desc",
371366
"page": "1",
@@ -391,7 +386,7 @@ func Test_SearchUsers(t *testing.T) {
391386
mock.WithRequestMatchHandler(
392387
mock.GetSearchUsers,
393388
expectQueryParams(t, map[string]string{
394-
"q": "location:finland language:go",
389+
"q": "type:user location:finland language:go",
395390
"page": "1",
396391
"per_page": "30",
397392
}).andThen(
@@ -451,19 +446,17 @@ func Test_SearchUsers(t *testing.T) {
451446
textContent := getTextResult(t, result)
452447

453448
// Unmarshal and verify the result
454-
var returnedResult github.UsersSearchResult
449+
var returnedResult MinimalSearchUsersResult
455450
err = json.Unmarshal([]byte(textContent.Text), &returnedResult)
456451
require.NoError(t, err)
457-
assert.Equal(t, *tc.expectedResult.Total, *returnedResult.Total)
458-
assert.Equal(t, *tc.expectedResult.IncompleteResults, *returnedResult.IncompleteResults)
459-
assert.Len(t, returnedResult.Users, len(tc.expectedResult.Users))
460-
for i, user := range returnedResult.Users {
461-
assert.Equal(t, *tc.expectedResult.Users[i].Login, *user.Login)
462-
assert.Equal(t, *tc.expectedResult.Users[i].ID, *user.ID)
463-
assert.Equal(t, *tc.expectedResult.Users[i].HTMLURL, *user.HTMLURL)
464-
assert.Equal(t, *tc.expectedResult.Users[i].AvatarURL, *user.AvatarURL)
465-
assert.Equal(t, *tc.expectedResult.Users[i].Type, *user.Type)
466-
assert.Equal(t, *tc.expectedResult.Users[i].Followers, *user.Followers)
452+
assert.Equal(t, *tc.expectedResult.Total, returnedResult.TotalCount)
453+
assert.Equal(t, *tc.expectedResult.IncompleteResults, returnedResult.IncompleteResults)
454+
assert.Len(t, returnedResult.Items, len(tc.expectedResult.Users))
455+
for i, user := range returnedResult.Items {
456+
assert.Equal(t, *tc.expectedResult.Users[i].Login, user.Login)
457+
assert.Equal(t, *tc.expectedResult.Users[i].ID, user.ID)
458+
assert.Equal(t, *tc.expectedResult.Users[i].HTMLURL, user.ProfileURL)
459+
assert.Equal(t, *tc.expectedResult.Users[i].AvatarURL, user.AvatarURL)
467460
}
468461
})
469462
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy