diff --git a/server/skillhub-app/src/test/java/com/iflytek/skillhub/infra/jpa/NamespaceJpaRepositoryTest.java b/server/skillhub-app/src/test/java/com/iflytek/skillhub/infra/jpa/NamespaceJpaRepositoryTest.java index 2232a894..255387cb 100644 --- a/server/skillhub-app/src/test/java/com/iflytek/skillhub/infra/jpa/NamespaceJpaRepositoryTest.java +++ b/server/skillhub-app/src/test/java/com/iflytek/skillhub/infra/jpa/NamespaceJpaRepositoryTest.java @@ -66,6 +66,20 @@ class NamespaceJpaRepositoryTest { .containsExactly("underscore-team"); } + @Test + void search_acceptsNullQueryAlongsideOtherFilters() { + var page = repository.search( + NamespaceStatus.ACTIVE, + NamespaceType.TEAM, + null, + "percent-team", + PageRequest.of(0, 1) + ); + + assertThat(page.getContent()).extracting(Namespace::getSlug) + .containsExactly("percent-team"); + } + private Namespace persist(Namespace namespace) { entityManager.persist(namespace); return namespace; diff --git a/server/skillhub-infra/src/main/java/com/iflytek/skillhub/infra/jpa/NamespaceJpaRepository.java b/server/skillhub-infra/src/main/java/com/iflytek/skillhub/infra/jpa/NamespaceJpaRepository.java index 4476f961..07fa8e94 100644 --- a/server/skillhub-infra/src/main/java/com/iflytek/skillhub/infra/jpa/NamespaceJpaRepository.java +++ b/server/skillhub-infra/src/main/java/com/iflytek/skillhub/infra/jpa/NamespaceJpaRepository.java @@ -32,8 +32,8 @@ public interface NamespaceJpaRepository AND (:type IS NULL OR n.type = :type) AND ( :query IS NULL - OR lower(n.slug) LIKE lower(concat('%', :query, '%')) ESCAPE '!' - OR lower(n.displayName) LIKE lower(concat('%', :query, '%')) ESCAPE '!' + OR lower(n.slug) LIKE lower(concat('%', cast(:query as string), '%')) ESCAPE '!' + OR lower(n.displayName) LIKE lower(concat('%', cast(:query as string), '%')) ESCAPE '!' ) AND (:slug IS NULL OR n.slug = :slug) """) @@ -52,8 +52,8 @@ public interface NamespaceJpaRepository AND (:type IS NULL OR n.type = :type) AND ( :query IS NULL - OR lower(n.slug) LIKE lower(concat('%', :query, '%')) ESCAPE '!' - OR lower(n.displayName) LIKE lower(concat('%', :query, '%')) ESCAPE '!' + OR lower(n.slug) LIKE lower(concat('%', cast(:query as string), '%')) ESCAPE '!' + OR lower(n.displayName) LIKE lower(concat('%', cast(:query as string), '%')) ESCAPE '!' ) AND (:slug IS NULL OR n.slug = :slug) """)