diff --git a/models/user.go b/models/user.go index 01c7f5048..6a9828d57 100644 --- a/models/user.go +++ b/models/user.go @@ -1337,6 +1337,7 @@ func GetUser(user *User) (bool, error) { type SearchUserOptions struct { Keyword string Type UserType + UID int64 OrderBy SearchOrderBy Page int PageSize int // Can be smaller than or equal to setting.UI.ExplorePagingNum @@ -1355,9 +1356,14 @@ func (opts *SearchUserOptions) toConds() builder.Cond { if opts.SearchByEmail { keywordCond = keywordCond.Or(builder.Like{"LOWER(email)", lowerKeyword}) } + cond = cond.And(keywordCond) } + if opts.UID > 0 { + cond = cond.And(builder.Eq{"id": opts.UID}) + } + if !opts.IsActive.IsNone() { cond = cond.And(builder.Eq{"is_active": opts.IsActive.IsTrue()}) } diff --git a/routers/api/v1/user/user.go b/routers/api/v1/user/user.go index edd5d1b1c..38576a733 100644 --- a/routers/api/v1/user/user.go +++ b/routers/api/v1/user/user.go @@ -27,6 +27,10 @@ func Search(ctx *context.APIContext) { // in: query // description: keyword // type: string + // - name: uid + // in: query + // description: ID of the user to search for + // type: integer // - name: limit // in: query // description: maximum number of users to return @@ -45,6 +49,7 @@ func Search(ctx *context.APIContext) { // "$ref": "#/definitions/User" opts := &models.SearchUserOptions{ Keyword: strings.Trim(ctx.Query("q"), " "), + UID: com.StrTo(ctx.Query("uid")).MustInt64(), Type: models.UserTypeIndividual, PageSize: com.StrTo(ctx.Query("limit")).MustInt(), } diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl index 18fb34ff4..e6cdfc027 100644 --- a/templates/swagger/v1_json.tmpl +++ b/templates/swagger/v1_json.tmpl @@ -5203,6 +5203,12 @@ "name": "q", "in": "query" }, + { + "type": "integer", + "description": "ID of the user to search for", + "name": "uid", + "in": "query" + }, { "type": "integer", "description": "maximum number of users to return",