diff --git a/api-docs/openapi/v3_0/aggregated.json b/api-docs/openapi/v3_0/aggregated.json index 57a6d0830..22c51fda8 100644 --- a/api-docs/openapi/v3_0/aggregated.json +++ b/api-docs/openapi/v3_0/aggregated.json @@ -6759,14 +6759,6 @@ "type": "string" } } - }, - { - "description": "Keyword", - "in": "query", - "name": "keyword", - "schema": { - "type": "string" - } } ], "responses": { diff --git a/application/src/main/java/run/halo/app/infra/SchemeInitializer.java b/application/src/main/java/run/halo/app/infra/SchemeInitializer.java index 999b6276c..fbe4f77d0 100644 --- a/application/src/main/java/run/halo/app/infra/SchemeInitializer.java +++ b/application/src/main/java/run/halo/app/infra/SchemeInitializer.java @@ -533,16 +533,6 @@ public class SchemeInitializer implements ApplicationListener notification.getSpec().getRecipient())) ); - indexSpecs.add(new IndexSpec() - .setName("spec.title") - .setIndexFunc(simpleAttribute(Notification.class, - notification -> notification.getSpec().getTitle())) - ); - indexSpecs.add(new IndexSpec() - .setName("spec.rawContent") - .setIndexFunc(simpleAttribute(Notification.class, - notification -> notification.getSpec().getRawContent())) - ); }); } diff --git a/application/src/main/java/run/halo/app/notification/UserNotificationQuery.java b/application/src/main/java/run/halo/app/notification/UserNotificationQuery.java index 61091828a..fe331f52e 100644 --- a/application/src/main/java/run/halo/app/notification/UserNotificationQuery.java +++ b/application/src/main/java/run/halo/app/notification/UserNotificationQuery.java @@ -1,26 +1,13 @@ package run.halo.app.notification; -import static org.springdoc.core.fn.builders.parameter.Builder.parameterBuilder; import static run.halo.app.extension.index.query.QueryFactory.and; -import static run.halo.app.extension.index.query.QueryFactory.contains; import static run.halo.app.extension.index.query.QueryFactory.equal; -import static run.halo.app.extension.index.query.QueryFactory.or; -import static run.halo.app.extension.router.QueryParamBuildUtil.sortParameter; import static run.halo.app.extension.router.selector.SelectorUtil.labelAndFieldSelectorToListOptions; -import io.swagger.v3.oas.annotations.enums.ParameterIn; -import io.swagger.v3.oas.annotations.media.ArraySchema; -import io.swagger.v3.oas.annotations.media.Schema; import org.apache.commons.lang3.StringUtils; -import org.springdoc.core.fn.builders.operation.Builder; -import org.springframework.data.domain.Sort; -import org.springframework.lang.Nullable; import org.springframework.web.server.ServerWebExchange; -import run.halo.app.core.extension.endpoint.SortResolver; import run.halo.app.extension.ListOptions; -import run.halo.app.extension.PageRequest; -import run.halo.app.extension.PageRequestImpl; -import run.halo.app.extension.router.IListRequest; +import run.halo.app.extension.router.SortableRequest; import run.halo.app.extension.router.selector.FieldSelector; /** @@ -29,72 +16,27 @@ import run.halo.app.extension.router.selector.FieldSelector; * @author guqing * @since 2.10.0 */ -public class UserNotificationQuery extends IListRequest.QueryListRequest { - - private final ServerWebExchange exchange; +public class UserNotificationQuery extends SortableRequest { private final String username; public UserNotificationQuery(ServerWebExchange exchange, String username) { - super(exchange.getRequest().getQueryParams()); - this.exchange = exchange; + super(exchange); this.username = username; } - @Nullable - public String getKeyword() { - return StringUtils.defaultIfBlank(queryParams.getFirst("keyword"), null); - } - - @ArraySchema(uniqueItems = true, - arraySchema = @Schema(name = "sort", - description = "Sort property and direction of the list result. Supported fields: " - + "metadata.creationTimestamp"), - schema = @Schema(description = "like field,asc or field,desc", - implementation = String.class, - example = "creationTimestamp,desc")) - public Sort getSort() { - var sort = SortResolver.defaultInstance.resolve(exchange); - return sort.and(Sort.by( - Sort.Order.desc("metadata.creationTimestamp"), - Sort.Order.desc("metadata.name")) - ); - } - /** * Build a list options from the query object. */ + @Override public ListOptions toListOptions() { var listOptions = labelAndFieldSelectorToListOptions(getLabelSelector(), getFieldSelector()); var filedQuery = listOptions.getFieldSelector().query(); - if (StringUtils.isNotBlank(getKeyword())) { - filedQuery = and(filedQuery, - or( - contains("spec.title", getKeyword()), - contains("spec.rawContent", getKeyword()) - ) - ); - } if (StringUtils.isNotBlank(username)) { filedQuery = and(filedQuery, equal("spec.recipient", username)); } listOptions.setFieldSelector(FieldSelector.of(filedQuery)); return listOptions; } - - public PageRequest toPageRequest() { - return PageRequestImpl.of(getPage(), getSize(), getSort()); - } - - public static void buildParameters(Builder builder) { - IListRequest.buildParameters(builder); - builder.parameter(sortParameter()) - .parameter(parameterBuilder() - .in(ParameterIn.QUERY) - .name("keyword") - .description("Keyword") - .implementation(String.class) - .required(false)); - } } diff --git a/ui/packages/api-client/src/api/notification-v1alpha1-uc-api.ts b/ui/packages/api-client/src/api/notification-v1alpha1-uc-api.ts index 6f77e06d2..e06c40402 100644 --- a/ui/packages/api-client/src/api/notification-v1alpha1-uc-api.ts +++ b/ui/packages/api-client/src/api/notification-v1alpha1-uc-api.ts @@ -131,11 +131,10 @@ export const NotificationV1alpha1UcApiAxiosParamCreator = function (configuratio * @param {Array} [labelSelector] Label selector. e.g.: hidden!=true * @param {Array} [fieldSelector] Field selector. e.g.: metadata.name==halo * @param {Array} [sort] Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported. - * @param {string} [keyword] Keyword * @param {*} [options] Override http request option. * @throws {RequiredError} */ - listUserNotifications: async (username: string, page?: number, size?: number, labelSelector?: Array, fieldSelector?: Array, sort?: Array, keyword?: string, options: RawAxiosRequestConfig = {}): Promise => { + listUserNotifications: async (username: string, page?: number, size?: number, labelSelector?: Array, fieldSelector?: Array, sort?: Array, options: RawAxiosRequestConfig = {}): Promise => { // verify required parameter 'username' is not null or undefined assertParamExists('listUserNotifications', 'username', username) const localVarPath = `/apis/api.notification.halo.run/v1alpha1/userspaces/{username}/notifications` @@ -179,10 +178,6 @@ export const NotificationV1alpha1UcApiAxiosParamCreator = function (configuratio localVarQueryParameter['sort'] = sort; } - if (keyword !== undefined) { - localVarQueryParameter['keyword'] = keyword; - } - setSearchParams(localVarUrlObj, localVarQueryParameter); @@ -374,12 +369,11 @@ export const NotificationV1alpha1UcApiFp = function(configuration?: Configuratio * @param {Array} [labelSelector] Label selector. e.g.: hidden!=true * @param {Array} [fieldSelector] Field selector. e.g.: metadata.name==halo * @param {Array} [sort] Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported. - * @param {string} [keyword] Keyword * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async listUserNotifications(username: string, page?: number, size?: number, labelSelector?: Array, fieldSelector?: Array, sort?: Array, keyword?: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.listUserNotifications(username, page, size, labelSelector, fieldSelector, sort, keyword, options); + async listUserNotifications(username: string, page?: number, size?: number, labelSelector?: Array, fieldSelector?: Array, sort?: Array, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.listUserNotifications(username, page, size, labelSelector, fieldSelector, sort, options); const localVarOperationServerIndex = configuration?.serverIndex ?? 0; const localVarOperationServerBasePath = operationServerMap['NotificationV1alpha1UcApi.listUserNotifications']?.[localVarOperationServerIndex]?.url; return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); @@ -458,7 +452,7 @@ export const NotificationV1alpha1UcApiFactory = function (configuration?: Config * @throws {RequiredError} */ listUserNotifications(requestParameters: NotificationV1alpha1UcApiListUserNotificationsRequest, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.listUserNotifications(requestParameters.username, requestParameters.page, requestParameters.size, requestParameters.labelSelector, requestParameters.fieldSelector, requestParameters.sort, requestParameters.keyword, options).then((request) => request(axios, basePath)); + return localVarFp.listUserNotifications(requestParameters.username, requestParameters.page, requestParameters.size, requestParameters.labelSelector, requestParameters.fieldSelector, requestParameters.sort, options).then((request) => request(axios, basePath)); }, /** * Mark the specified notification as read. @@ -572,13 +566,6 @@ export interface NotificationV1alpha1UcApiListUserNotificationsRequest { * @memberof NotificationV1alpha1UcApiListUserNotifications */ readonly sort?: Array - - /** - * Keyword - * @type {string} - * @memberof NotificationV1alpha1UcApiListUserNotifications - */ - readonly keyword?: string } /** @@ -681,7 +668,7 @@ export class NotificationV1alpha1UcApi extends BaseAPI { * @memberof NotificationV1alpha1UcApi */ public listUserNotifications(requestParameters: NotificationV1alpha1UcApiListUserNotificationsRequest, options?: RawAxiosRequestConfig) { - return NotificationV1alpha1UcApiFp(this.configuration).listUserNotifications(requestParameters.username, requestParameters.page, requestParameters.size, requestParameters.labelSelector, requestParameters.fieldSelector, requestParameters.sort, requestParameters.keyword, options).then((request) => request(this.axios, this.basePath)); + return NotificationV1alpha1UcApiFp(this.configuration).listUserNotifications(requestParameters.username, requestParameters.page, requestParameters.size, requestParameters.labelSelector, requestParameters.fieldSelector, requestParameters.sort, options).then((request) => request(this.axios, this.basePath)); } /**