diff --git a/api/compose/spec.json b/api/compose/spec.json index b7f034e2b..28f17cf8f 100644 --- a/api/compose/spec.json +++ b/api/compose/spec.json @@ -444,6 +444,12 @@ "required": false, "title": "Search query" }, + { + "type": "string", + "name": "name", + "required": false, + "title": "Search by name" + }, { "name": "page", "type": "uint", diff --git a/api/compose/spec/module.json b/api/compose/spec/module.json index 43db76d09..9928918e6 100644 --- a/api/compose/spec/module.json +++ b/api/compose/spec/module.json @@ -38,6 +38,12 @@ "title": "Search query", "type": "string" }, + { + "name": "name", + "required": false, + "title": "Search by name", + "type": "string" + }, { "name": "page", "required": false, diff --git a/compose/internal/repository/module.go b/compose/internal/repository/module.go index 8f87ce7fc..35fa0ee1a 100644 --- a/compose/internal/repository/module.go +++ b/compose/internal/repository/module.go @@ -97,6 +97,11 @@ func (r module) Find(filter types.ModuleFilter) (set types.ModuleSet, f types.Mo query = query.Where("name like ?", q) } + if f.Name != "" { + query = query.Where("LOWER(name) = ?", strings.ToLower(f.Name)) + + } + if f.Count, err = r.count(query); err != nil || f.Count == 0 { return } diff --git a/compose/rest/module.go b/compose/rest/module.go index 876f512d0..2b65ee89a 100644 --- a/compose/rest/module.go +++ b/compose/rest/module.go @@ -72,6 +72,7 @@ func (ctrl *Module) List(ctx context.Context, r *request.ModuleList) (interface{ f := types.ModuleFilter{ NamespaceID: r.NamespaceID, Query: r.Query, + Name: r.Name, PerPage: r.PerPage, Page: r.Page, } diff --git a/compose/rest/request/module.go b/compose/rest/request/module.go index 0bff31303..22b6cb6b6 100644 --- a/compose/rest/request/module.go +++ b/compose/rest/request/module.go @@ -37,6 +37,7 @@ var _ = multipart.FileHeader{} // Module list request parameters type ModuleList struct { Query string + Name string Page uint PerPage uint NamespaceID uint64 `json:",string"` @@ -50,6 +51,7 @@ func (r ModuleList) Auditable() map[string]interface{} { var out = map[string]interface{}{} out["query"] = r.Query + out["name"] = r.Name out["page"] = r.Page out["perPage"] = r.PerPage out["namespaceID"] = r.NamespaceID @@ -87,6 +89,9 @@ func (r *ModuleList) Fill(req *http.Request) (err error) { if val, ok := get["query"]; ok { r.Query = val } + if val, ok := get["name"]; ok { + r.Name = val + } if val, ok := get["page"]; ok { r.Page = parseUint(val) } diff --git a/compose/types/module.go b/compose/types/module.go index 218bd6800..fb15a562f 100644 --- a/compose/types/module.go +++ b/compose/types/module.go @@ -24,6 +24,7 @@ type ( ModuleFilter struct { NamespaceID uint64 `json:"namespaceID,string"` Query string `json:"query"` + Name string `json:"name"` Page uint `json:"page"` PerPage uint `json:"perPage"` // Sort string `json:"sort"` diff --git a/docs/compose/README.md b/docs/compose/README.md index 7608a4d76..36bf90ff6 100644 --- a/docs/compose/README.md +++ b/docs/compose/README.md @@ -505,6 +505,7 @@ Compose module definitions | Parameter | Type | Method | Description | Default | Required? | | --------- | ---- | ------ | ----------- | ------- | --------- | | query | string | GET | Search query | N/A | NO | +| name | string | GET | Search by name | N/A | NO | | page | uint | GET | Page number (0 based) | N/A | NO | | perPage | uint | GET | Returned items per page (default 50) | N/A | NO | | namespaceID | uint64 | PATH | Namespace ID | N/A | YES |