Skip to content

Commit 112327d

Browse files
feat: add search
1 parent ea20a1b commit 112327d

File tree

3 files changed

+71
-11
lines changed

3 files changed

+71
-11
lines changed

services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3670,6 +3670,33 @@ paths:
36703670
type: boolean
36713671
default: false
36723672
title: Include Extras
3673+
- name: search
3674+
in: query
3675+
required: false
3676+
schema:
3677+
anyOf:
3678+
- type: string
3679+
- type: 'null'
3680+
title: Search
3681+
- name: filters
3682+
in: query
3683+
required: false
3684+
schema:
3685+
anyOf:
3686+
- type: string
3687+
contentMediaType: application/json
3688+
contentSchema: {}
3689+
- type: 'null'
3690+
title: Filters
3691+
- name: order_by
3692+
in: query
3693+
required: false
3694+
schema:
3695+
type: string
3696+
contentMediaType: application/json
3697+
contentSchema: {}
3698+
default: '{"field":"modified_at","direction":"desc"}'
3699+
title: Order By
36733700
- name: limit
36743701
in: query
36753702
required: false

services/web/server/src/simcore_service_webserver/functions/_controller/_functions_rest.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,10 @@ async def list_functions(request: web.Request) -> web.Response:
166166
pagination_limit=query_params.limit,
167167
pagination_offset=query_params.offset,
168168
order_by=OrderBy.model_construct(**query_params.order_by.model_dump()),
169+
search_by_function_title=(
170+
query_params.filters.search_by_title if query_params.filters else None
171+
),
172+
search_by_multi_columns=query_params.search,
169173
)
170174

171175
chunk: list[RegisteredFunctionGet] = []

services/web/server/src/simcore_service_webserver/functions/_controller/_functions_rest_schemas.py

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
1+
from typing import Annotated
2+
13
from models_library.basic_types import IDStr
24
from models_library.functions import FunctionID
35
from models_library.rest_base import RequestParameters
6+
from models_library.rest_filters import Filters, FiltersQueryParameters
47
from models_library.rest_ordering import (
58
OrderBy,
69
OrderDirection,
710
create_ordering_query_model_class,
811
)
912
from models_library.rest_pagination import PageQueryParameters
10-
from pydantic import BaseModel, ConfigDict
13+
from pydantic import BaseModel, ConfigDict, Field
1114

1215
from ...models import AuthenticatedRequestContext
1316

@@ -19,25 +22,51 @@ class FunctionPathParams(BaseModel):
1922
model_config = ConfigDict(populate_by_name=True, extra="forbid")
2023

2124

22-
class _FunctionQueryParams(BaseModel):
25+
class FunctionQueryParams(BaseModel):
2326
include_extras: bool = False
2427

2528

26-
class FunctionGetQueryParams(_FunctionQueryParams): ...
29+
class FunctionGetQueryParams(FunctionQueryParams): ...
30+
31+
32+
class FunctionFilters(Filters):
33+
search_by_title: Annotated[
34+
str | None,
35+
Field(
36+
description="A search query to filter functions by their title. This field performs a case-insensitive partial match against the function title field.",
37+
),
38+
] = None
2739

2840

29-
_FunctionOrderQueryParams: type[RequestParameters] = create_ordering_query_model_class(
30-
ordering_fields={
31-
"created_at",
32-
"modified_at",
33-
"name",
34-
},
35-
default=OrderBy(field=IDStr("modified_at"), direction=OrderDirection.DESC),
41+
FunctionListOrderQueryParams: type[RequestParameters] = (
42+
create_ordering_query_model_class(
43+
ordering_fields={
44+
"created_at",
45+
"modified_at",
46+
"name",
47+
},
48+
default=OrderBy(field=IDStr("modified_at"), direction=OrderDirection.DESC),
49+
)
3650
)
3751

3852

53+
class FunctionsListExtraQueryParams(RequestParameters):
54+
search: Annotated[
55+
str | None,
56+
Field(
57+
description="Multi column full text search",
58+
max_length=100,
59+
examples=["My Function"],
60+
),
61+
] = None
62+
63+
3964
class FunctionsListQueryParams(
40-
PageQueryParameters, _FunctionOrderQueryParams, _FunctionQueryParams # type: ignore[misc, valid-type]
65+
PageQueryParameters,
66+
FunctionListOrderQueryParams, # type: ignore[misc, valid-type]
67+
FiltersQueryParameters[FunctionFilters],
68+
FunctionsListExtraQueryParams,
69+
FunctionQueryParams,
4170
): ...
4271

4372

0 commit comments

Comments
 (0)