@ -20,6 +20,23 @@ import (
api "code.gitea.io/sdk/gitea"
api "code.gitea.io/sdk/gitea"
)
)
var searchOrderByMap = map [ string ] map [ string ] models . SearchOrderBy {
"asc" : {
"alpha" : models . SearchOrderByAlphabetically ,
"created" : models . SearchOrderByOldest ,
"updated" : models . SearchOrderByLeastUpdated ,
"size" : models . SearchOrderBySize ,
"id" : models . SearchOrderByID ,
} ,
"desc" : {
"alpha" : models . SearchOrderByAlphabeticallyReverse ,
"created" : models . SearchOrderByNewest ,
"updated" : models . SearchOrderByRecentUpdated ,
"size" : models . SearchOrderBySizeReverse ,
"id" : models . SearchOrderByIDReverse ,
} ,
}
// Search repositories via options
// Search repositories via options
func Search ( ctx * context . APIContext ) {
func Search ( ctx * context . APIContext ) {
// swagger:operation GET /repos/search repository repoSearch
// swagger:operation GET /repos/search repository repoSearch
@ -53,6 +70,17 @@ func Search(ctx *context.APIContext) {
// in: query
// in: query
// description: if `uid` is given, search only for repos that the user owns
// description: if `uid` is given, search only for repos that the user owns
// type: boolean
// type: boolean
// - name: sort
// in: query
// description: sort repos by attribute. Supported values are
// "alpha", "created", "updated", "size", and "id".
// Default is "alpha"
// type: string
// - name: order
// in: query
// description: sort order, either "asc" (ascending) or "desc" (descending).
// Default is "asc", ignored if "sort" is not specified.
// type: string
// responses:
// responses:
// "200":
// "200":
// "$ref": "#/responses/SearchResults"
// "$ref": "#/responses/SearchResults"
@ -88,6 +116,25 @@ func Search(ctx *context.APIContext) {
return
return
}
}
var sortMode = ctx . Query ( "sort" )
if len ( sortMode ) > 0 {
var sortOrder = ctx . Query ( "order" )
if len ( sortOrder ) == 0 {
sortOrder = "asc"
}
if searchModeMap , ok := searchOrderByMap [ sortOrder ] ; ok {
if orderBy , ok := searchModeMap [ sortMode ] ; ok {
opts . OrderBy = orderBy
} else {
ctx . Error ( http . StatusUnprocessableEntity , "" , fmt . Errorf ( "Invalid sort mode: \"%s\"" , sortMode ) )
return
}
} else {
ctx . Error ( http . StatusUnprocessableEntity , "" , fmt . Errorf ( "Invalid sort order: \"%s\"" , sortOrder ) )
return
}
}
var err error
var err error
if opts . OwnerID > 0 {
if opts . OwnerID > 0 {
var repoOwner * models . User
var repoOwner * models . User