Browse Source

Improve text search and sort property

pull/14074/head
Andrii Landiak 7 months ago
parent
commit
6f5bf845d8
  1. 14
      application/src/main/java/org/thingsboard/server/controller/ApiKeyController.java
  2. 1
      application/src/main/java/org/thingsboard/server/controller/ControllerConstants.java
  3. 4
      dao/src/main/java/org/thingsboard/server/dao/sql/pat/ApiKeyInfoRepository.java
  4. 2
      dao/src/main/java/org/thingsboard/server/dao/sql/pat/JpaApiKeyInfoDao.java

14
application/src/main/java/org/thingsboard/server/controller/ApiKeyController.java

@ -16,6 +16,7 @@
package org.thingsboard.server.controller;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -47,10 +48,13 @@ import java.util.Optional;
import java.util.UUID;
import static org.thingsboard.server.controller.ControllerConstants.API_KEY_ID_PARAM_DESCRIPTION;
import static org.thingsboard.server.controller.ControllerConstants.API_KEY_TEXT_SEARCH_DESCRIPTION;
import static org.thingsboard.server.controller.ControllerConstants.AVAILABLE_FOR_ANY_AUTHORIZED_USER;
import static org.thingsboard.server.controller.ControllerConstants.PAGE_DATA_PARAMETERS;
import static org.thingsboard.server.controller.ControllerConstants.PAGE_NUMBER_DESCRIPTION;
import static org.thingsboard.server.controller.ControllerConstants.PAGE_SIZE_DESCRIPTION;
import static org.thingsboard.server.controller.ControllerConstants.SORT_ORDER_DESCRIPTION;
import static org.thingsboard.server.controller.ControllerConstants.SORT_PROPERTY_DESCRIPTION;
import static org.thingsboard.server.controller.ControllerConstants.USER_ID_PARAM_DESCRIPTION;
@RestController
@ -86,9 +90,15 @@ public class ApiKeyController extends BaseController {
@Parameter(description = PAGE_SIZE_DESCRIPTION, required = true)
@RequestParam int pageSize,
@Parameter(description = PAGE_NUMBER_DESCRIPTION, required = true)
@RequestParam int page) throws ThingsboardException {
@RequestParam int page,
@Parameter(description = API_KEY_TEXT_SEARCH_DESCRIPTION)
@RequestParam(required = false) String textSearch,
@Parameter(description = SORT_PROPERTY_DESCRIPTION, schema = @Schema(allowableValues = {"createdTime", "expirationTime", "description", "enabled"}))
@RequestParam(required = false) String sortProperty,
@Parameter(description = SORT_ORDER_DESCRIPTION, schema = @Schema(allowableValues = {"ASC", "DESC"}))
@RequestParam(required = false) String sortOrder) throws ThingsboardException {
SecurityUser securityUser = getCurrentUser();
PageLink pageLink = createPageLink(pageSize, page, null, null, null);
PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder);
UserId userId = new UserId(toUUID(userIdStr));
accessControlService.checkPermission(securityUser, Resource.API_KEY, Operation.READ);
return apiKeyService.findApiKeysByUserId(securityUser.getTenantId(), userId, pageLink);

1
application/src/main/java/org/thingsboard/server/controller/ControllerConstants.java

@ -92,6 +92,7 @@ public class ControllerConstants {
protected static final String RULE_CHAIN_TEXT_SEARCH_DESCRIPTION = "The case insensitive 'substring' filter based on the rule chain name.";
protected static final String DEVICE_PROFILE_TEXT_SEARCH_DESCRIPTION = "The case insensitive 'substring' filter based on the device profile name.";
protected static final String AI_MODEL_TEXT_SEARCH_DESCRIPTION = "The case insensitive 'substring' filter based on the AI model name, provider and model ID.";
protected static final String API_KEY_TEXT_SEARCH_DESCRIPTION = "The case insensitive 'substring' filter based on the description.";
protected static final String ASSET_PROFILE_TEXT_SEARCH_DESCRIPTION = "The case insensitive 'substring' filter based on the asset profile name.";
protected static final String CUSTOMER_TEXT_SEARCH_DESCRIPTION = "The case insensitive 'substring' filter based on the customer title.";

4
dao/src/main/java/org/thingsboard/server/dao/sql/pat/ApiKeyInfoRepository.java

@ -26,9 +26,11 @@ import java.util.UUID;
public interface ApiKeyInfoRepository extends JpaRepository<ApiKeyInfoEntity, UUID> {
@Query("SELECT ak FROM ApiKeyInfoEntity ak WHERE ak.tenantId = :tenantId AND ak.userId = :userId")
@Query("SELECT ak FROM ApiKeyInfoEntity ak WHERE ak.tenantId = :tenantId AND ak.userId = :userId AND " +
"(:searchText is NULL OR ilike(ak.description, concat('%', :searchText, '%')) = true)")
Page<ApiKeyInfoEntity> findByUserId(@Param("tenantId") UUID tenantId,
@Param("userId") UUID userId,
@Param("searchText") String searchText,
Pageable pageable);
}

2
dao/src/main/java/org/thingsboard/server/dao/sql/pat/JpaApiKeyInfoDao.java

@ -42,7 +42,7 @@ public class JpaApiKeyInfoDao extends JpaAbstractDao<ApiKeyInfoEntity, ApiKeyInf
@Override
public PageData<ApiKeyInfo> findByUserId(TenantId tenantId, UserId userId, PageLink pageLink) {
return DaoUtil.toPageData(apiKeyInfoRepository.findByUserId(tenantId.getId(), userId.getId(), DaoUtil.toPageable(pageLink)));
return DaoUtil.toPageData(apiKeyInfoRepository.findByUserId(tenantId.getId(), userId.getId(), pageLink.getTextSearch(), DaoUtil.toPageable(pageLink)));
}
@Override

Loading…
Cancel
Save